• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

khu-khlug / sight-backend / 13616929463

02 Mar 2025 03:40PM UTC coverage: 57.19% (-1.0%) from 58.222%
13616929463

push

github

web-flow
chore: yarn에서 npm으로 롤백 (#105)

637 of 1702 branches covered (37.43%)

Branch coverage included in aggregate %.

1797 of 2554 relevant lines covered (70.36%)

15.16 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

78.82
/src/app/application/group/command/removeBookmark/RemoveBookmarkCommandHandler.ts
1
import {
2
  Inject,
1✔
3
  NotFoundException,
4
  UnprocessableEntityException,
5
} from '@nestjs/common';
1✔
6
import { CommandHandler, ICommandHandler } from '@nestjs/cqrs';
7

8
import { MessageBuilder } from '@khlug/core/message/MessageBuilder';
10✔
9
import { Transactional } from '@khlug/core/persistence/transaction/Transactional';
10

11
import { RemoveBookmarkCommand } from '@khlug/app/application/group/command/removeBookmark/RemoveBookmarkCommand';
1✔
12

1✔
13
import {
1✔
14
  ISlackSender,
1✔
15
  SlackSender,
1✔
16
} from '@khlug/app/domain/adapter/ISlackSender';
1✔
17
import {
1✔
18
  GroupBookmarkRepository,
1✔
19
  IGroupBookmarkRepository,
1✔
20
} from '@khlug/app/domain/group/IGroupBookmarkRepository';
1✔
21
import {
1✔
22
  GroupRepository,
23
  IGroupRepository,
15!
24
} from '@khlug/app/domain/group/IGroupRepository';
×
25
import { SlackMessageCategory } from '@khlug/app/domain/message/model/constant';
26

27
import { Message } from '@khlug/constant/message';
28
import { Template } from '@khlug/constant/template';
29

30
@CommandHandler(RemoveBookmarkCommand)
31
export class RemoveBookmarkCommandHandler
15✔
32
  implements ICommandHandler<RemoveBookmarkCommand>
33
{
15✔
34
  constructor(
35
    @Inject(GroupRepository)
36
    private readonly groupRepository: IGroupRepository,
2!
37
    @Inject(GroupBookmarkRepository)
2!
38
    private readonly groupBookmarkRepository: IGroupBookmarkRepository,
×
39
    @Inject(SlackSender)
2✔
40
    private readonly slackSender: ISlackSender,
41
  ) {}
42

5!
43
  @Transactional()
44
  async execute(command: RemoveBookmarkCommand): Promise<void> {
45
    const { groupId, userId } = command;
3✔
46

3✔
47
    const group = await this.groupRepository.findById(groupId);
48
    if (!group) {
49
      throw new NotFoundException(Message.GROUP_NOT_FOUND);
50
    }
51

5✔
52
    if (group.isCustomerServiceGroup() || group.isPracticeGroup()) {
5✔
53
      throw new UnprocessableEntityException(Message.DEFAULT_BOOKMARKED_GROUP);
5✔
54
    }
1✔
55

56
    const prevBookmark =
4✔
57
      await this.groupBookmarkRepository.findByGroupIdAndUserId(
2✔
58
        groupId,
59
        userId,
2✔
60
      );
2✔
61
    if (!prevBookmark) {
1✔
62
      return;
63
    }
1✔
64
    await this.groupBookmarkRepository.remove(prevBookmark);
1✔
65

66
    this.slackSender.send({
67
      category: SlackMessageCategory.GROUP_ACTIVITY_FOR_ME,
68
      targetUserId: userId,
69
      message: MessageBuilder.build(
70
        Template.REMOVE_GROUP_BOOKMARK.notification,
71
        { groupId, groupTitle: group.title },
72
      ),
73
    });
74
  }
5✔
75
}
5✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc