From 586a2976d2471b0f0cd4be3ac9655f714fd42adf Mon Sep 17 00:00:00 2001 From: tone Date: Fri, 19 Dec 2025 19:02:10 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E8=B0=83=E6=95=B4adminResource?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/backend/src/admin/admin.module.ts | 4 ++ .../web/admin-web-resource.controller.ts | 10 +++-- .../admin/services/admin.resource.service.ts | 38 +++++++++++++++++++ .../src/resource/entity/resource.entity.ts | 9 +++++ apps/backend/src/resource/resource.module.ts | 2 +- apps/backend/src/resource/resource.service.ts | 27 +++---------- 6 files changed, 64 insertions(+), 26 deletions(-) create mode 100644 apps/backend/src/admin/services/admin.resource.service.ts diff --git a/apps/backend/src/admin/admin.module.ts b/apps/backend/src/admin/admin.module.ts index adc9b9e..7eaaef7 100644 --- a/apps/backend/src/admin/admin.module.ts +++ b/apps/backend/src/admin/admin.module.ts @@ -9,8 +9,12 @@ import { AdminWebBlogController } from './controller/web/admin-web-blog.controll import { ResourceModule } from 'src/resource/resource.module'; import { BlogModule } from 'src/blog/blog.module'; import { AuthModule } from 'src/auth/auth.module'; +import { AdminResourceService } from './services/admin.resource.service'; @Module({ + providers: [ + AdminResourceService, + ], imports: [ TypeOrmModule.forFeature([User]), UserModule, diff --git a/apps/backend/src/admin/controller/web/admin-web-resource.controller.ts b/apps/backend/src/admin/controller/web/admin-web-resource.controller.ts index f601f66..5ecd32e 100644 --- a/apps/backend/src/admin/controller/web/admin-web-resource.controller.ts +++ b/apps/backend/src/admin/controller/web/admin-web-resource.controller.ts @@ -10,17 +10,18 @@ import { UseGuards, } from '@nestjs/common'; import { CreateResourceDto } from 'src/admin/dto/admin-web/create-resource.dto'; +import { AdminResourceService } from 'src/admin/services/admin.resource.service'; import { AuthGuard } from 'src/auth/guards/auth.guard'; import { Role } from 'src/auth/role.enum'; import { Roles } from 'src/common/decorators/role.decorator'; import { RolesGuard } from 'src/common/guard/roles.guard'; -import { ResourceService } from 'src/resource/resource.service'; @Controller('/admin/web/resource') @UseGuards(AuthGuard, RolesGuard) @Roles(Role.Admin) export class AdminWebResourceController { - constructor(private readonly resourceService: ResourceService) { } + + constructor(private readonly resourceService: AdminResourceService) { } @Get() async list() { @@ -42,7 +43,10 @@ export class AdminWebResourceController { @Param('id', new ParseUUIDPipe({ version: '4' })) id: string, @Body() data: CreateResourceDto, ) { - return this.resourceService.update(id, data); + return this.resourceService.update({ + ...data, + id, + }); } @Delete(':id') diff --git a/apps/backend/src/admin/services/admin.resource.service.ts b/apps/backend/src/admin/services/admin.resource.service.ts new file mode 100644 index 0000000..abc412b --- /dev/null +++ b/apps/backend/src/admin/services/admin.resource.service.ts @@ -0,0 +1,38 @@ +import { Injectable } from "@nestjs/common"; +import { InjectRepository } from "@nestjs/typeorm"; +import { Resource } from "src/resource/entity/resource.entity"; +import { Repository } from "typeorm"; + +@Injectable() +export class AdminResourceService { + + constructor( + @InjectRepository(Resource) + private readonly resourceRepository: Repository, + ) { } + + + async findAll() { + return this.resourceRepository.find(); + } + + async findById(id: string): Promise { + return this.resourceRepository.findOne({ where: { id } }); + } + + async create(data: Partial): Promise { + const resource = this.resourceRepository.create(data); + return this.resourceRepository.save(resource); + } + + async update(data: Partial): Promise { + // const updateRes = await this.resourceRepository.update(id, data); + // updateRes.affected + // return this.resourceRepository.findOne({ where: { id } }); + return this.resourceRepository.save(data); + } + + async delete(id: string): Promise { + await this.resourceRepository.delete(id); + } +} \ No newline at end of file diff --git a/apps/backend/src/resource/entity/resource.entity.ts b/apps/backend/src/resource/entity/resource.entity.ts index 9236d9c..88866a7 100644 --- a/apps/backend/src/resource/entity/resource.entity.ts +++ b/apps/backend/src/resource/entity/resource.entity.ts @@ -39,3 +39,12 @@ export class Resource { @UpdateDateColumn({ precision: 3 }) updatedAt: Date; } + +export interface PublicResource { + id: string; + title: string; + description: string; + imageUrl: string; + link: string; + tags: ResourceTag[]; +} \ No newline at end of file diff --git a/apps/backend/src/resource/resource.module.ts b/apps/backend/src/resource/resource.module.ts index b6dd653..d464e10 100644 --- a/apps/backend/src/resource/resource.module.ts +++ b/apps/backend/src/resource/resource.module.ts @@ -8,6 +8,6 @@ import { Resource } from './entity/resource.entity'; imports: [TypeOrmModule.forFeature([Resource])], controllers: [ResourceController], providers: [ResourceService], - exports: [ResourceService], + exports: [ResourceService, TypeOrmModule.forFeature([Resource])], }) export class ResourceModule {} diff --git a/apps/backend/src/resource/resource.service.ts b/apps/backend/src/resource/resource.service.ts index 8334320..134fe70 100644 --- a/apps/backend/src/resource/resource.service.ts +++ b/apps/backend/src/resource/resource.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@nestjs/common'; import { Repository } from 'typeorm'; -import { Resource } from './entity/resource.entity'; +import { PublicResource, Resource } from './entity/resource.entity'; import { InjectRepository } from '@nestjs/typeorm'; @Injectable() @@ -8,31 +8,14 @@ export class ResourceService { constructor( @InjectRepository(Resource) private readonly resourceRepository: Repository, - ) {} + ) { } - async findAll(): Promise { + async findAll(): Promise { return this.resourceRepository.find({ + select: ['id', 'title', 'description', 'imageUrl', 'link', 'tags'], order: { - createdAt: 'DESC', + updatedAt: 'DESC', }, }); } - - async findById(id: string): Promise { - return this.resourceRepository.findOne({ where: { id } }); - } - - async create(data: Partial): Promise { - const resource = this.resourceRepository.create(data); - return this.resourceRepository.save(resource); - } - - async update(id: string, data: Partial): Promise { - await this.resourceRepository.update(id, data); - return this.resourceRepository.findOne({ where: { id } }); - } - - async delete(id: string): Promise { - await this.resourceRepository.delete(id); - } }