Skip to content

Commit 6be9b31

Browse files
authored
Merge pull request #103 from topcoder-platform/develop
[PROD RELEASE] - Updates & Fixes
2 parents 8d2bfcd + ab77cde commit 6be9b31

1 file changed

Lines changed: 15 additions & 64 deletions

File tree

src/reports/member/member-search.service.ts

Lines changed: 15 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Injectable, NotFoundException, OnModuleInit } from "@nestjs/common";
1+
import { Injectable, NotFoundException } from "@nestjs/common";
22
import { alpha3ToCountryName } from "../../common/country.util";
33
import { DbService } from "../../db/db.service";
44
import { MemberSearchBodyDto } from "./dto/member-search.dto";
@@ -42,35 +42,9 @@ function formatLocation(location: string): string {
4242
}
4343

4444
@Injectable()
45-
export class MemberSearchService implements OnModuleInit {
46-
private winEventTypeIds: string[] = [];
47-
private engagementSourceTypeId: string = "";
48-
45+
export class MemberSearchService {
4946
constructor(private readonly db: DbService) {}
5047

51-
async onModuleInit(): Promise<void> {
52-
const [winRows, engRows] = await Promise.all([
53-
this.db.query<{ id: string }>(
54-
`SELECT id::text FROM skills.skill_event_type
55-
WHERE name = ANY($1::text[])`,
56-
[
57-
[
58-
"challenge_win",
59-
"challenge_2nd_place",
60-
"challenge_3rd_place",
61-
"gig_completion",
62-
],
63-
],
64-
),
65-
this.db.query<{ id: string }>(
66-
`SELECT id::text FROM skills.source_type WHERE name = 'engagement'`,
67-
[],
68-
),
69-
]);
70-
this.winEventTypeIds = winRows.map((r) => r.id);
71-
this.engagementSourceTypeId = engRows[0]?.id ?? "";
72-
}
73-
7448
async search(dto: MemberSearchBodyDto): Promise<MemberSearchResponseDto> {
7549
const {
7650
skills,
@@ -125,49 +99,23 @@ export class MemberSearchService implements OnModuleInit {
12599
const pMinWins = p(minWins);
126100
const pSearchType = p(skillSearchType);
127101
const pNumSkills = p(deduped.length);
128-
const pWinTypeIds = p(this.winEventTypeIds);
129-
const pEngSourceId = p(this.engagementSourceTypeId);
130102

131103
ctes.push(`requested_skills AS (
132104
SELECT rs.skill_id, rs.min_wins
133105
FROM unnest(${pSkillIds}::uuid[], ${pMinWins}::integer[])
134106
AS rs(skill_id, min_wins)
135107
),
136-
skill_event_stats AS (
137-
SELECT
138-
se.user_id,
139-
se.skill_id,
140-
COUNT(*) FILTER (
141-
WHERE se.skill_event_type_id = ANY(${pWinTypeIds}::uuid[])
142-
OR se.source_type_id = ${pEngSourceId}::uuid
143-
) AS wins,
144-
COUNT(*) AS submitted
145-
FROM skills.skill_event se
146-
WHERE se.skill_id = ANY(${pSkillIds}::uuid[])
147-
AND se.user_id IN (SELECT user_id FROM active_members)
148-
GROUP BY se.user_id, se.skill_id
149-
),
150-
deduped_user_skills AS (
151-
SELECT DISTINCT
152-
us.user_id,
153-
us.skill_id
154-
FROM skills.user_skill us
155-
WHERE us.skill_id = ANY(${pSkillIds}::uuid[])
156-
AND us.user_id IN (SELECT user_id FROM active_members)
157-
),
158108
user_skill_data AS (
159109
SELECT
160-
us.user_id,
161-
us.skill_id,
162-
sk.name AS skill_name,
163-
COALESCE(ses.wins, 0) AS wins,
164-
COALESCE(ses.submitted, 0) AS submitted
165-
FROM deduped_user_skills us
166-
JOIN requested_skills rs ON rs.skill_id = us.skill_id
167-
JOIN skills.skill sk ON sk.id = us.skill_id AND sk.deleted_at IS NULL
168-
LEFT JOIN skill_event_stats ses
169-
ON ses.user_id = us.user_id
170-
AND ses.skill_id = us.skill_id
110+
usws.user_id,
111+
usws.skill_id,
112+
sk.name AS skill_name,
113+
usws.wins,
114+
usws.submitted
115+
FROM skills.user_skill_win_summary usws
116+
JOIN requested_skills rs ON rs.skill_id = usws.skill_id
117+
JOIN skills.skill sk ON sk.id = usws.skill_id AND sk.deleted_at IS NULL
118+
WHERE usws.user_id IN (SELECT user_id FROM active_members)
171119
),
172120
qualifying_users AS (
173121
SELECT usd.user_id
@@ -289,10 +237,13 @@ member_address AS (
289237
}
290238

291239
const whereClause = where.join(" AND ");
240+
const skillJoin = deduped.length > 0
241+
? `INNER JOIN user_match_data umd ON umd.user_id = m."userId"`
242+
: ``;
292243
ctes.push(`filtered_members AS (
293244
SELECT m."userId" AS user_id
294245
FROM members.member m
295-
INNER JOIN user_match_data umd ON umd.user_id = m."userId"
246+
${skillJoin}
296247
WHERE ${whereClause}
297248
)`);
298249

0 commit comments

Comments
 (0)