Skip to content

Commit 7c6ed76

Browse files
authored
Merge pull request #17 from DevKor-github/feature/imageToFood
feat: /storage/classes
2 parents a57b5a4 + fe6c88a commit 7c6ed76

File tree

5 files changed

+62
-0
lines changed

5 files changed

+62
-0
lines changed

src/image-to-food/imageToFood.controller.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import { Public } from 'src/auth/auth.guard';
1313
import { CreateFoodDto } from 'src/storage/dto/createFood.dto';
1414
import {
1515
ApiBearerAuth,
16+
ApiBody,
17+
ApiConsumes,
1618
ApiOkResponse,
1719
ApiOperation,
1820
ApiTags,
@@ -26,6 +28,11 @@ export class ImageToFoodController {
2628
private logger: Logger = new Logger(ImageToFoodController.name);
2729

2830
@ApiOperation({ summary: '이미지를 분석하여 식재료 리스트 추출' })
31+
@ApiBody({
32+
type: 'multipart/form-data',
33+
description: '이미지 파일, 최대 5개 (key: image)',
34+
})
35+
@ApiConsumes('multipart/form-data')
2936
@ApiOkResponse({
3037
type: CreateFoodDto,
3138
isArray: true,

src/storage/dto/foodInfo.dto.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { ApiProperty } from '@nestjs/swagger';
2+
import { StorageType } from '@prisma/client';
3+
import { IsNumber, IsString } from 'class-validator';
4+
5+
export class FoodInfoDto {
6+
@ApiProperty({ description: '식재료 정보 id' })
7+
@IsNumber()
8+
id: number;
9+
10+
@ApiProperty({ description: '식재료 저장 분류' })
11+
@IsString()
12+
storageType: StorageType;
13+
14+
@ApiProperty({ description: '식재료 대분류' })
15+
@IsString()
16+
class1: string;
17+
18+
@ApiProperty({ description: '식재료 소분류' })
19+
@IsString()
20+
class2: string;
21+
22+
@ApiProperty({ description: '식재료 아이콘 이름' })
23+
@IsString()
24+
icon: string;
25+
26+
@ApiProperty({ description: '식재료 유통기한 (일수)' })
27+
@IsNumber()
28+
expireDate: number;
29+
}

src/storage/storage.controller.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import { UpdateFoodDto } from './dto/updateFood.dto';
2626
import { CreateFoodDto } from './dto/createFood.dto';
2727
import { FoodDto } from './dto/food.dto';
2828
import { DeleteFoodDto } from './dto/deleteFood.dto';
29+
import { Public } from 'src/auth/auth.guard';
30+
import { FoodInfoDto } from './dto/foodInfo.dto';
2931

3032
@ApiTags('Storage')
3133
@ApiBearerAuth()
@@ -137,4 +139,18 @@ export class StorageController {
137139
this.logger.log(`Update food`);
138140
return this.storageService.updateFoodInfo(userId, food);
139141
}
142+
143+
@ApiOperation({ summary: '식재료 정보 가져오기' })
144+
@ApiOkResponse({
145+
type: FoodInfoDto,
146+
isArray: true,
147+
description: '식재료 정보 반환 (storageType, 대분류, 소분류 등)',
148+
})
149+
@Get('/classes')
150+
@HttpCode(HttpStatus.OK)
151+
@Public()
152+
getClasses(): Promise<FoodInfoDto[]> {
153+
this.logger.log(`Get classes`);
154+
return this.storageService.getClasses();
155+
}
140156
}

src/storage/storage.repository.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { PrismaService } from 'src/prisma/prisma.service';
44
import { UpdateFoodDto } from './dto/updateFood.dto';
55
import { CreateFoodDto } from './dto/createFood.dto';
66
import { FoodDto } from './dto/food.dto';
7+
import { FoodInfoDto } from './dto/foodInfo.dto';
78

89
@Injectable()
910
export class StorageRepository {
@@ -92,4 +93,8 @@ export class StorageRepository {
9293
});
9394
return this.calculateDaysTilExpire([foodUpdated])[0];
9495
}
96+
97+
async getAllClasses(): Promise<FoodInfoDto[]> {
98+
return this.prisma.foodInfo.findMany();
99+
}
95100
}

src/storage/storage.service.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { StorageRepository } from './storage.repository';
99
import { UpdateFoodDto } from './dto/updateFood.dto';
1010
import { CreateFoodDto } from './dto/createFood.dto';
1111
import { FoodDto } from './dto/food.dto';
12+
import { FoodInfoDto } from './dto/foodInfo.dto';
1213

1314
@Injectable()
1415
export class StorageService {
@@ -84,4 +85,8 @@ export class StorageService {
8485
throw new ForbiddenException('해당 식재료에 대한 접근 권한이 없습니다.');
8586
return true;
8687
}
88+
89+
async getClasses(): Promise<FoodInfoDto[]> {
90+
return this.storageRepository.getAllClasses();
91+
}
8792
}

0 commit comments

Comments
 (0)