From efcc4b35af4653ea9e7d5252499b7164ba1704d0 Mon Sep 17 00:00:00 2001 From: Kimcheolhui Date: Mon, 10 Feb 2025 18:23:51 +0900 Subject: [PATCH 1/3] feat: add navermap column to cafe schema --- .../migration.sql | 2 ++ prisma/schema.prisma | 1 + src/cafe/cafe.repository.ts | 4 ++-- src/cafe/dto/req/createCafe.dto.ts | 14 +++++++++++++- src/cafe/dto/res/generalCafe.dto.ts | 13 +++++++++++++ 5 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 prisma/migrations/20250210091557_add_navermap_field_to_cafe/migration.sql diff --git a/prisma/migrations/20250210091557_add_navermap_field_to_cafe/migration.sql b/prisma/migrations/20250210091557_add_navermap_field_to_cafe/migration.sql new file mode 100644 index 0000000..c6c3c69 --- /dev/null +++ b/prisma/migrations/20250210091557_add_navermap_field_to_cafe/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE `Cafe` ADD COLUMN `naverMap` VARCHAR(191) NULL; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 05c31a3..4fd50d4 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -29,6 +29,7 @@ model Cafe { longitude Float // GPS 경도 // openHours String? // 영업 시간 // 좀 더 세분화 필요 instagram String? // 가게 인스타 계정 링크 + naverMap String? // 가게 네이버지도 링크 phone String? // 가게 연락처 createdAt DateTime @default(now()) updatedAt DateTime @updatedAt diff --git a/src/cafe/cafe.repository.ts b/src/cafe/cafe.repository.ts index 7dbeeaa..3fd8e69 100644 --- a/src/cafe/cafe.repository.ts +++ b/src/cafe/cafe.repository.ts @@ -131,7 +131,7 @@ export class CafeRepository { ): Promise { const cafeList = await this.prismaService.$queryRaw` SELECT - c.id, c.name, c.address, c.latitude, c.longitude, c.instagram, c.phone, c.createdAt, + c.id, c.name, c.address, c.latitude, c.longitude, c.instagram, c.naverMap, c.phone, c.createdAt, CASE WHEN COUNT(i.id) = 0 THEN JSON_ARRAY() ELSE JSON_ARRAYAGG( @@ -210,7 +210,7 @@ export class CafeRepository { const rawResult = await this.prismaService.$queryRaw` SELECT - c.id, c.name, c.address, c.latitude, c.longitude, c.instagram, c.phone, c.createdAt, + c.id, c.name, c.address, c.latitude, c.longitude, c.instagram, c.naverMap, c.phone, c.createdAt, CASE WHEN COUNT(i.id) = 0 THEN JSON_ARRAY() ELSE JSON_ARRAYAGG( diff --git a/src/cafe/dto/req/createCafe.dto.ts b/src/cafe/dto/req/createCafe.dto.ts index de23318..9eb56de 100644 --- a/src/cafe/dto/req/createCafe.dto.ts +++ b/src/cafe/dto/req/createCafe.dto.ts @@ -42,15 +42,27 @@ export class CreateCafeDto { type: String, description: "Cafe's Instagram Link", example: 'https://www.instagram.com/cafe_baleine', + required: false, }) @IsString() @IsOptional() instagram?: string; + @ApiProperty({ + type: String, + description: "Cafe's Navermap Link", + example: 'https://naver.me/G2EI8IYr', + required: false, + }) + @IsString() + @IsOptional() + naverMap?: string; + @ApiProperty({ type: String, description: "Cafe's Phone number", example: '02-1234-5678', + required: false, }) @IsString() @IsOptional() @@ -59,7 +71,7 @@ export class CreateCafeDto { @ApiProperty({ type: Array, description: 'Image file s3 key list', - example: ['path1/image1.png', 'path1/image2.png'], + example: ['staging/1739171538853-x51z517a99e006.png'], required: false, }) @IsString({ each: true }) diff --git a/src/cafe/dto/res/generalCafe.dto.ts b/src/cafe/dto/res/generalCafe.dto.ts index b3761fb..2053525 100644 --- a/src/cafe/dto/res/generalCafe.dto.ts +++ b/src/cafe/dto/res/generalCafe.dto.ts @@ -58,15 +58,27 @@ export class GeneralCafeResDto { type: String, description: "Cafe's Instagram Link", example: 'https://www.instagram.com/cafe_baleine', + required: false, }) @IsString() @IsOptional() instagram?: string; + @ApiProperty({ + type: String, + description: "Cafe's Navermap Link", + example: 'https://naver.me/G2EI8IYr', + required: false, + }) + @IsString() + @IsOptional() + naverMap?: string; + @ApiProperty({ type: String, description: "Cafe's Phone number", example: '02-1234-5678', + required: false, }) @IsString() @IsOptional() @@ -84,6 +96,7 @@ export class GeneralCafeResDto { createdAt: '2025-01-30T15:34:28.284Z', }, ], + required: false, }) @IsString({ each: true }) @IsOptional() From 89ea9d3b0057b5c8e1d2db1f1260e47b75795ee1 Mon Sep 17 00:00:00 2001 From: Kimcheolhui Date: Mon, 10 Feb 2025 18:24:09 +0900 Subject: [PATCH 2/3] chore: update swagger api property --- src/cafe/cafe.controller.ts | 2 +- src/cafe/cafe.service.ts | 2 +- src/cafe/dto/res/preferenceStatus.dto.ts | 10 ++++++++++ ...switeCafeListRes.dto.ts => swifeCafeListRes.dto.ts} | 0 4 files changed, 12 insertions(+), 2 deletions(-) rename src/cafe/dto/res/{switeCafeListRes.dto.ts => swifeCafeListRes.dto.ts} (100%) diff --git a/src/cafe/cafe.controller.ts b/src/cafe/cafe.controller.ts index 843d8c8..2a49d84 100644 --- a/src/cafe/cafe.controller.ts +++ b/src/cafe/cafe.controller.ts @@ -30,7 +30,7 @@ import { ApiUnauthorizedResponse, } from '@nestjs/swagger'; import { PreferenceStatusDto } from './dto/res/preferenceStatus.dto'; -import { SwipeCafeListResDto } from './dto/res/switeCafeListRes.dto'; +import { SwipeCafeListResDto } from './dto/res/swifeCafeListRes.dto'; import { GetSwipeCafeListDto } from './dto/req/getSwipeCafeList.dto'; @Controller('cafe') diff --git a/src/cafe/cafe.service.ts b/src/cafe/cafe.service.ts index a689059..8eb89e6 100644 --- a/src/cafe/cafe.service.ts +++ b/src/cafe/cafe.service.ts @@ -10,7 +10,7 @@ import { GetNearCafeListDto } from './dto/req/getNearCafeList.dto'; import { GeneralCafeResDto } from './dto/res/generalCafe.dto'; import { SetCafePreferenceDto } from './dto/req/setCafePreference.dto'; import { User } from '@prisma/client'; -import { SwipeCafeListResDto } from './dto/res/switeCafeListRes.dto'; +import { SwipeCafeListResDto } from './dto/res/swifeCafeListRes.dto'; import { GetSwipeCafeListDto } from './dto/req/getSwipeCafeList.dto'; import { ImageService } from 'src/image/image.service'; diff --git a/src/cafe/dto/res/preferenceStatus.dto.ts b/src/cafe/dto/res/preferenceStatus.dto.ts index b11d12b..ae83f56 100644 --- a/src/cafe/dto/res/preferenceStatus.dto.ts +++ b/src/cafe/dto/res/preferenceStatus.dto.ts @@ -1,5 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; import { PreferenceStatus } from '@prisma/client'; +import { IsDate, IsEnum, IsNotEmpty } from 'class-validator'; export class PreferenceStatusDto { @ApiProperty({ @@ -8,7 +9,16 @@ export class PreferenceStatusDto { description: 'Preference Status of Cafe(LIKE, DISLIKE, HOLD)', example: PreferenceStatus.LIKE, }) + @IsEnum(PreferenceStatus) + @IsNotEmpty() status: PreferenceStatus; + @ApiProperty({ + type: Date, + description: "Cafe's created Date", + example: '2025-01-30T15:34:28.284Z', + }) + @IsDate() + @IsNotEmpty() updatedAt: Date; } diff --git a/src/cafe/dto/res/switeCafeListRes.dto.ts b/src/cafe/dto/res/swifeCafeListRes.dto.ts similarity index 100% rename from src/cafe/dto/res/switeCafeListRes.dto.ts rename to src/cafe/dto/res/swifeCafeListRes.dto.ts From 5e35c5978cf82e754334a424e3868c9fdc9188b3 Mon Sep 17 00:00:00 2001 From: Kimcheolhui Date: Mon, 10 Feb 2025 18:35:12 +0900 Subject: [PATCH 3/3] chore: add IsUrl decorator to instagram and navermap --- src/cafe/dto/req/createCafe.dto.ts | 10 +++++++++- src/cafe/dto/res/generalCafe.dto.ts | 3 +++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/cafe/dto/req/createCafe.dto.ts b/src/cafe/dto/req/createCafe.dto.ts index 9eb56de..86d01db 100644 --- a/src/cafe/dto/req/createCafe.dto.ts +++ b/src/cafe/dto/req/createCafe.dto.ts @@ -1,5 +1,11 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsNumber, IsOptional, IsString } from 'class-validator'; +import { + IsNotEmpty, + IsNumber, + IsOptional, + IsString, + IsUrl, +} from 'class-validator'; export class CreateCafeDto { @ApiProperty({ @@ -44,6 +50,7 @@ export class CreateCafeDto { example: 'https://www.instagram.com/cafe_baleine', required: false, }) + @IsUrl({ protocols: ['http', 'https'], require_protocol: true }) @IsString() @IsOptional() instagram?: string; @@ -54,6 +61,7 @@ export class CreateCafeDto { example: 'https://naver.me/G2EI8IYr', required: false, }) + @IsUrl({ protocols: ['http', 'https'], require_protocol: true }) @IsString() @IsOptional() naverMap?: string; diff --git a/src/cafe/dto/res/generalCafe.dto.ts b/src/cafe/dto/res/generalCafe.dto.ts index 2053525..513651d 100644 --- a/src/cafe/dto/res/generalCafe.dto.ts +++ b/src/cafe/dto/res/generalCafe.dto.ts @@ -6,6 +6,7 @@ import { IsNumber, IsOptional, IsString, + IsUrl, } from 'class-validator'; export class GeneralCafeResDto { @@ -60,6 +61,7 @@ export class GeneralCafeResDto { example: 'https://www.instagram.com/cafe_baleine', required: false, }) + @IsUrl({ protocols: ['http', 'https'], require_protocol: true }) @IsString() @IsOptional() instagram?: string; @@ -70,6 +72,7 @@ export class GeneralCafeResDto { example: 'https://naver.me/G2EI8IYr', required: false, }) + @IsUrl({ protocols: ['http', 'https'], require_protocol: true }) @IsString() @IsOptional() naverMap?: string;