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.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.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/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/req/createCafe.dto.ts b/src/cafe/dto/req/createCafe.dto.ts index de23318..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({ @@ -42,15 +48,29 @@ export class CreateCafeDto { type: String, description: "Cafe's Instagram Link", example: 'https://www.instagram.com/cafe_baleine', + required: false, }) + @IsUrl({ protocols: ['http', 'https'], require_protocol: true }) @IsString() @IsOptional() instagram?: string; + @ApiProperty({ + type: String, + description: "Cafe's Navermap Link", + example: 'https://naver.me/G2EI8IYr', + required: false, + }) + @IsUrl({ protocols: ['http', 'https'], require_protocol: true }) + @IsString() + @IsOptional() + naverMap?: string; + @ApiProperty({ type: String, description: "Cafe's Phone number", example: '02-1234-5678', + required: false, }) @IsString() @IsOptional() @@ -59,7 +79,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..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 { @@ -58,15 +59,29 @@ export class GeneralCafeResDto { type: String, description: "Cafe's Instagram Link", example: 'https://www.instagram.com/cafe_baleine', + required: false, }) + @IsUrl({ protocols: ['http', 'https'], require_protocol: true }) @IsString() @IsOptional() instagram?: string; + @ApiProperty({ + type: String, + description: "Cafe's Navermap Link", + example: 'https://naver.me/G2EI8IYr', + required: false, + }) + @IsUrl({ protocols: ['http', 'https'], require_protocol: true }) + @IsString() + @IsOptional() + naverMap?: string; + @ApiProperty({ type: String, description: "Cafe's Phone number", example: '02-1234-5678', + required: false, }) @IsString() @IsOptional() @@ -84,6 +99,7 @@ export class GeneralCafeResDto { createdAt: '2025-01-30T15:34:28.284Z', }, ], + required: false, }) @IsString({ each: true }) @IsOptional() 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