feat: add recent notification api

Signed-off-by: Innei <i@innei.in>
This commit is contained in:
Innei 2024-04-14 15:14:38 +08:00
parent 14e04953a8
commit 1111b96013
No known key found for this signature in database
GPG Key ID: 0F62D33977F021F7
3 changed files with 56 additions and 3 deletions

View File

@ -13,9 +13,12 @@
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"material-icon-theme.activeIconPack": "nest",
"cSpell.words": ["qaqdmin"],
"cSpell.words": [
"qaqdmin"
],
"typescript.tsdk": "node_modules/typescript/lib",
"yaml.schemas": {
"https://json.schemastore.org/github-workflow.json": "file:///Users/xiaoxun/github/innei-repo/mx-space/mx-server/.github/workflows/build.yml"
}
}
},
"typescript.preferences.preferTypeOnlyAutoImports": false
}

View File

@ -14,6 +14,7 @@ import { Activity } from './activity.constant'
import { ActivityService } from './activity.service'
import {
ActivityDeleteDto,
ActivityNotificationDto,
ActivityQueryDto,
ActivityRangeDto,
ActivityTypeParamsDto,
@ -197,4 +198,47 @@ export class ActivityController {
...recent,
}
}
@HTTPDecorators.SkipLogging
@Get('/recent/notification')
async getNotification(@Query() query: ActivityNotificationDto) {
const activity = await this.getRecentActivities()
const { from } = query
const fromDate = new Date(from)
const now = new Date()
if (fromDate > now) {
return []
}
const { post, note } = activity
const postList = post
.filter((item) => {
return new Date(item.created) > fromDate
})
.map((item) => {
return {
title: item.title,
type: CollectionRefTypes.Post,
id: item.id,
slug: item.slug,
}
})
const noteList = note
.filter((item) => {
return new Date(item.created) > fromDate
})
.map((item) => {
return {
title: item.title,
type: CollectionRefTypes.Note,
id: item.nid,
}
})
return [...postList, ...noteList]
}
}

View File

@ -38,3 +38,9 @@ export class ActivityRangeDto {
@Type(() => Number)
end: number
}
export class ActivityNotificationDto {
@IsInt()
@Type(() => Number)
from: number
}