Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | 5x 5x 5x 5x 5x 5x 5x 5x 18x 18x 4x 4x 1x 3x 3x 2x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 3x 3x 3x 1x 2x 1x 1x 1x | import { ConflictException, Injectable, NotFoundException } from '@nestjs/common'; import { ERROR } from 'src/commons/constants/error'; import { UuidResponseDto } from 'src/commons/dtos/uuid-response.dto'; import { isEmpty } from 'src/commons/util/is/is-empty'; import { generateUUID } from 'src/commons/util/uuid'; import { CommunityQueryRepository } from 'src/community/community.query.repository'; import { CommunityEntity } from 'src/entities/community.entity'; import { ReactionEntity } from 'src/entities/reaction.entity'; import { NotificationDetailDto } from 'src/notification/dto/notification-detail.dto'; import { ApiReactionPostCommunityResponseDto } from 'src/reaction/dto/api-reaction-post-community-response.dto'; import { ReactionQueryRepository } from 'src/reaction/reaction.query.repository'; import { UserDto } from 'src/user/dto/user.dto'; @Injectable() export class ReactionService { constructor( private readonly communityQueryRepository: CommunityQueryRepository, private readonly reactionQueryRepository: ReactionQueryRepository, ) {} async reactionToCommunity( user: UserDto, uuid: string, ): Promise<ApiReactionPostCommunityResponseDto> { const community = await this.communityQueryRepository.findOne(uuid); if (isEmpty(community)) { throw new NotFoundException(ERROR.NOT_EXIST_DATA); } const reaction = await this.reactionQueryRepository.findOne(uuid, user); if (reaction) { if (reaction.like === 1) { throw new ConflictException(ERROR.DUPLICATION); } if (reaction.like === 0) { await this.reactionQueryRepository.updateCourseLike(reaction); return { data: { uuid }, notification: null }; } } const newReaction = new ReactionEntity(); newReaction.uuid = generateUUID(); newReaction.target_uuid = uuid; newReaction.user_uuid = user.uuid; newReaction.user_name = user.nickname; newReaction.like = 1; await this.reactionQueryRepository.courseLike(newReaction); const notification: NotificationDetailDto = { uuid: generateUUID(), user_uuid: user.uuid, target_type: 'reaction', target_uuid: community.uuid, target_user_uuid: community.user_uuid, content: `회원님의 게시물을 ${user.nickname}님이 좋아합니다.`, }; return { data: { uuid }, notification }; } async reactionDeleteToCommunity(user: UserDto, uuid: string): Promise<UuidResponseDto> { const community: CommunityEntity = await this.communityQueryRepository.findOne(uuid); const reaction: ReactionEntity = await this.reactionQueryRepository.findOne(uuid, user); if (isEmpty(reaction) || isEmpty(community)) { throw new NotFoundException(ERROR.NOT_EXIST_DATA); } if (reaction.like === 0) { throw new ConflictException(ERROR.DUPLICATION); } await this.reactionQueryRepository.updateCourseLikeDelete(reaction); return { uuid }; } } |