diff --git a/libs/event-emitter/src/redmine-data-loader/redmine-data-loader.ts b/libs/event-emitter/src/redmine-data-loader/redmine-data-loader.ts index 4cbb779..5805dd6 100644 --- a/libs/event-emitter/src/redmine-data-loader/redmine-data-loader.ts +++ b/libs/event-emitter/src/redmine-data-loader/redmine-data-loader.ts @@ -23,7 +23,7 @@ export class RedmineDataLoader { const resp = await axios.get(url); if (!resp || !resp.data || !resp.data.issue) { this.logger.error( - `Failed to load data for from redmine, issueNumber = ${issueNumber}`, + `Failed to load issue from redmine, issueNumber = ${issueNumber}`, ); return null; } @@ -33,10 +33,35 @@ export class RedmineDataLoader { return resp.data.issue; } + async loadUsers(users: number[]): Promise<(RedmineTypes.User | null)[]> { + const promises = users.map((user) => this.loadUser(user)); + return Promise.all(promises); + } + + async loadUser(userNumber: number): Promise { + const url = this.getUserUrl(userNumber); + const resp = await axios.get(url); + if (!resp || !resp.data?.user) { + this.logger.error( + `Failed to load user from redmine, userNumber = ${userNumber}`, + ); + return null; + } + const user: RedmineTypes.User = resp.data.user; + this.logger.debug( + `Loaded user, userNumber = ${userNumber}, login = ${user.login}, firstname = ${user.firstname}, lastname = ${user.lastname}`, + ); + return user; + } + private getIssueUrl(issueNumber: number): string { if (typeof this.urlPrefix !== 'string' || this.urlPrefix.length === 0) { throw 'REDMINE_URL_PREFIX is undefined'; } return `${this.urlPrefix}/issues/${issueNumber}.json?include=children,journals,relations`; } + + private getUserUrl(userNumber: number): string { + return `${this.urlPrefix}/users/${userNumber}.json`; + } } diff --git a/libs/redmine-types/index.d.ts b/libs/redmine-types/index.d.ts index 888bc4e..a904d28 100644 --- a/libs/redmine-types/index.d.ts +++ b/libs/redmine-types/index.d.ts @@ -91,6 +91,7 @@ export module RedmineTypes { export type User = { id: number; + login: string; firstname: string; lastname: string; mail: string;