From e8b23533d70b50c99d23c605ca9f1b43fad5a106 Mon Sep 17 00:00:00 2001 From: ditiqi Date: Sun, 26 Jan 2025 15:28:34 +0800 Subject: [PATCH] add 20250126-1558 --- apps/server/src/auth/auth.service.ts | 16 +- apps/server/src/models/post/utils.ts | 20 +- apps/server/src/models/visit/visit.service.ts | 7 + apps/web/src/app/auth/register.tsx | 207 +++++++++--------- .../src/components/models/post/LetterCard.tsx | 201 +++++++++-------- .../models/post/detail/PostCommentList.tsx | 2 +- packages/client/src/api/hooks/useVisitor.ts | 15 ++ packages/common/prisma/schema.prisma | 3 +- packages/common/src/enum.ts | 1 + 9 files changed, 264 insertions(+), 208 deletions(-) diff --git a/apps/server/src/auth/auth.service.ts b/apps/server/src/auth/auth.service.ts index 4f0be21..8d7e96c 100755 --- a/apps/server/src/auth/auth.service.ts +++ b/apps/server/src/auth/auth.service.ts @@ -169,12 +169,16 @@ export class AuthService { password, officerId, showname, - department: { - connect: { id: deptId }, - }, - domain: { - connect: { id: deptId }, - }, + department: deptId + ? { + connect: { id: deptId }, + } + : undefined, + domain: deptId + ? { + connect: { id: deptId }, + } + : undefined, // domainId: data.deptId, meta: { photoUrl, diff --git a/apps/server/src/models/post/utils.ts b/apps/server/src/models/post/utils.ts index 90906fd..9de3772 100644 --- a/apps/server/src/models/post/utils.ts +++ b/apps/server/src/models/post/utils.ts @@ -31,7 +31,6 @@ export async function setPostRelation(params: { visitorId: staff?.id, }, })) > 0; - const liked = (await db.visit.count({ where: { @@ -50,6 +49,24 @@ export async function setPostRelation(params: { }), }, })) > 0; + const hated = + (await db.visit.count({ + where: { + postId: data.id, + type: VisitType?.HATE, + ...(staff?.id + ? // 如果有 staff,查找对应的 visitorId + { visitorId: staff.id } + : // 如果没有 staff,查找相同 IP 且 visitorId 为 null 且 30 分钟内的记录 + { + visitorId: null, + meta: { path: ['ip'], equals: clientIp }, + updatedAt: { + gte: thirtyMinutesAgo, + }, + }), + }, + })) > 0; const readedCount = await db.visit.count({ where: { postId: data.id, @@ -61,6 +78,7 @@ export async function setPostRelation(params: { readed, readedCount, liked, + hated, commentsCount, }); // console.log('data', data); diff --git a/apps/server/src/models/visit/visit.service.ts b/apps/server/src/models/visit/visit.service.ts index 9847639..3d3a49a 100644 --- a/apps/server/src/models/visit/visit.service.ts +++ b/apps/server/src/models/visit/visit.service.ts @@ -78,6 +78,13 @@ export class VisitService extends BaseService { visitType: VisitType.LIKE, }); } + if (args.data.type === VisitType.HATE) { + EventBus.emit('updateVisitCount', { + objectType: ObjectType.POST, + id: postId, + visitType: VisitType.HATE, + }); + } } return result; } diff --git a/apps/web/src/app/auth/register.tsx b/apps/web/src/app/auth/register.tsx index 18253f2..3337d32 100644 --- a/apps/web/src/app/auth/register.tsx +++ b/apps/web/src/app/auth/register.tsx @@ -37,19 +37,20 @@ export const RegisterForm = ({ onSubmit, isLoading }: RegisterFormProps) => { layout="vertical" onFinish={onSubmit} scrollToFirstError> -
-
+
+
+ width: `100%`, + height: 210, + }} + />
-
+
{ noStyle label="部门" rules={[{ required: true, message: "请选择部门" }]}> - + + + +
-
- - - - - - - - - - - - - - - - - - - - ({ - validator(_, value) { - if ( - !value || - getFieldValue("password") === value - ) { - return Promise.resolve(); - } - return Promise.reject( - new Error("两次输入的密码不一致") - ); +
+
+ - - + ]} + name={"phoneNumber"} + label="手机号"> + + + + + + + + +
+
+ + + + + + + ({ + validator(_, value) { + if ( + !value || + getFieldValue("password") === value + ) { + return Promise.resolve(); + } + return Promise.reject( + new Error("两次输入的密码不一致") + ); + }, + }), + ]}> + + +
+ +
- -
-
-
-
- ); +
+ + +
+ + + + ); } diff --git a/apps/web/src/components/models/post/detail/PostCommentList.tsx b/apps/web/src/components/models/post/detail/PostCommentList.tsx index b731b5c..042f1f8 100644 --- a/apps/web/src/components/models/post/detail/PostCommentList.tsx +++ b/apps/web/src/components/models/post/detail/PostCommentList.tsx @@ -142,7 +142,7 @@ export default function PostCommentList() { return (
- + {items.map((comment, index) => ( ({ + ...item, + hates: (item.hates || 0) + 1, + hated: true, + })) + ); + const unHate = api.visitor.deleteMany.useMutation( + createOptimisticMutation((item) => ({ + ...item, + hates: item.hates - 1 || 0, + hated: false, + })) + ); + const addStar = api.visitor.create.useMutation( createOptimisticMutation((item) => ({ ...item, diff --git a/packages/common/prisma/schema.prisma b/packages/common/prisma/schema.prisma index bf19866..7fba477 100644 --- a/packages/common/prisma/schema.prisma +++ b/packages/common/prisma/schema.prisma @@ -75,7 +75,7 @@ model Staff { username String @unique @map("username") avatar String? @map("avatar") password String? @map("password") - + phoneNumber String? @unique @map("phone_number") @@ -206,6 +206,7 @@ model Post { visits Visit[] // 访问记录,关联 Visit 模型 views Int @default(0) likes Int @default(0) + hates Int @default(0) receivers Staff[] @relation("post_receiver") parentId String? @map("parent_id") parent Post? @relation("PostChildren", fields: [parentId], references: [id]) // 父级帖子,关联 Post 模型 diff --git a/packages/common/src/enum.ts b/packages/common/src/enum.ts index 5a1b00b..035c58a 100755 --- a/packages/common/src/enum.ts +++ b/packages/common/src/enum.ts @@ -14,6 +14,7 @@ export enum VisitType { STAR = "star", READED = "read", LIKE = "like", + HATE = "hate", } export enum StorageProvider {