diff --git a/backend/src/modules/user/user.controller.ts b/backend/src/modules/user/user.controller.ts new file mode 100644 index 0000000..8305e4a --- /dev/null +++ b/backend/src/modules/user/user.controller.ts @@ -0,0 +1,18 @@ +import { Body, Controller, Post } from '@nestjs/common'; +import { ApiOperation, ApiTags } from '@nestjs/swagger'; +import { IGetUser } from './user.dto'; +import { UserService } from './user.service'; + +@ApiTags('User') +@Controller('user') +export class UserController { + constructor(private adminService: UserService) {} + + @ApiOperation({ + description: 'Create or get user from db', + }) + @Post('get') + async getUser(@Body() data: IGetUser) { + return await this.adminService.getUser(data); + } +} diff --git a/backend/src/modules/user/user.dto.ts b/backend/src/modules/user/user.dto.ts new file mode 100644 index 0000000..b6a44b9 --- /dev/null +++ b/backend/src/modules/user/user.dto.ts @@ -0,0 +1,6 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class IGetUser { + @ApiProperty({ description: 'telegram id', example: '123456' }) readonly id: string; + @ApiProperty({ description: 'telegram username', example: 'durov' }) readonly username?: string; +} diff --git a/backend/src/modules/user/user.module.ts b/backend/src/modules/user/user.module.ts new file mode 100644 index 0000000..45f7945 --- /dev/null +++ b/backend/src/modules/user/user.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common'; +import { LibsModule } from 'libs/libs.module'; +import { UserController } from './user.controller'; +import { UserService } from './user.service'; + +@Module({ + imports: [LibsModule], + controllers: [UserController], + providers: [UserService], +}) +export class UserModule {} diff --git a/backend/src/modules/user/user.service.ts b/backend/src/modules/user/user.service.ts new file mode 100644 index 0000000..c334eb9 --- /dev/null +++ b/backend/src/modules/user/user.service.ts @@ -0,0 +1,27 @@ +import { Injectable, Logger } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { User } from 'libs/database/user.entity'; +import { Repository } from 'typeorm'; +import { IGetUser } from './user.dto'; + +@Injectable() +export class UserService { + private readonly logger: Logger = new Logger(UserService.name); + constructor(@InjectRepository(User) private userRepository: Repository) {} + + async getUser(data: IGetUser) { + try { + this.logger.debug(`[admin.getUser] data: ${JSON.stringify(data)}`); + let user = await this.userRepository.findOne({ + where: { id: data.id }, + }); + if (!user) { + user = await this.userRepository.save({ id: data.id, user_name: data.username }); + this.logger.log(`User ${data.id} created`); + } + return user; + } catch (error) { + this.logger.log(`[getUser] ${JSON.stringify({ error })}`); + } + } +}