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 | import { z } from 'zod'; import { assert } from '@amalia/ext/typescript'; import { sonarConfiguration, users, type UsersEmails } from '../../configurations'; const Validator = z.object({ facets: z.array( z.object({ property: z.literal('assignees'), values: z.array( z.object({ val: z.string(), count: z.number(), }), ), }), ), }); export class GetSonarIssuesCountPerAssigneeUseCase { public async execute(): Promise<Record<UsersEmails, number>> { const response = await fetch(`${sonarConfiguration.url}/api/issues/search?statuses=OPEN&facets=assignees`, { headers: { Authorization: `Bearer ${sonarConfiguration.token}`, }, }); const data = await response.json(); const dataParsed = await Validator.parseAsync(data); const assigneesFacet = dataParsed.facets.at(0); assert(assigneesFacet, 'No assignees facet found'); return users.reduce( (acc, user) => { const issuesAssigned = assigneesFacet.values.find(({ val: sonarId }) => sonarId === user.sonarId)?.count; return { ...acc, [user.email]: issuesAssigned ?? 0, }; }, {} as Record<UsersEmails, number>, ); } } |