From 74c77011ea169e43d35d01a595b3ccc642d722e0 Mon Sep 17 00:00:00 2001 From: luchang <835498386@qq.com> Date: Wed, 22 May 2024 19:13:08 +0800 Subject: [PATCH] feat: curd --- config/oss.ts | 18 ++-- package.json | 1 + pnpm-lock.yaml | 3 + src/app.module.ts | 14 ++- src/banner/banner.controller.ts | 8 +- src/banner/banner.module.ts | 3 + src/banner/banner.service.ts | 30 +++--- src/banner/entities/banner.entity.ts | 16 +++- src/http-exception/http-exception.filter.ts | 22 +++++ src/main.ts | 7 ++ src/oss/oss.controller.ts | 39 +++----- src/oss/oss.module.ts | 3 +- src/oss/oss.service.ts | 100 ++++++-------------- src/sys-user/dto/create-sys-user.dto.ts | 1 + src/sys-user/dto/update-sys-user.dto.ts | 4 + src/sys-user/entities/sys-user.entity.ts | 13 +++ src/sys-user/sys-user.controller.spec.ts | 20 ++++ src/sys-user/sys-user.controller.ts | 42 ++++++++ src/sys-user/sys-user.module.ts | 9 ++ src/sys-user/sys-user.service.spec.ts | 18 ++++ src/sys-user/sys-user.service.ts | 26 +++++ src/transoform/transform.interceptor.ts | 23 +++++ src/upload/upload.server.ts | 26 ----- src/user/entities/user.entity.ts | 2 +- src/user/user.controller.ts | 9 +- src/user/user.module.ts | 3 + src/user/user.service.ts | 22 ++++- 27 files changed, 316 insertions(+), 166 deletions(-) create mode 100644 src/http-exception/http-exception.filter.ts create mode 100644 src/sys-user/dto/create-sys-user.dto.ts create mode 100644 src/sys-user/dto/update-sys-user.dto.ts create mode 100644 src/sys-user/entities/sys-user.entity.ts create mode 100644 src/sys-user/sys-user.controller.spec.ts create mode 100644 src/sys-user/sys-user.controller.ts create mode 100644 src/sys-user/sys-user.module.ts create mode 100644 src/sys-user/sys-user.service.spec.ts create mode 100644 src/sys-user/sys-user.service.ts create mode 100644 src/transoform/transform.interceptor.ts delete mode 100644 src/upload/upload.server.ts diff --git a/config/oss.ts b/config/oss.ts index adda22a..2b6a03d 100644 --- a/config/oss.ts +++ b/config/oss.ts @@ -1,17 +1,15 @@ const productConfig = { - accessKeyId: 'accessKeyId', - accessKeySecret: 'accessKeySecret', - endpoint: 'endpoint', - bucket: 'bucket', - region: 'region', + accessKeyId: 'LTAI5tHfUhFjJ335EVo1vcWm', + accessKeySecret: '0q5JF4862ai5pznfIZMTIjThVjzaqK', + bucket: 'polaris-frontend', + dir: 'yitu_image/', }; const localConfig = { - accessKeyId: 'accessKeyId', - accessKeySecret: 'accessKeySecret', - endpoint: 'endpoint', - bucket: 'bucket', - region: 'region', + accessKeyId: 'LTAI5tHfUhFjJ335EVo1vcWm', + accessKeySecret: '0q5JF4862ai5pznfIZMTIjThVjzaqK', + bucket: 'polaris-frontend', + dir: 'yitu_image/', }; // 本地运行是没有 process.env.NODE_ENV 的,借此来区分[开发环境]和[生产环境] diff --git a/package.json b/package.json index 8a46d81..3a1569b 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "@nestjs/typeorm": "^10.0.2", "@types/ali-oss": "^6.16.11", "ali-oss": "^6.20.0", + "dayjs": "^1.11.11", "multer": "1.4.5-lts.1", "mysql2": "^3.9.7", "reflect-metadata": "^0.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6ea24ee..3a166c3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,6 +29,9 @@ importers: ali-oss: specifier: ^6.20.0 version: 6.20.0 + dayjs: + specifier: ^1.11.11 + version: 1.11.11 multer: specifier: 1.4.5-lts.1 version: 1.4.5-lts.1 diff --git a/src/app.module.ts b/src/app.module.ts index a8d7ff7..d350e93 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,10 +1,17 @@ import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; +import { UserEntity } from './user/entities/user.entity'; +import { BannerEntity } from './banner/entities/banner.entity'; import { UserModule } from './user/user.module'; import { TypeOrmModule } from '@nestjs/typeorm'; import { BannerModule } from './banner/banner.module'; import { OssModule } from './oss/oss.module'; +import { SysUserModule } from './sys-user/sys-user.module'; + +const ENTITIES = [UserEntity, BannerEntity]; + +const MODULE = [UserModule, BannerModule, OssModule]; @Module({ imports: [ @@ -15,10 +22,11 @@ import { OssModule } from './oss/oss.module'; username: 'root', password: '123456', database: 'travel-app', - entities: [UserModule], // 这里添加实体类 + entities: ENTITIES, // 这里添加实体类 + synchronize: true, }), - BannerModule, - OssModule, + ...MODULE, + SysUserModule, ], controllers: [AppController], providers: [AppService], diff --git a/src/banner/banner.controller.ts b/src/banner/banner.controller.ts index b497904..75f4e1f 100644 --- a/src/banner/banner.controller.ts +++ b/src/banner/banner.controller.ts @@ -1,7 +1,6 @@ -import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common'; +import { Controller, Get, Post, Body, Param, Delete } from '@nestjs/common'; import { BannerService } from './banner.service'; import { CreateBannerDto } from './dto/create-banner.dto'; -import { UpdateBannerDto } from './dto/update-banner.dto'; @Controller('banner') export class BannerController { @@ -22,11 +21,6 @@ export class BannerController { return this.bannerService.findOne(+id); } - @Patch(':id') - update(@Param('id') id: string, @Body() updateBannerDto: UpdateBannerDto) { - return this.bannerService.update(+id, updateBannerDto); - } - @Delete(':id') remove(@Param('id') id: string) { return this.bannerService.remove(+id); diff --git a/src/banner/banner.module.ts b/src/banner/banner.module.ts index bdca4f8..6338abb 100644 --- a/src/banner/banner.module.ts +++ b/src/banner/banner.module.ts @@ -1,8 +1,11 @@ import { Module } from '@nestjs/common'; import { BannerService } from './banner.service'; import { BannerController } from './banner.controller'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { BannerEntity } from './entities/banner.entity'; @Module({ + imports: [TypeOrmModule.forFeature([BannerEntity])], controllers: [BannerController], providers: [BannerService], }) diff --git a/src/banner/banner.service.ts b/src/banner/banner.service.ts index 1abfdbb..2c91f2b 100644 --- a/src/banner/banner.service.ts +++ b/src/banner/banner.service.ts @@ -1,26 +1,34 @@ -import { Injectable } from '@nestjs/common'; +import { Injectable, NotFoundException } from '@nestjs/common'; +import { Repository } from 'typeorm'; import { CreateBannerDto } from './dto/create-banner.dto'; -import { UpdateBannerDto } from './dto/update-banner.dto'; +import { BannerEntity } from './entities/banner.entity'; +import { InjectRepository } from '@nestjs/typeorm'; @Injectable() export class BannerService { - create(createBannerDto: CreateBannerDto) { - return 'This action adds a new banner'; + constructor( + @InjectRepository(BannerEntity) + private readonly bannerRepository: Repository, + ) {} + async create(createBannerDto: CreateBannerDto) { + const res = await this.bannerRepository.create(createBannerDto); + await this.bannerRepository.save(res); + return res; } findAll() { - return `This action returns all banner`; + return this.bannerRepository.find(); } findOne(id: number) { return `This action returns a #${id} banner`; } - update(id: number, updateBannerDto: UpdateBannerDto) { - return `This action updates a #${id} banner`; - } - - remove(id: number) { - return `This action removes a #${id} banner`; + async remove(id: number) { + const result = await this.bannerRepository.delete(id); + if (result.affected === 0) { + throw new NotFoundException(`User with ID ${id} not found`); + } + return result; } } diff --git a/src/banner/entities/banner.entity.ts b/src/banner/entities/banner.entity.ts index 19d2983..59b713f 100644 --- a/src/banner/entities/banner.entity.ts +++ b/src/banner/entities/banner.entity.ts @@ -1 +1,15 @@ -export class Banner {} +import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'; +@Entity() +export class BannerEntity { + @PrimaryGeneratedColumn() + id: number; + + @Column() + url: string; + + @Column() + type: number; + + @Column({ type: 'timestamp', default: () => 'CURRENT_TIMESTAMP' }) + createTime: Date; +} diff --git a/src/http-exception/http-exception.filter.ts b/src/http-exception/http-exception.filter.ts new file mode 100644 index 0000000..e5d0a09 --- /dev/null +++ b/src/http-exception/http-exception.filter.ts @@ -0,0 +1,22 @@ +import { + ExceptionFilter, + Catch, + ArgumentsHost, + HttpException, +} from '@nestjs/common'; +import { Response } from 'express'; + +@Catch(HttpException) +export class HttpExceptionFilter implements ExceptionFilter { + catch(exception: HttpException, host: ArgumentsHost) { + const ctx = host.switchToHttp(); + const response = ctx.getResponse(); + const status = exception.getStatus(); + + response.status(status).json({ + code: 1, + message: '服务错误', + data: null, + }); + } +} diff --git a/src/main.ts b/src/main.ts index 13cad38..0bcea39 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,8 +1,15 @@ import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; +import { HttpExceptionFilter } from './http-exception/http-exception.filter'; +import { TransformInterceptor } from './transoform/transform.interceptor'; async function bootstrap() { const app = await NestFactory.create(AppModule); + // 设置全局路由前缀,例如 'api' + app.setGlobalPrefix('api'); + app.enableCors(); + app.useGlobalFilters(new HttpExceptionFilter()); + app.useGlobalInterceptors(new TransformInterceptor()); await app.listen(3000); } bootstrap(); diff --git a/src/oss/oss.controller.ts b/src/oss/oss.controller.ts index 1a05d3d..7c16b53 100644 --- a/src/oss/oss.controller.ts +++ b/src/oss/oss.controller.ts @@ -1,34 +1,17 @@ -import { - Controller, - Post, - UseInterceptors, - UploadedFile, -} from '@nestjs/common'; -import { FileInterceptor } from '@nestjs/platform-express'; -import { UploadService } from '../upload/upload.server'; -import multer = require('multer'); +import { Controller, Get } from '@nestjs/common'; -@Controller('demo') +import { OssService } from './oss.service'; + +@Controller() export class OssController { - constructor(private readonly uploadService: UploadService) {} + constructor(private readonly uploadService: OssService) {} + /** - * 上传图片到 本地 和 oss - * @param body + * 获取oss签名 + * @returns */ - @Post('uploadImage') - @UseInterceptors( - FileInterceptor('file', { - storage: multer.diskStorage({ - destination: (req, file, cb) => { - cb(null, 'D:/oss/image'); - }, - filename: (req, file, cb) => { - cb(null, file.originalname); - }, - }), - }), - ) - async uploadImage(@UploadedFile() file: any): Promise { - return await this.uploadService.uploadImage(file); + @Get('signature') + getOssSignature() { + return this.uploadService.getSignature(); } } diff --git a/src/oss/oss.module.ts b/src/oss/oss.module.ts index c144cd7..ab4befb 100644 --- a/src/oss/oss.module.ts +++ b/src/oss/oss.module.ts @@ -1,10 +1,9 @@ import { Module } from '@nestjs/common'; import { OssService } from './oss.service'; import { OssController } from './oss.controller'; -import { UploadService } from '../upload/upload.server'; @Module({ controllers: [OssController], - providers: [OssService, UploadService], + providers: [OssService], }) export class OssModule {} diff --git a/src/oss/oss.service.ts b/src/oss/oss.service.ts index 29cf728..0d7aab0 100644 --- a/src/oss/oss.service.ts +++ b/src/oss/oss.service.ts @@ -1,80 +1,38 @@ import * as OSS from 'ali-oss'; import { Injectable } from '@nestjs/common'; import ossConfig from '../../config/oss'; +import * as dayjs from 'dayjs'; @Injectable() export class OssService { - private client: any; - public constructor() { - this.client = new OSS({ + async getSignature() { + const config = { + // 填写你自己的 AccessKey accessKeyId: ossConfig.accessKeyId, - accessKeySecret: ossConfig.accessKeySecret, - region: ossConfig.region, - bucket: ossConfig.bucket, - }); - } - // 创建存储空间。 - private async putBucket() { - try { - const result = await this.client.putBucket('test'); - console.log(result); - } catch (err) { - console.log(err); - } - } - // 列举所有的存储空间 - private async listBuckets() { - try { - const result = await this.client.listBuckets(); - console.log(result); - } catch (err) { - console.log(err); - } - } - // 上传文件到oss 并返回 图片oss 地址 - public async putOssFile(ossPath: string, localPath: string): Promise { - let res: any; - try { - res = await this.client.put(ossPath, localPath); - // 将文件设置为公共可读 - await this.client.putACL(ossPath, 'public-read'); - } catch (error) { - console.log(error); - } - return res.url; - } - /** - * 获取文件的url - * @param filePath - */ - public async getFileSignatureUrl(filePath: string): Promise { - if (filePath == null) { - console.log('get file signature failed: file name can not be empty'); - return null; - } - let result = ''; - try { - result = this.client.signatureUrl(filePath, { expires: 36000 }); - } catch (err) { - console.log(err); - } - return result; - } - /** - * 上传文件大小校验 - * @param localPath - * @param ossPath - * @param size - */ - public async validateFile( - ossPath: string, - localPath: string, - size: number, - ): Promise { - if (size > 5 * 1024 * 1024) { - return; - } else { - return await this.putOssFile(ossPath, localPath); - } + accessKeySecret: ossConfig.accessKeySecret, // 存储桶名字 + bucket: ossConfig.bucket, // 文件存储路径 + dir: ossConfig.dir, + }; + const client = new OSS(config); + const date = new Date(); // 时长加 1 天,作为签名的有限期 + date.setDate(date.getDate() + 1); + const policy = { + // 设置签名的有效期,格式为Unix时间戳 + expiration: date.toISOString(), + conditions: [ + ['content-length-range', 0, 10485760000], // 设置上传文件的大小限制 + ], + }; // 生成签名,策略等信息 + const formData = await client.calculatePostSignature(policy); // 生成 bucket 域名,客户端将向此地址发送请求 + const location = await client.getBucketLocation(ossConfig.bucket); + const host = `https://${config.bucket}.${location.location}.aliyuncs.com`; // 响应给客户端的签名和策略等信息 + return { + expire: dayjs().add(1, 'days').unix().toString(), + policy: formData.policy, + signature: formData.Signature, + accessId: formData.OSSAccessKeyId, + host, + dir: config.dir, + }; } } diff --git a/src/sys-user/dto/create-sys-user.dto.ts b/src/sys-user/dto/create-sys-user.dto.ts new file mode 100644 index 0000000..accb04c --- /dev/null +++ b/src/sys-user/dto/create-sys-user.dto.ts @@ -0,0 +1 @@ +export class CreateSysUserDto {} diff --git a/src/sys-user/dto/update-sys-user.dto.ts b/src/sys-user/dto/update-sys-user.dto.ts new file mode 100644 index 0000000..bfd44e1 --- /dev/null +++ b/src/sys-user/dto/update-sys-user.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/mapped-types'; +import { CreateSysUserDto } from './create-sys-user.dto'; + +export class UpdateSysUserDto extends PartialType(CreateSysUserDto) {} diff --git a/src/sys-user/entities/sys-user.entity.ts b/src/sys-user/entities/sys-user.entity.ts new file mode 100644 index 0000000..2fc0120 --- /dev/null +++ b/src/sys-user/entities/sys-user.entity.ts @@ -0,0 +1,13 @@ +import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'; + +@Entity() +export class SysUserEntity { + @PrimaryGeneratedColumn() + id: number; + + @Column() + name: string; + + @Column() + password: string; +} diff --git a/src/sys-user/sys-user.controller.spec.ts b/src/sys-user/sys-user.controller.spec.ts new file mode 100644 index 0000000..fcf638a --- /dev/null +++ b/src/sys-user/sys-user.controller.spec.ts @@ -0,0 +1,20 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { SysUserController } from './sys-user.controller'; +import { SysUserService } from './sys-user.service'; + +describe('SysUserController', () => { + let controller: SysUserController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [SysUserController], + providers: [SysUserService], + }).compile(); + + controller = module.get(SysUserController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/sys-user/sys-user.controller.ts b/src/sys-user/sys-user.controller.ts new file mode 100644 index 0000000..ff1a6b5 --- /dev/null +++ b/src/sys-user/sys-user.controller.ts @@ -0,0 +1,42 @@ +import { + Controller, + Get, + Post, + Body, + Patch, + Param, + Delete, +} from '@nestjs/common'; +import { SysUserService } from './sys-user.service'; +import { CreateSysUserDto } from './dto/create-sys-user.dto'; +import { UpdateSysUserDto } from './dto/update-sys-user.dto'; + +@Controller('sys-user') +export class SysUserController { + constructor(private readonly sysUserService: SysUserService) {} + + @Post() + create(@Body() createSysUserDto: CreateSysUserDto) { + return this.sysUserService.create(createSysUserDto); + } + + @Get() + findAll() { + return this.sysUserService.findAll(); + } + + @Get(':id') + findOne(@Param('id') id: string) { + return this.sysUserService.findOne(+id); + } + + @Patch(':id') + update(@Param('id') id: string, @Body() updateSysUserDto: UpdateSysUserDto) { + return this.sysUserService.update(+id, updateSysUserDto); + } + + @Delete(':id') + remove(@Param('id') id: string) { + return this.sysUserService.remove(+id); + } +} diff --git a/src/sys-user/sys-user.module.ts b/src/sys-user/sys-user.module.ts new file mode 100644 index 0000000..a077e07 --- /dev/null +++ b/src/sys-user/sys-user.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { SysUserService } from './sys-user.service'; +import { SysUserController } from './sys-user.controller'; + +@Module({ + controllers: [SysUserController], + providers: [SysUserService], +}) +export class SysUserModule {} diff --git a/src/sys-user/sys-user.service.spec.ts b/src/sys-user/sys-user.service.spec.ts new file mode 100644 index 0000000..e51fc73 --- /dev/null +++ b/src/sys-user/sys-user.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { SysUserService } from './sys-user.service'; + +describe('SysUserService', () => { + let service: SysUserService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [SysUserService], + }).compile(); + + service = module.get(SysUserService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/sys-user/sys-user.service.ts b/src/sys-user/sys-user.service.ts new file mode 100644 index 0000000..1d455fd --- /dev/null +++ b/src/sys-user/sys-user.service.ts @@ -0,0 +1,26 @@ +import { Injectable } from '@nestjs/common'; +import { CreateSysUserDto } from './dto/create-sys-user.dto'; +import { UpdateSysUserDto } from './dto/update-sys-user.dto'; + +@Injectable() +export class SysUserService { + create(createSysUserDto: CreateSysUserDto) { + return 'This action adds a new sysUser'; + } + + findAll() { + return `This action returns all sysUser`; + } + + findOne(id: number) { + return `This action returns a #${id} sysUser`; + } + + update(id: number, updateSysUserDto: UpdateSysUserDto) { + return `This action updates a #${id} sysUser`; + } + + remove(id: number) { + return `This action removes a #${id} sysUser`; + } +} diff --git a/src/transoform/transform.interceptor.ts b/src/transoform/transform.interceptor.ts new file mode 100644 index 0000000..66b10cf --- /dev/null +++ b/src/transoform/transform.interceptor.ts @@ -0,0 +1,23 @@ +import { + Injectable, + NestInterceptor, + ExecutionContext, + CallHandler, +} from '@nestjs/common'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +@Injectable() +export class TransformInterceptor implements NestInterceptor { + intercept(context: ExecutionContext, next: CallHandler): Observable { + return next.handle().pipe( + map((data) => { + return { + code: 0, + data, + message: null, + }; + }), + ); + } +} diff --git a/src/upload/upload.server.ts b/src/upload/upload.server.ts deleted file mode 100644 index 6a14e6a..0000000 --- a/src/upload/upload.server.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { OssService } from '../oss/oss.service'; - -@Injectable() -export class UploadService { - constructor(private readonly ossService: OssService) {} - // 上传照片 - async uploadImage(file: any): Promise { - try { - const ossUrl = await this.ossService.putOssFile( - `/image/${file.originalname}`, - `D:/oss/image/${file.originalname}`, - ); - return { - code: 200, - data: ossUrl, - message: '上传成功', - }; - } catch (error) { - return { - code: 503, - msg: `Service error: ${error}`, - }; - } - } -} diff --git a/src/user/entities/user.entity.ts b/src/user/entities/user.entity.ts index ffe4b07..6b8f46b 100644 --- a/src/user/entities/user.entity.ts +++ b/src/user/entities/user.entity.ts @@ -1,7 +1,7 @@ import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'; @Entity() -export class User { +export class UserEntity { @PrimaryGeneratedColumn() id: number; diff --git a/src/user/user.controller.ts b/src/user/user.controller.ts index f514ba4..fb63b55 100644 --- a/src/user/user.controller.ts +++ b/src/user/user.controller.ts @@ -16,8 +16,8 @@ export class UserController { constructor(private readonly userService: UserService) {} @Post() - create(@Body() createUserDto: CreateUserDto) { - return this.userService.create(createUserDto); + async create(@Body() createUserDto: CreateUserDto) { + return await this.userService.create(createUserDto); } @Get() @@ -25,6 +25,11 @@ export class UserController { return this.userService.findAll(); } + @Post('/login') + async login(@Body() user: any) { + return await this.userService.login(user); + } + @Get(':id') findOne(@Param('id') id: string) { return this.userService.findOne(+id); diff --git a/src/user/user.module.ts b/src/user/user.module.ts index e21d51f..e210937 100644 --- a/src/user/user.module.ts +++ b/src/user/user.module.ts @@ -1,8 +1,11 @@ import { Module } from '@nestjs/common'; import { UserService } from './user.service'; +import { UserEntity } from './entities/user.entity'; import { UserController } from './user.controller'; +import { TypeOrmModule } from '@nestjs/typeorm'; @Module({ + imports: [TypeOrmModule.forFeature([UserEntity])], controllers: [UserController], providers: [UserService], }) diff --git a/src/user/user.service.ts b/src/user/user.service.ts index 9fc5104..14cb668 100644 --- a/src/user/user.service.ts +++ b/src/user/user.service.ts @@ -1,18 +1,30 @@ import { Injectable, NotFoundException } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; + import { Repository } from 'typeorm'; -import { User } from './entities/user.entity'; +import { UserEntity } from './entities/user.entity'; import { CreateUserDto } from './dto/create-user.dto'; import { UpdateUserDto } from './dto/update-user.dto'; @Injectable() export class UserService { - private readonly userRepository: Repository; - async create(createUserDto: CreateUserDto): Promise { + constructor( + @InjectRepository(UserEntity) + private readonly userRepository: Repository, + ) {} + async create(createUserDto: CreateUserDto): Promise { const newUser = await this.userRepository.create(createUserDto); await this.userRepository.save(newUser); return newUser; } + async login(user: any) { + return { + status: 'ok', + ...user, + }; + } + findAll() { return this.userRepository.find(); } @@ -30,7 +42,8 @@ export class UserService { id, }, }); - return this.userRepository.merge(oldData, updateUserDto); + const mergedData = this.userRepository.merge(oldData, updateUserDto); + return await this.userRepository.save(mergedData); } async remove(id: number) { @@ -38,5 +51,6 @@ export class UserService { if (result.affected === 0) { throw new NotFoundException(`User with ID ${id} not found`); } + return result; } }