diff --git a/backend-api/src/database/database.controller.ts b/backend-api/src/database/database.controller.ts index ff0232d..f32c080 100644 --- a/backend-api/src/database/database.controller.ts +++ b/backend-api/src/database/database.controller.ts @@ -28,13 +28,20 @@ export class DatabaseController { } @Get() - findAll() { - return this.databaseService.findAll(); + async findAll() { + const resultList = await this.databaseService.findAll(); + + resultList.forEach(db => { + db.knexConfig = JSON.parse(db.knexConfig); + }); + return resultList; } @Get(':id') - findOne(@Param('id') id: string) { - return this.databaseService.findOne(+id); + async findOne(@Param('id') id: string) { + const resultDB = await this.databaseService.findOne(+id); + resultDB.knexConfig = JSON.parse(resultDB.knexConfig); + return resultDB; } @Patch(':id') diff --git a/backend-api/src/database/database.service.ts b/backend-api/src/database/database.service.ts index 7d82114..1969824 100644 --- a/backend-api/src/database/database.service.ts +++ b/backend-api/src/database/database.service.ts @@ -14,8 +14,9 @@ export class DatabaseService { } async create(createDatabaseDto: CreateDatabaseDto): Promise { - const database = Database.toDto(createDatabaseDto); - return await this.databaseRepository.save(database); + const databaseDto = Database.toDto(createDatabaseDto); + databaseDto.knexConfig = JSON.stringify(databaseDto.knexConfig); + return await this.databaseRepository.save(databaseDto); } async findAll(): Promise { diff --git a/backend-api/src/dataset/dataset.controller.ts b/backend-api/src/dataset/dataset.controller.ts index 583b6eb..1e01274 100644 --- a/backend-api/src/dataset/dataset.controller.ts +++ b/backend-api/src/dataset/dataset.controller.ts @@ -7,6 +7,10 @@ import { UpdateDatasetDto } from './dto/update-dataset.dto'; export class DatasetController { constructor(private readonly datasetService: DatasetService) {} + /** + * 데이터셋 생성 + * @param createDatasetDto + */ @Post() create(@Body() createDatasetDto: CreateDatasetDto) { return this.datasetService.create(createDatasetDto); diff --git a/backend-api/src/dataset/dataset.service.ts b/backend-api/src/dataset/dataset.service.ts index fdf7f49..967c058 100644 --- a/backend-api/src/dataset/dataset.service.ts +++ b/backend-api/src/dataset/dataset.service.ts @@ -1,26 +1,39 @@ -import { Injectable } from '@nestjs/common'; -import { CreateDatasetDto } from './dto/create-dataset.dto'; -import { UpdateDatasetDto } from './dto/update-dataset.dto'; +import {Injectable} from '@nestjs/common'; +import {CreateDatasetDto} from './dto/create-dataset.dto'; +import {UpdateDatasetDto} from './dto/update-dataset.dto'; +import {InjectRepository} from "@nestjs/typeorm"; +import {Repository} from "typeorm"; +import {Dataset} from "@google-cloud/bigquery"; @Injectable() export class DatasetService { - create(createDatasetDto: CreateDatasetDto) { - return 'This action adds a new dataset'; - } + constructor( + @InjectRepository(Dataset) + private readonly datasetRepository: Repository + ) { + } - findAll() { - return `This action returns all dataset`; - } + /** + * 데이터셋 추가 + * @param createDatasetDto + */ + async create(createDatasetDto: CreateDatasetDto) { + return await this.datasetRepository.save(createDatasetDto); + } - findOne(id: number) { - return `This action returns a #${id} dataset`; - } + findAll() { + return `This action returns all dataset`; + } - update(id: number, updateDatasetDto: UpdateDatasetDto) { - return `This action updates a #${id} dataset`; - } + findOne(id: number) { + return `This action returns a #${id} dataset`; + } - remove(id: number) { - return `This action removes a #${id} dataset`; - } + update(id: number, updateDatasetDto: UpdateDatasetDto) { + return `This action updates a #${id} dataset`; + } + + remove(id: number) { + return `This action removes a #${id} dataset`; + } } diff --git a/backend-api/src/dataset/dto/create-dataset.dto.ts b/backend-api/src/dataset/dto/create-dataset.dto.ts index 0f7ef2a..5ba4139 100644 --- a/backend-api/src/dataset/dto/create-dataset.dto.ts +++ b/backend-api/src/dataset/dto/create-dataset.dto.ts @@ -1 +1,13 @@ -export class CreateDatasetDto {} +import {IsNumber, IsString} from "class-validator"; + +export class CreateDatasetDto { + @IsString() + readonly title: string; + + @IsNumber() + readonly databaseId: number; + + @IsString() + readonly query:string; + +} diff --git a/backend-api/src/main.ts b/backend-api/src/main.ts index 3ef311d..5c62abe 100644 --- a/backend-api/src/main.ts +++ b/backend-api/src/main.ts @@ -5,7 +5,7 @@ import { ExpressAdapter } from '@nestjs/platform-express'; import { HttpExceptionFilter } from './nest-utils/http-exception.filter'; async function bootstrap() { - const expressApp = express(); +const expressApp = express(); const app = await NestFactory.create(AppModule, new ExpressAdapter(expressApp), { logger: console, cors: { diff --git a/backend-api/src/template/template.controller.ts b/backend-api/src/template/template.controller.ts index f5b9b43..867af3c 100644 --- a/backend-api/src/template/template.controller.ts +++ b/backend-api/src/template/template.controller.ts @@ -1,88 +1,87 @@ -import {Body, Controller, Delete, Get, HttpStatus, Param, Post, Put, Res} from '@nestjs/common'; -import {TemplateService} from './template.service'; -import {CreateTemplateDto} from './dto/create-template.dto'; -import {UpdateTemplateDto} from './dto/update-template.dto'; -import {CreateTemplateItemDto} from "./dto/create-template-item.dto"; -import {UpdateTemplateItemDto} from "./dto/update-template-item.dto"; -import {TemplateInfoDto} from "./dto/template-info.dto"; +import { Body, Controller, Delete, Get, HttpStatus, Param, Post, Put, Res } from '@nestjs/common'; +import { TemplateService } from './template.service'; +import { CreateTemplateDto } from './dto/create-template.dto'; +import { UpdateTemplateDto } from './dto/update-template.dto'; +import { CreateTemplateItemDto } from './dto/create-template-item.dto'; +import { UpdateTemplateItemDto } from './dto/update-template-item.dto'; +import { TemplateInfoDto } from './dto/template-info.dto'; @Controller('template') export class TemplateController { - constructor(private readonly templateService: TemplateService) { - } + constructor(private readonly templateService: TemplateService) {} - /** - * 템플릿 생성 - * @param createTemplateDto - */ - @Post() - create(@Body() createTemplateDto: CreateTemplateDto) { - return this.templateService.create(createTemplateDto); - } + /** + * 템플릿 생성 + * @param createTemplateDto + */ + @Post() + create(@Body() createTemplateDto: CreateTemplateDto) { + return this.templateService.create(createTemplateDto); + } - /** - * 템플릿 상세 아이템 생성 - * @param createTemplateItemDto - */ - @Post('/item') - createItem(@Body() createTemplateItemDto: CreateTemplateItemDto) { - return this.templateService.createItem(createTemplateItemDto); - } + /** + * 템플릿 상세 아이템 생성 + * @param createTemplateItemDto + */ + @Post('/item') + createItem(@Body() createTemplateItemDto: CreateTemplateItemDto) { + return this.templateService.createItem(createTemplateItemDto); + } - /** - * 템플릿 목록 조회 - */ - @Get() - findAll() { - return this.templateService.findAll(); - } + /** + * 템플릿 목록 조회 + */ + @Get() + findAll() { + return this.templateService.findAll(); + } - /** - * 템플릿 단건 조회 - * @param id - */ - @Get(':id') - async findOne(@Res() res, @Param('id') id: number) { - const resultTemplate: TemplateInfoDto = await this.templateService.findOne(id); - return res.status(HttpStatus.OK).json(resultTemplate); - } + /** + * 템플릿 단건 조회 + * @param id + */ + @Get(':id') + async findOne(@Res() res, @Param('id') id: number) { + const resultTemplate: TemplateInfoDto = await this.templateService.findOne(id); + return res.status(HttpStatus.OK).json(resultTemplate); + } - /** - * 템플릿 단건 업데이트 - * @param id - * @param updateTemplateDto - */ - @Put(':id') - update(@Param('id') id: string, @Body() updateTemplateDto: UpdateTemplateDto) { - return this.templateService.update(+id, updateTemplateDto); - } + /** + * 템플릿 단건 업데이트 + * @param id + * @param updateTemplateDto + */ + @Put(':id') + update(@Param('id') id: string, @Body() updateTemplateDto: UpdateTemplateDto) { + return this.templateService.update(+id, updateTemplateDto); + } - /** - * 템플릿 상세 아이템 단건 업데이트 - * @param id - * @param updateTemplateDto - */ - @Put('/item/:id') - updateItem(@Param('id') id: string, @Body() updateTemplateItemDto: UpdateTemplateItemDto) { - return this.templateService.updateItem(+id, updateTemplateItemDto); - } + /** + * 템플릿 상세 아이템 단건 업데이트 + * @param id + * @param updateTemplateDto + */ + @Put('/item/:id') + updateItem(@Param('id') id: string, @Body() updateTemplateItemDto: UpdateTemplateItemDto) { + return this.templateService.updateItem(+id, updateTemplateItemDto); + } - /** - * 템플릿 삭제 (사용여부 N 처리) - * @param id - */ - @Delete(':id') - remove(@Param('id') id: string) { - return this.templateService.remove(+id); - } + /** + * 템플릿 삭제 (사용여부 N 처리) + * @param id + */ + @Delete(':id') + remove(@Param('id') id: string) { + return this.templateService.remove(+id); + } - /** - * 템플릿 추천 목록 조회 - * @param widgets - */ - //todo:: yhs:: 추천 알고리즘 적용해서 조회해 와야함 - @Post('/recommend') - findRecommendAll(@Body() widgets: any[]) { - return this.templateService.findRecommendTemplates(widgets); - } + /** + * 템플릿 추천 목록 조회 + * @param widgets + */ + //todo:: yhs:: 추천 알고리즘 적용해서 조회해 와야함 + @Post('/recommend') + findRecommendAll(@Body() widgets: number[]) { + return this.templateService.findRecommendTemplates(widgets); + } } diff --git a/backend-api/src/template/template.service.ts b/backend-api/src/template/template.service.ts index 5d28f84..d69005f 100644 --- a/backend-api/src/template/template.service.ts +++ b/backend-api/src/template/template.service.ts @@ -1,191 +1,208 @@ -import {Injectable} from '@nestjs/common'; -import {CreateTemplateDto} from './dto/create-template.dto'; -import {UpdateTemplateDto} from './dto/update-template.dto'; -import {InjectRepository} from "@nestjs/typeorm"; -import {Template} from "./entities/template.entity"; -import {Repository} from "typeorm"; -import {YesNo} from "../common/enum/yn.enum"; -import {TemplateItem} from "./entities/template-item.entity"; -import {CreateTemplateItemDto} from "./dto/create-template-item.dto"; -import {UpdateTemplateItemDto} from "./dto/update-template-item.dto"; -import {TemplateInfoDto} from "./dto/template-info.dto"; -import {ItemInfoDto} from "./dto/item-info.dto"; +import { Injectable } from '@nestjs/common'; +import { CreateTemplateDto } from './dto/create-template.dto'; +import { UpdateTemplateDto } from './dto/update-template.dto'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Template } from './entities/template.entity'; +import { Repository } from 'typeorm'; +import { YesNo } from '../common/enum/yn.enum'; +import { TemplateItem } from './entities/template-item.entity'; +import { CreateTemplateItemDto } from './dto/create-template-item.dto'; +import { UpdateTemplateItemDto } from './dto/update-template-item.dto'; +import { TemplateInfoDto } from './dto/template-info.dto'; +import { ItemInfoDto } from './dto/item-info.dto'; @Injectable() export class TemplateService { - constructor( - @InjectRepository(Template) - private readonly templateRepository: Repository