This commit is contained in:
Errormacr
2023-11-18 19:04:09 +03:00
21 changed files with 232 additions and 61 deletions

View File

@@ -1,22 +0,0 @@
import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { AppService } from './app.service';
describe('AppController', () => {
let appController: AppController;
beforeEach(async () => {
const app: TestingModule = await Test.createTestingModule({
controllers: [AppController],
providers: [AppService],
}).compile();
appController = app.get<AppController>(AppController);
});
describe('root', () => {
it('should return "Hello World!"', () => {
expect(appController.getHello()).toBe('Hello World!');
});
});
});

View File

@@ -1,12 +0,0 @@
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}

View File

@@ -1,10 +1,13 @@
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypeOrmModule, TypeOrmModuleOptions } from '@nestjs/typeorm';
import { config } from 'config';
import { LibsModule } from 'libs/libs.module';
import { AppInitService } from './modules/initialization/app.init.service';
import { UserModule } from './modules/user/user.module';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
imports: [LibsModule, UserModule, TypeOrmModule.forRoot(<TypeOrmModuleOptions>config.database)],
controllers: [],
providers: [AppInitService],
})
export class AppModule {}

View File

@@ -1,8 +0,0 @@
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}

View File

@@ -1,8 +1,14 @@
import { Logger } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { config } from 'config';
import { AppModule } from './app.module';
import { swagger } from './swagger';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
const app = await NestFactory.create(AppModule, {
logger: ['log', 'debug', 'error', 'warn', 'verbose'],
});
swagger(app);
await app.listen(config.server.port, () => Logger.log(`Server started on port ${config.server.port}`));
}
bootstrap();

View File

@@ -0,0 +1,11 @@
import { Injectable, OnModuleInit } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from 'libs/database/user.entity';
import { Repository } from 'typeorm';
@Injectable()
export class AppInitService implements OnModuleInit {
constructor(@InjectRepository(User) private userRepository: Repository<User>) {}
async onModuleInit() {}
}

View File

@@ -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);
}
}

View File

@@ -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;
}

View File

@@ -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 {}

View File

@@ -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<User>) {}
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 })}`);
}
}
}

9
backend/src/swagger.ts Normal file
View File

@@ -0,0 +1,9 @@
import { INestApplication } from '@nestjs/common';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
export function swagger(app: INestApplication): INestApplication {
const config = new DocumentBuilder().setTitle('Neuro website').setDescription('Some description').setVersion('0.1').build();
const document = SwaggerModule.createDocument(app, config);
SwaggerModule.setup('api', app, document);
return app;
}