118 lines
2.6 KiB
TypeScript
118 lines
2.6 KiB
TypeScript
import {
|
|
AppConfigSlug,
|
|
BaseSetting,
|
|
db,
|
|
PostType,
|
|
VisitType,
|
|
} from '@nice/common';
|
|
export async function updateTotalCourseViewCount(type: VisitType) {
|
|
const posts = await db.post.findMany({
|
|
where: {
|
|
type: { in: [PostType.COURSE, PostType.LECTURE] },
|
|
deletedAt: null,
|
|
},
|
|
select: { id: true, type: true },
|
|
});
|
|
|
|
const courseIds = posts
|
|
.filter((post) => post.type === PostType.COURSE)
|
|
.map((course) => course.id);
|
|
const lectures = posts.filter((post) => post.type === PostType.LECTURE);
|
|
const totalViews = await db.visit.aggregate({
|
|
_sum: {
|
|
views: true,
|
|
},
|
|
where: {
|
|
postId: { in: lectures.map((lecture) => lecture.id) },
|
|
type: type,
|
|
},
|
|
});
|
|
const appConfig = await db.appConfig.findFirst({
|
|
where: {
|
|
slug: AppConfigSlug.BASE_SETTING,
|
|
},
|
|
select: {
|
|
id: true,
|
|
meta: true,
|
|
},
|
|
});
|
|
const staffs = await db.staff.count({
|
|
where: { deletedAt: null },
|
|
});
|
|
|
|
const baseSeting = appConfig.meta as BaseSetting;
|
|
await db.appConfig.update({
|
|
where: {
|
|
slug: AppConfigSlug.BASE_SETTING,
|
|
},
|
|
data: {
|
|
meta: {
|
|
...baseSeting,
|
|
appConfig: {
|
|
...(baseSeting?.appConfig || {}),
|
|
statistics: {
|
|
reads: totalViews._sum.views || 0,
|
|
courses: courseIds?.length || 0,
|
|
staffs: staffs || 0,
|
|
lectures: lectures?.length || 0,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}
|
|
export async function updatePostViewCount(id: string, type: VisitType) {
|
|
const post = await db.post.findFirst({
|
|
where: { id },
|
|
select: { id: true, meta: true },
|
|
});
|
|
|
|
const totalViews = await db.visit.aggregate({
|
|
_sum: {
|
|
views: true,
|
|
},
|
|
where: {
|
|
postId: id,
|
|
type: type,
|
|
},
|
|
});
|
|
if (type === VisitType.READED) {
|
|
await db.post.update({
|
|
where: {
|
|
id: id,
|
|
},
|
|
data: {
|
|
meta: {
|
|
...((post?.meta as any) || {}),
|
|
views: totalViews._sum.views || 0,
|
|
}, // Use 0 if no visits exist
|
|
},
|
|
});
|
|
console.log('readed');
|
|
} else if (type === VisitType.LIKE) {
|
|
await db.post.update({
|
|
where: {
|
|
id: id,
|
|
},
|
|
data: {
|
|
meta: {
|
|
...((post?.meta as any) || {}),
|
|
likes: totalViews._sum.views || 0, // Use 0 if no visits exist
|
|
},
|
|
},
|
|
});
|
|
} else if (type === VisitType.HATE) {
|
|
await db.post.update({
|
|
where: {
|
|
id: id,
|
|
},
|
|
data: {
|
|
meta: {
|
|
...((post?.meta as any) || {}),
|
|
hates: totalViews._sum.views || 0, // Use 0 if no visits exist
|
|
},
|
|
},
|
|
});
|
|
}
|
|
}
|