diff --git a/libs/event-emitter/src/models/redmine-types.ts b/libs/event-emitter/src/models/redmine-types.ts index 113a43a..ea06f3e 100644 --- a/libs/event-emitter/src/models/redmine-types.ts +++ b/libs/event-emitter/src/models/redmine-types.ts @@ -81,7 +81,7 @@ export module RedmineTypes { export const user: User = { id: num, - login: unknownName, + login: str, firstname: unknownName, lastname: unknownName, mail: str, @@ -96,11 +96,28 @@ export module RedmineTypes { mail: string; }; - export function ExtractUser(obj: User): User & { name: string } { + export type PublicUser = { + id: number; + firstname: string; + lastname: string; + login: string; + name: string; + }; + + export function CreatePublicUserFromUser(obj: User): PublicUser { return { id: obj.id, login: obj.login, + firstname: obj.firstname, + lastname: obj.lastname, name: `${obj.firstname} ${obj.lastname}`, + }; + } + + export function CreateUser(obj: User): User { + return { + id: obj.id, + login: obj.login, firstname: obj.firstname, lastname: obj.lastname, mail: obj.mail, 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 a724eb5..c4276b4 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 @@ -55,7 +55,7 @@ export class RedmineDataLoader { this.logger.debug( `Loaded user, userNumber = ${userNumber}, login = ${user.login}, firstname = ${user.firstname}, lastname = ${user.lastname}`, ); - return RedmineTypes.ExtractUser(user); + return RedmineTypes.CreateUser(user); } private getIssueUrl(issueNumber: number): string { diff --git a/libs/event-emitter/src/users/users.controller.ts b/libs/event-emitter/src/users/users.controller.ts index 686723e..97d6588 100644 --- a/libs/event-emitter/src/users/users.controller.ts +++ b/libs/event-emitter/src/users/users.controller.ts @@ -7,14 +7,14 @@ export class UsersController { constructor(private readonly usersService: UsersService) {} @Get(':id') - async getUser(@Param('id') id: number): Promise { + async getUser(@Param('id') id: number): Promise { return await this.usersService.getUser(id); } @Get(':id/json') async getUserLikeRedmine( @Param('id') id: number, - ): Promise<{ user: RedmineTypes.User }> { + ): Promise<{ user: RedmineTypes.PublicUser }> { const user = await this.usersService.getUser(id); return { user: user, diff --git a/libs/event-emitter/src/users/users.service.ts b/libs/event-emitter/src/users/users.service.ts index 2aa6bac..0bacaab 100644 --- a/libs/event-emitter/src/users/users.service.ts +++ b/libs/event-emitter/src/users/users.service.ts @@ -1,5 +1,4 @@ import { Injectable, Logger } from '@nestjs/common'; -import { Timestamped } from '../models/timestamped'; import { Users } from '../couchdb-datasources/users'; import { RedmineDataLoader } from '../redmine-data-loader/redmine-data-loader'; import { RedmineUserCacheWriterService } from '../user-cache-writer/user-cache-writer.service'; @@ -23,15 +22,15 @@ export class UsersService { private redmineUserCacheWriterService: RedmineUserCacheWriterService, ) {} - async getUser(userId: number): Promise { + async getUser(userId: number): Promise { const userFromMemoryCache = this.getUserFromMemoryCache(userId); if (userFromMemoryCache) { - return userFromMemoryCache; + return RedmineTypes.CreatePublicUserFromUser(userFromMemoryCache); } const userFromCache = await this.getUserFromCache(userId); if (userFromCache) { this.memoryCache.set(userId, userFromCache); - return userFromCache; + return RedmineTypes.CreatePublicUserFromUser(userFromCache); } let userFromRedmine = await this.getUserFromRedmine(userId); if (userFromRedmine) { @@ -39,13 +38,17 @@ export class UsersService { userFromRedmine, ); } - return this.memoryCache.set( - userId, - userFromRedmine || RedmineTypes.Unknown.user, + return RedmineTypes.CreatePublicUserFromUser( + this.memoryCache.set( + userId, + userFromRedmine || RedmineTypes.Unknown.user, + ), ); } - async getUserFromRedmine(userId: number): Promise { + private async getUserFromRedmine( + userId: number, + ): Promise { const user = await this.redmineDataLoader.loadUser(userId); if (user) { this.logger.debug( @@ -55,9 +58,9 @@ export class UsersService { return user; } - async getUserFromCache( + private async getUserFromCache( userId: number, - ): Promise<(RedmineTypes.User & Timestamped) | null> { + ): Promise { const usersDb = await this.users.getDatasource(); try { const user = (await usersDb.get(String(userId))) as any; @@ -70,7 +73,7 @@ export class UsersService { } } - getUserFromMemoryCache(userId: number): RedmineTypes.User | null { + private getUserFromMemoryCache(userId: number): RedmineTypes.User | null { const user = this.memoryCache.get(userId); if (user) { this.logger.debug(