diff --git a/tone-page-server/src/app.module.ts b/tone-page-server/src/app.module.ts index 16c8577..f5dde71 100644 --- a/tone-page-server/src/app.module.ts +++ b/tone-page-server/src/app.module.ts @@ -8,6 +8,7 @@ import { AuthModule } from './auth/auth.module'; import { VerificationModule } from './verification/verification.module'; import { NotificationModule } from './notification/notification.module'; import { PassportModule } from '@nestjs/passport'; +import { ResourceModule } from './resource/resource.module'; @Module({ imports: [ @@ -27,7 +28,8 @@ import { PassportModule } from '@nestjs/passport'; UserModule, AuthModule, VerificationModule, - NotificationModule + NotificationModule, + ResourceModule ], controllers: [AppController], providers: [AppService], diff --git a/tone-page-server/src/resource/entity/resource.entity.ts b/tone-page-server/src/resource/entity/resource.entity.ts new file mode 100644 index 0000000..ebd032f --- /dev/null +++ b/tone-page-server/src/resource/entity/resource.entity.ts @@ -0,0 +1,40 @@ +import { Column, CreateDateColumn, DeleteDateColumn, Entity, Index, PrimaryColumn, UpdateDateColumn } from "typeorm"; + +type ResourceTag = { + name: string; + description: string; +} + +@Entity() +export class Resource { + @PrimaryColumn('uuid', { unique: true, default: () => 'gen_random_uuid()' }) + @Index({ unique: true }) + id: string; + + @Column() + title: string; + + @Column() + description: string; + + @Column() + imageUrl: string; + + @Column() + link: string; + + @Column('jsonb') + tags: ResourceTag[]; + + @Column() + isHidden: boolean; + + @CreateDateColumn({ precision: 3 }) + createdAt: Date; + + @UpdateDateColumn({ precision: 3 }) + updatedAt: Date; + + @DeleteDateColumn({ nullable: true, precision: 3 }) + deletedAt: Date; +} \ No newline at end of file diff --git a/tone-page-server/src/resource/resource.controller.spec.ts b/tone-page-server/src/resource/resource.controller.spec.ts new file mode 100644 index 0000000..9ec9149 --- /dev/null +++ b/tone-page-server/src/resource/resource.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { ResourceController } from './resource.controller'; + +describe('ResourceController', () => { + let controller: ResourceController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [ResourceController], + }).compile(); + + controller = module.get(ResourceController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/tone-page-server/src/resource/resource.controller.ts b/tone-page-server/src/resource/resource.controller.ts new file mode 100644 index 0000000..b7db8af --- /dev/null +++ b/tone-page-server/src/resource/resource.controller.ts @@ -0,0 +1,15 @@ +import { Controller, Get } from '@nestjs/common'; +import { ResourceService } from './resource.service'; + +@Controller('resource') +export class ResourceController { + + constructor( + private readonly resourceService: ResourceService, + ) { } + + @Get() + async getResource() { + return this.resourceService.findAll(); + } +} diff --git a/tone-page-server/src/resource/resource.module.ts b/tone-page-server/src/resource/resource.module.ts new file mode 100644 index 0000000..ac64287 --- /dev/null +++ b/tone-page-server/src/resource/resource.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { ResourceController } from './resource.controller'; +import { ResourceService } from './resource.service'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Resource } from './entity/resource.entity'; + +@Module({ + imports:[TypeOrmModule.forFeature([Resource])], + controllers: [ResourceController], + providers: [ResourceService] +}) +export class ResourceModule {} diff --git a/tone-page-server/src/resource/resource.service.spec.ts b/tone-page-server/src/resource/resource.service.spec.ts new file mode 100644 index 0000000..18dca6c --- /dev/null +++ b/tone-page-server/src/resource/resource.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { ResourceService } from './resource.service'; + +describe('ResourceService', () => { + let service: ResourceService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ResourceService], + }).compile(); + + service = module.get(ResourceService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/tone-page-server/src/resource/resource.service.ts b/tone-page-server/src/resource/resource.service.ts new file mode 100644 index 0000000..bd44ac4 --- /dev/null +++ b/tone-page-server/src/resource/resource.service.ts @@ -0,0 +1,16 @@ +import { Injectable } from '@nestjs/common'; +import { Repository } from 'typeorm'; +import { Resource } from './entity/resource.entity'; +import { InjectRepository } from '@nestjs/typeorm'; + +@Injectable() +export class ResourceService { + constructor( + @InjectRepository(Resource) + private readonly resourceRepository: Repository, + ) { } + + async findAll(): Promise { + return this.resourceRepository.find(); + } +}