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

khu-khlug / sight-backend / 13068329668

31 Jan 2025 07:29AM UTC coverage: 57.673% (-0.2%) from 57.863%
13068329668

push

github

web-flow
feat: 유저 목록 응답에 태그 추가 (#95)

522 of 1440 branches covered (36.25%)

Branch coverage included in aggregate %.

0 of 10 new or added lines in 1 file covered. (0.0%)

2 existing lines in 1 file now uncovered.

1406 of 1903 relevant lines covered (73.88%)

6.96 hits per line

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

0.0
/src/app/application/user/query/listUser/ListUserQueryHandler.ts
1
import { EntityRepository } from '@mikro-orm/mysql';
2
import { InjectRepository } from '@mikro-orm/nestjs';
×
3
import { Injectable } from '@nestjs/common';
×
4
import { IQueryHandler, QueryHandler } from '@nestjs/cqrs';
×
5

×
6
import { ListUserQuery } from '@khlug/app/application/user/query/listUser/ListUserQuery';
7
import { ListUserQueryResult } from '@khlug/app/application/user/query/listUser/ListUserQueryResult';
NEW
8
import { UserWithTagListView } from '@khlug/app/application/user/query/view/UserListView';
×
9

10
import { User } from '@khlug/app/domain/user/model/User';
11

×
12
@Injectable()
×
13
@QueryHandler(ListUserQuery)
14
export class ListUserQueryHandler
15
  implements IQueryHandler<ListUserQuery, ListUserQueryResult>
16
{
17
  constructor(
18
    @InjectRepository(User)
19
    private readonly userRepository: EntityRepository<User>,
20
  ) {}
21

22
  async execute(query: ListUserQuery): Promise<ListUserQueryResult> {
23
    const { email, phone, name, number, college, grade, state, limit, offset } =
24
      query;
25

×
26
    const qb = this.userRepository.createQueryBuilder('user');
27

28
    if (email) {
×
29
      qb.andWhere('email LIKE ?', [`%${email}%`]);
×
30
    }
×
31

×
32
    if (phone) {
33
      qb.andWhere('phone LIKE ?', [`%${phone}%`]);
34
    }
35

×
36
    if (name) {
×
37
      qb.andWhere('realname LIKE ?', [`%${name}%`]);
38
    }
39

40
    if (number) {
×
41
      qb.andWhere('number LIKE ?', [`%${number}%`]);
×
42
    }
43

44
    if (college) {
45
      qb.andWhere('college LIKE ?', [`%${college}%`]);
×
46
    }
×
47

48
    if (grade) {
49
      qb.andWhere('grade = ?', [grade]);
50
    }
×
51

×
52
    if (state) {
53
      qb.andWhere('state = ?', [state]);
54
    }
55

×
56
    const [users, count] = await qb
×
57
      .limit(limit)
58
      .offset(offset)
59
      .orderBy({ id: 'ASC' })
60
      .getResultAndCount();
×
61

×
62
    const listView: UserWithTagListView = {
63
      count,
64
      users: users.map((user) => {
NEW
65
        const normalTags: string[] = [];
×
66
        const redTags: string[] = [];
67

NEW
68
        if (user.needAuth()) {
×
69
          redTags.push('미인증');
70
        }
NEW
71

×
NEW
72
        if (user.point < 0) {
×
NEW
73
          redTags.push('-exp');
×
NEW
74
        }
×
75

NEW
76
        return {
×
NEW
77
          id: user.id,
×
78
          name: user.name,
NEW
79
          profile: {
×
80
            name: user.profile.name,
81
            college: user.profile.college,
82
            grade: user.profile.grade,
83
            number: user.profile.number,
84
            email: user.profile.email,
85
            phone: user.profile.phone,
86
            homepage: user.profile.homepage,
87
            language: user.profile.language,
88
            prefer: user.profile.prefer,
89
          },
90
          admission: user.admission,
91
          state: user.state,
92
          point: user.point,
93
          active: user.active,
94
          manager: user.manager,
95
          slack: user.slack,
96
          rememberToken: user.rememberToken,
97
          khuisAuthAt: user.khuisAuthAt,
98
          returnAt: user.returnAt,
99
          returnReason: user.returnReason,
100
          lastLoginAt: user.lastLoginAt,
101
          lastEnterAt: user.lastEnterAt,
102
          createdAt: user.createdAt,
103
          updatedAt: user.updatedAt,
104
          normalTags,
105
          redTags,
106
        };
107
      }),
108
    };
109
    return new ListUserQueryResult(listView);
110
  }
111
}
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