wuyi 2 лет назад
Родитель
Сommit
749700206d

+ 3 - 0
src/chat-role/entities/chat-role.entity.ts

@@ -20,6 +20,9 @@ export class ChatRole {
     @Column()
     chatted: number
 
+    @Column()
+    likeNumber: number
+
     @Column()
     dynamicNumber: number
 

+ 5 - 3
src/comment/comment.controller.ts

@@ -6,7 +6,8 @@ import {
     Delete,
     Param,
     HttpStatus,
-    BadRequestException
+    BadRequestException,
+    Req
 } from '@nestjs/common'
 import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'
 import { CommentService } from './comment.service'
@@ -23,8 +24,9 @@ export class CommentController {
     constructor(private readonly commentService: CommentService) { }
 
     @Post()
-    public async list(@Body() page: PageRequest<Comment>) {
-        return await this.commentService.findAll(page)
+    public async list(@Req() req, @Body() page: PageRequest<Comment>) {
+        console.log(req.user.userId)
+        return await this.commentService.findAll(page, req.user.userId)
     }
 
     @Post('/childComments')

+ 2 - 1
src/comment/comment.module.ts

@@ -4,9 +4,10 @@ import { Comment } from './entities/comment.entity'
 import { CommentService } from './comment.service'
 import { CommentController } from './comment.controller'
 import { LikesModule } from 'src/likes/likes.module'
+import { Likes } from 'src/likes/entities/likes.entity'
 
 @Module({
-    imports: [TypeOrmModule.forFeature([Comment]), LikesModule],
+    imports: [TypeOrmModule.forFeature([Comment, Likes]), LikesModule],
     controllers: [CommentController],
     providers: [CommentService],
     exports: [CommentService]

+ 25 - 1
src/comment/comment.service.ts

@@ -8,6 +8,8 @@ import { PageRequest } from '../common/dto/page-request'
 import { Comment } from './entities/comment.entity'
 import { CommentDto } from './dto/comment.dto'
 import { LikesService } from 'src/likes/likes.service'
+import { Likes } from 'src/likes/entities/likes.entity'
+import { id, tr } from 'date-fns/locale'
 
 @Injectable()
 export class CommentService {
@@ -15,11 +17,13 @@ export class CommentService {
     constructor(
         @InjectRepository(Comment)
         private readonly commentRepository: Repository<Comment>,
+        @InjectRepository(Likes)
+        private readonly likesRepository: Repository<Likes>,
         private readonly likesService: LikesService
     ) { }
 
 
-    async findAll(req: PageRequest<Comment>): Promise<Pagination<Comment>> {
+    async findAll(req: PageRequest<Comment>, userId: number): Promise<Pagination<Comment>> {
         const query = await this.commentRepository.createQueryBuilder()
             .where('comment.isDel = false')
             .andWhere('rootCommentId is null')
@@ -70,6 +74,24 @@ export class CommentService {
             .getMany();
 
         childList.forEach(comment => {
+            ids.push(comment.id)
+        })
+
+        const likes = await this.likesRepository.createQueryBuilder('likes')
+            .select('likes.targetId')
+            .where({
+                userId: +userId,
+                targetId: In(ids),
+                type: 2,
+                isValid: true
+            })
+            .getMany()
+        const targetIds: number[] = likes.map((like) => like.targetId);
+
+        childList.forEach(comment => {
+            if (targetIds.includes(comment.id)) {
+                comment.isLiked = true
+            }
             if (Boolean(comment.rootCommentId)) {
                 const root = rootMap.get(comment.rootCommentId)
                 if (root.hasOwnProperty('childList')) {
@@ -84,6 +106,8 @@ export class CommentService {
         })
 
         const newItems = Array.from(rootMap.values());
+        newItems.forEach(comment => { if (targetIds.includes(comment.id)) { comment.isLiked = true } })
+
         const result: Pagination<Comment> = {
             items: newItems,
             meta

+ 3 - 0
src/comment/entities/comment.entity.ts

@@ -46,4 +46,7 @@ export class Comment {
     @Exclude()
     childList?: Comment[]
 
+    @Exclude()
+    isLiked: boolean = false
+
 }

+ 3 - 0
src/moments/entities/moments.entity.ts

@@ -25,4 +25,7 @@ export class Moments {
     @Exclude()
     chatRole: ChatRole
 
+    @Exclude()
+    isLiked: boolean = false
+
 }

+ 3 - 3
src/moments/moments.controller.ts

@@ -1,4 +1,4 @@
-import { BadRequestException, Body, Controller, Get, HttpStatus, Param, Post } from "@nestjs/common";
+import { BadRequestException, Body, Controller, Get, HttpStatus, Param, Post, Req } from "@nestjs/common";
 import { ApiBearerAuth, ApiTags } from "@nestjs/swagger";
 import { MomentsService } from "./moments.service";
 import { PageRequest } from "../common/dto/page-request";
@@ -13,8 +13,8 @@ export class MomentsController {
     constructor(private readonly momentsService: MomentsService) { }
 
     @Post()
-    public async page(@Body() page: PageRequest<Moments>) {
-        return await this.momentsService.findAll(page)
+    public async page(@Body() page: PageRequest<Moments>, @Req() req) {
+        return await this.momentsService.findAll(page, req.user.userId)
     }
 
     @Get('/get/:id')

+ 3 - 1
src/moments/moments.module.ts

@@ -5,9 +5,11 @@ import { MomentsController } from './moments.controller'
 import { MomentsService } from './moments.service'
 import { ChatRoleModule } from '../chat-role/chat-role.module'
 import { LikesModule } from 'src/likes/likes.module'
+import { ChatRole } from 'src/chat-role/entities/chat-role.entity'
+import { Likes } from 'src/likes/entities/likes.entity'
 
 @Module({
-    imports: [TypeOrmModule.forFeature([Moments]), ChatRoleModule, LikesModule],
+    imports: [TypeOrmModule.forFeature([Moments, ChatRole, Likes]), ChatRoleModule, LikesModule],
     controllers: [MomentsController],
     providers: [MomentsService],
     exports: [MomentsService]

+ 28 - 3
src/moments/moments.service.ts

@@ -7,7 +7,7 @@ import {
     InternalServerErrorException,
     UnauthorizedException
 } from '@nestjs/common'
-import { Repository, UpdateResult } from 'typeorm'
+import { In, Repository, UpdateResult } from 'typeorm'
 import { InjectRepository } from '@nestjs/typeorm'
 import { Moments } from './entities/moments.entity'
 
@@ -15,17 +15,23 @@ import { paginate, Pagination } from 'nestjs-typeorm-paginate'
 import { PageRequest } from '../common/dto/page-request'
 import { ChatRoleService } from '../chat-role/chat-role.service'
 import { LikesService } from 'src/likes/likes.service'
+import { ChatRole } from 'src/chat-role/entities/chat-role.entity'
+import { Likes } from 'src/likes/entities/likes.entity'
 
 @Injectable()
 export class MomentsService {
     constructor(
         @InjectRepository(Moments)
         private readonly momentsRepository: Repository<Moments>,
+        @InjectRepository(ChatRole)
+        private readonly chatRoleRepository: Repository<ChatRole>,
+        @InjectRepository(Likes)
+        private readonly likesRepository: Repository<Likes>,
         private readonly chatRoleService: ChatRoleService,
         private readonly likesService: LikesService
     ) { }
 
-    async findAll(req: PageRequest<Moments>): Promise<Pagination<Moments>> {
+    async findAll(req: PageRequest<Moments>, userId: number): Promise<Pagination<Moments>> {
         const page = await paginate<Moments>(this.momentsRepository, req.page, req.search)
         const ids = page.items.reduce((ids: number[], val: Moments) => {
             if (!ids.includes(val.userId)) {
@@ -34,9 +40,24 @@ export class MomentsService {
             return ids;
         }, []);
 
+        const momnetsIds: number[] = page.items.map((moments) => moments.id)
+        const likes = await this.likesRepository.createQueryBuilder('likes')
+            .select('likes.targetId')
+            .where({
+                userId: +userId,
+                targetId: In(momnetsIds),
+                type: 1,
+                isValid: true
+            })
+            .getMany()
+        const targetIds: number[] = likes.map((like) => like.targetId);
+
         const map = await this.chatRoleService.findMapByIds(ids);
         page.items.forEach(c => {
             c.chatRole = map.get(c.userId)
+            if (targetIds.includes(c.id)) {
+                c.isLiked = true
+            }
         })
 
         return page
@@ -52,12 +73,16 @@ export class MomentsService {
     public async like(id: number, userId: number): Promise<void> {
         const moments = await this.momentsRepository.findOneBy({ id: +id })
         if (moments) {
-            const likes = await this.likesService.like(id, userId, 2)
+            const likes = await this.likesService.like(id, userId, 1)
+            const chatRole = await this.chatRoleRepository.findOneBy({ id: +moments.userId })
             if (likes.isValid) {
                 moments.momentsLikeCount += 1
+                chatRole.likeNumber += 1
             } else {
                 moments.momentsLikeCount -= 1
+                chatRole.likeNumber -= 1
             }
+            await this.chatRoleRepository.save(chatRole)
             await this.momentsRepository.save(moments)
         }
     }