Skip to content

Commit

Permalink
[FEATURE] complete /sample endpoint for vr-resources, vr-videos (
Browse files Browse the repository at this point in the history
…#16, #10)

* 1. fix: add entities `isSample` property

* 2. fix: `sample-vr-resource`

* 2. fix: trivial swagger

* 3. fix: (trivial) vr-video api deprecated

* 3. feat: `sample-vr-video`

* 4. refactor: move sample services logic to origin domain directory.
  • Loading branch information
woog2roid committed May 1, 2024
1 parent ef60527 commit 1380c24
Show file tree
Hide file tree
Showing 24 changed files with 414 additions and 399 deletions.
3 changes: 1 addition & 2 deletions src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import { VrVideo } from './domain/vr-video/entity/vr-video.entity';
import { VrVideoModule } from './domain/vr-video/vr-video.module';
import { AppController } from './app.controller';
import { SampleModule } from './domain/sample/sample.module';
import { SampleVrResource } from './domain/sample/entity/sample-vr-resource.entity';

@Module({
imports: [
Expand All @@ -35,7 +34,7 @@ import { SampleVrResource } from './domain/sample/entity/sample-vr-resource.enti
username: configService.get<string>('DB_USERNAME'),
password: configService.get<string>('DB_PASSWORD'),
database: configService.get<string>('DB_DATABASE'),
entities: [User, Group, Badge, VrResource, VrVideo, SampleVrResource],
entities: [User, Group, Badge, VrResource, VrVideo],
migrations: [__dirname + '/src/migrations/*.ts'],
autoLoadEntities: true,
charset: 'utf8mb4',
Expand Down
10 changes: 10 additions & 0 deletions src/domain/sample/dto/request/sample-generate-video.request.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { ApiProperty } from '@nestjs/swagger';
import { IsNotEmpty, IsString } from 'class-validator';
import { GenerateVrVideoRequestDto } from 'src/domain/vr-video/dto/request/generate-vr-video.request.dto';

export class SampleGenerateVideoRequestDto extends GenerateVrVideoRequestDto {
@ApiProperty({ description: 'admin임을 인증하는 키', example: 'key' })
@IsString()
@IsNotEmpty()
key: string;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { ApiProperty } from '@nestjs/swagger';
import { IsNotEmpty, IsString } from 'class-validator';
import { GenerateSceneRequestDto } from 'src/domain/vr-resource/dto/request/generate-scene.request.dto';

export class SampleGetVrResourcesRequestDto {
@ApiProperty({ description: 'admin임을 인증하는 키', example: 'key' })
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { ApiProperty } from '@nestjs/swagger';
import { IsNotEmpty, IsString } from 'class-validator';

export class SampleGetVrVideosRequestDto {
@ApiProperty({ description: 'admin임을 인증하는 키', example: 'key' })
@IsString()
@IsNotEmpty()
key: string;
}

This file was deleted.

63 changes: 0 additions & 63 deletions src/domain/sample/entity/sample-vr-resource.entity.ts

This file was deleted.

23 changes: 0 additions & 23 deletions src/domain/sample/repository/sample-vr-resource.repository.ts

This file was deleted.

52 changes: 42 additions & 10 deletions src/domain/sample/sample.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,27 +15,35 @@ import {
ApiBody,
ApiConsumes,
ApiOperation,
ApiResponse,
ApiTags,
} from '@nestjs/swagger';
import { SampleVrResourceService } from './service/sample-vr-resource.service';
import { SampleGenerateSceneRequestDto } from './dto/request/sample-generate-scene.request.dto';
import {
FileFieldsInterceptor,
FileInterceptor,
} from '@nestjs/platform-express';
import { SampleGenerateAvatarRequestDto } from './dto/request/sample-generate-avatar.request.dto';
import { SampleGetVrResourcesRequestDto } from './dto/request/sample-get-vr-resource.request.dto';
import { SampleGetVrResourcesResponseDto } from './dto/response/sample-get-vr-resources.response.dto';
import { ConfigService } from '@nestjs/config';
import { SampleGetVrVideosRequestDto } from './dto/request/sample-get-vr-video.request.dto';
import { GetVrVideosResponseDto } from '../vr-video/dto/response/get-vr-videos.response.dto';
import { GetVrResourcesResponseDto } from '../vr-resource/dto/response/get-vr-resources.response.dto';
import { VrVideoService } from '../vr-video/service/vr-video.service';
import { SampleGenerateVideoRequestDto } from './dto/request/sample-generate-video.request.dto';
import { VrResourceService } from '../vr-resource/service/vr-resource.service';
import { VrResourceQueueService } from '../vr-resource/service/vr-resource-queue.service';

@ApiTags('Sample')
@Controller('/sample')
export class SampleController {
private adminKey: string;

constructor(
private readonly sampleVrResourceService: SampleVrResourceService,
private readonly vrResourceService: VrResourceService,
private readonly vrResourceQueueService: VrResourceQueueService,
private readonly configService: ConfigService,
private readonly vrVideoService: VrVideoService,
) {
this.adminKey = this.configService.get<string>('ADMIN_KEY');
}
Expand All @@ -50,7 +58,7 @@ export class SampleController {
@Body() requestDto: SampleGenerateSceneRequestDto,
) {
this.validateAdminKey(requestDto.key);
return this.sampleVrResourceService.generateScene(requestDto, video);
return this.vrResourceQueueService.generateSampleScene(requestDto, video);
}

@ApiOperation({ summary: '아바타 생성 요청' })
Expand All @@ -69,24 +77,48 @@ export class SampleController {
@Body() requestDto: SampleGenerateAvatarRequestDto,
) {
this.validateAdminKey(requestDto.key);
return this.sampleVrResourceService.generateAvatar(
return this.vrResourceQueueService.generateSampleAvatar(
requestDto,
files.face[0],
files.body[0],
);
}

@ApiOperation({ summary: '완성된 VR 자원(배경, 아바타) 불러오기' })
@Get('/')
@ApiOperation({ summary: '샘플 VR 자원 찾기' })
@ApiResponse({
status: 200,
type: GetVrResourcesResponseDto,
})
@Get('/vr-resource')
async getVrResources(
@Body() requestDto: SampleGetVrResourcesRequestDto,
): Promise<SampleGetVrResourcesResponseDto> {
): Promise<GetVrResourcesResponseDto> {
this.validateAdminKey(requestDto.key);
return new SampleGetVrResourcesResponseDto(
await this.sampleVrResourceService.getVrResources(),
return new GetVrResourcesResponseDto(
await this.vrResourceService.getSampleVrResources(),
);
}

/* -------------------------------------------------------------------------- */

@ApiOperation({ summary: '샘플 VR 비디오 찾기' })
@ApiResponse({ type: GetVrVideosResponseDto })
@Get('/vr-video')
async getSampleVrVideos(
@Body() requestDto: SampleGetVrVideosRequestDto,
): Promise<GetVrVideosResponseDto[]> {
this.validateAdminKey(requestDto.key);
return this.vrVideoService.getSampleVrVideos();
}

@ApiOperation({ summary: '샘플 VR 비디오 만들기' })
@Post('/vr-video')
async getVrVideos(@Body() requestDto: SampleGenerateVideoRequestDto) {
this.validateAdminKey(requestDto.key);
return this.vrVideoService.generateSampleVrVideo(requestDto, true);
}

/* -------------------------------------------------------------------------- */
// ! TODO: make as decorator
validateAdminKey(key: string) {
if (key !== this.adminKey) {
Expand Down
16 changes: 10 additions & 6 deletions src/domain/sample/sample.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,18 @@ import { Module } from '@nestjs/common';
import { GcpModule } from 'src/common/gcp/gcp.module';
import { SampleController } from './sample.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { SampleVrResourceService } from './service/sample-vr-resource.service';
import { SampleVrResourceRepository } from './repository/sample-vr-resource.repository';
import { SampleVrResource } from './entity/sample-vr-resource.entity';
import { VrResource } from '../vr-resource/entity/vr-resource.entity';
import { VrResourceModule } from '../vr-resource/vr-resource.module';
import { VrVideo } from '../vr-video/entity/vr-video.entity';
import { VrVideoModule } from '../vr-video/vr-video.module';

@Module({
imports: [TypeOrmModule.forFeature([SampleVrResource]), GcpModule],
imports: [
TypeOrmModule.forFeature([VrResource, VrVideo]),
VrResourceModule,
VrVideoModule,
GcpModule,
],
controllers: [SampleController],
providers: [SampleVrResourceService, SampleVrResourceRepository],
exports: [SampleVrResourceService],
})
export class SampleModule {}
Loading

0 comments on commit 1380c24

Please sign in to comment.