diff --git a/src/api/public/me/me.controller.ts b/src/api/public/me/me.controller.ts index 645fcaa0b..92eb52ba7 100644 --- a/src/api/public/me/me.controller.ts +++ b/src/api/public/me/me.controller.ts @@ -29,8 +29,10 @@ export class MeController { } @Get() - getMe(): UserInfoDto { - return this.usersService.getUserInfo(); + async getMe(): Promise { + return this.usersService.toUserDto( + await this.usersService.getUserByUsername('hardcoded'), + ); } @Get('history') diff --git a/src/users/user.entity.ts b/src/users/user.entity.ts index 939ffd11c..9b20e6444 100644 --- a/src/users/user.entity.ts +++ b/src/users/user.entity.ts @@ -48,4 +48,20 @@ export class User { identity => identity.user, ) identities: Identity[]; + + // eslint-disable-next-line @typescript-eslint/no-empty-function + private constructor() {} + + public static create( + userName: string, + displayName: string, + ): Pick< + User, + 'userName' | 'displayName' | 'ownedNotes' | 'authToken' | 'identities' + > { + const newUser = new User(); + newUser.userName = userName; + newUser.displayName = displayName; + return newUser; + } } diff --git a/src/users/users.service.ts b/src/users/users.service.ts index cc4fa1880..193ca397d 100644 --- a/src/users/users.service.ts +++ b/src/users/users.service.ts @@ -1,26 +1,44 @@ import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { NotInDBError } from '../errors/errors'; import { ConsoleLoggerService } from '../logger/console-logger.service'; import { UserInfoDto } from './user-info.dto'; import { User } from './user.entity'; @Injectable() export class UsersService { - constructor(private readonly logger: ConsoleLoggerService) { + constructor( + private readonly logger: ConsoleLoggerService, + @InjectRepository(User) private userRepository: Repository, + ) { this.logger.setContext(UsersService.name); } - getUserInfo(): UserInfoDto { - //TODO: Use the database - this.logger.warn('Using hardcoded data!'); - return { - displayName: 'foo', - userName: 'fooUser', - email: 'foo@example.com', - photo: '', - }; + createUser(userName: string, displayName: string): Promise { + const user = User.create(userName, displayName); + return this.userRepository.save(user); } - getPhotoUrl(user: User) { + async deleteUser(userName: string) { + //TOOD: Handle owned notes and edits + const user = await this.userRepository.findOne({ + where: { userName: userName }, + }); + await this.userRepository.delete(user); + } + + async getUserByUsername(userName: string): Promise { + const user = this.userRepository.findOne({ + where: { userName: userName }, + }); + if (user === undefined) { + throw new NotInDBError(`User with username '${userName}' not found`); + } + return user; + } + + getPhotoUrl(user: User): string { if (user.photo) { return user.photo; } else {