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

khu-khlug / sight-backend / 14247600948

03 Apr 2025 04:05PM UTC coverage: 50.988% (-1.0%) from 51.939%
14247600948

push

github

web-flow
feat: 디스코드 메신저 구현 (#118)

823 of 2618 branches covered (31.44%)

Branch coverage included in aggregate %.

29 of 64 new or added lines in 13 files covered. (45.31%)

45 existing lines in 10 files now uncovered.

2272 of 3452 relevant lines covered (65.82%)

12.83 hits per line

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

78.57
/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
  IMessenger,
1✔
15
  MessengerToken,
1✔
16
} from '@khlug/app/domain/adapter/IMessenger';
1✔
17
import {
1✔
18
  GroupBookmarkRepository,
1✔
19
  IGroupBookmarkRepository,
1✔
20
} from '@khlug/app/domain/group/IGroupBookmarkRepository';
1✔
21
import {
22
  GroupRepository,
15!
UNCOV
23
  IGroupRepository,
×
24
} from '@khlug/app/domain/group/IGroupRepository';
25

26
import { Message } from '@khlug/constant/error';
27
import { Template } from '@khlug/constant/template';
28

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

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

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

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

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

65
    this.slackSender.send({
66
      targetUserId: userId,
67
      message: MessageBuilder.build(
68
        Template.REMOVE_GROUP_BOOKMARK.notification,
69
        { groupId, groupTitle: group.title },
70
      ),
71
    });
72
  }
5✔
73
}
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