Skip to content

Commit 44d6214

Browse files
authored
Merge pull request #68 from ChangSik88/feat/ALBA_60
[FEATURE] 리뷰 조회, 알바 검색 필터링 조건 추가
2 parents b251640 + ed8ee08 commit 44d6214

7 files changed

Lines changed: 90 additions & 13 deletions

File tree

src/DTO/store_review_dto.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,7 @@ export interface StoreReviewResponseDto{
2222
createdAt:Date,
2323
updatedAt:Date
2424
}
25+
26+
export interface StoreReviewDto {
27+
reviews: StoreReviewResponseDto[];
28+
}

src/controller/search_alba_controller.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
import {Get,Route,SuccessResponse,Response, Tags, Controller, Queries} from 'tsoa'
1+
import {Get,Route,SuccessResponse,Response,Request,Security, Tags, Controller, Queries} from 'tsoa'
2+
import { Request as ExpressRequest } from 'express';
23
import { SearchAlbaRequestDto,SearchAlbaResponseDto } from '../DTO/search_alba_dto';
34
import { getFilteredAlba } from '../service/search_alba_service';
5+
import { uuidToBuffer } from '../util/uuid_util';
46

57

68
/**
@@ -17,13 +19,19 @@ export class SearchAlbaController extends Controller{
1719
* @returns 조건에 맞는 알바 리스트
1820
*/
1921
@Get('search')
22+
@Security('jwt')
2023
@SuccessResponse('200','조회 성공')
2124
@Response('400','Bad Request')
2225
@Response('500','Internal Error')
2326
public async searchFilteredAlba(
27+
@Request() req:ExpressRequest,
2428
@Queries() params:SearchAlbaRequestDto
2529
): Promise<SearchAlbaResponseDto[]>{
26-
const result = await getFilteredAlba(params)
30+
//UUID 문자열 Buffer로 변환
31+
const userId = (req.user as unknown as { id: string }).id;
32+
const userBuffer=Buffer.from(uuidToBuffer(userId))
33+
34+
const result = await getFilteredAlba(params,userBuffer)
2735

2836
return result
2937
}

src/controller/store_review_controller.ts

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { Tags, Route,SuccessResponse,Response,Request, Post, Body, Controller, Security} from 'tsoa';
1+
import { Tags, Route,SuccessResponse,Response,Request,Path, Post, Body, Controller, Security, Get} from 'tsoa';
22
import { Request as ExpressRequest } from 'express';
3-
import {StoreReviewRequestDto,StoreReviewResponseDto} from '../DTO/store_review_dto'
4-
import { addReview } from '../service/store_review_service';
3+
import {StoreReviewDto, StoreReviewRequestDto,StoreReviewResponseDto} from '../DTO/store_review_dto'
4+
import { addReview,getStoreReviewById } from '../service/store_review_service';
55
import { uuidToBuffer } from '../util/uuid_util';
66

77
/**
@@ -32,4 +32,23 @@ export class StoreReviewController extends Controller{
3232
this.setStatus(201);
3333
return result;
3434
}
35+
36+
/**
37+
* 근무지 평가 조회 API
38+
* @param 쿼리 파라미터로 가게 Id
39+
* @returns 리뷰 정보 + 가게,유저명 반환
40+
*/
41+
@Get('/{storeId}')
42+
@Security('jwt')
43+
@SuccessResponse('200','조회 성공')
44+
@Response('400','Bad Request')
45+
@Response('500','Internal Server Error')
46+
public async getStoreReview(
47+
@Path() storeId: string,
48+
): Promise<StoreReviewDto>{
49+
50+
const result= await getStoreReviewById(storeId)
51+
this.setStatus(201);
52+
return result;
53+
}
3554
}

src/repository/search_alba_repository.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,24 @@ import { SearchAlbaRequestDto, SearchAlbaResponseDto } from "../DTO/search_alba_
33
import { bufferToUuid } from "../util/uuid_util";
44
//id값으로 변경된 storeCategoryId 사용
55
export interface SearchAlbaRepoParams extends SearchAlbaRequestDto{
6-
storeCategoryId?:number
6+
storeCategoryId?:number,
7+
userBuffer?:Buffer
78
}
89
/**
910
* 아르바이트 필터 명시 및 조회
1011
* @param data
1112
* @returns 조건에 맞는 알바 리스트
1213
*/
1314
export const findPostingByFilter = async(data:SearchAlbaRepoParams):Promise<SearchAlbaResponseDto[]>=>{
14-
const {workDate,storeCategoryId,storeName,hourlyRate,} = data
15+
const {workDate,storeCategoryId,storeName,hourlyRate,userBuffer} = data
1516
const result = await prisma.alba_posting.findMany({
1617
where:{
18+
...(userBuffer && {user_alba: {
19+
none: {
20+
user_id: new Uint8Array(userBuffer)
21+
}
22+
}
23+
}),
1724
...(hourlyRate&&{hourly_rate:{gte:hourlyRate}}),
1825
store:{
1926
...(storeCategoryId&&{

src/repository/store_review_repository.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,14 @@ export const createStoreReview = async (userBuffer:Buffer,storeBuffer:Buffer,dat
4545
createdAt: result.created_at, //생성, 수정 시간 추가
4646
updatedAt: result.updated_at
4747
}
48-
}
48+
}
49+
export const findReviewsByStoreId = async (storeId: Buffer) => {
50+
return await prisma.store_review.findMany({
51+
where: { store_id: new Uint8Array(storeId) },
52+
include: {
53+
user:true,
54+
store:true
55+
},
56+
orderBy: { created_at: 'desc' } // 최신순 정렬
57+
});
58+
};

src/service/search_alba_service.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { formatDate,formatTime } from '../util/date_util';
77
* @param params
88
* @returns 조건에 맞는 알바 리스트
99
*/
10-
export const getFilteredAlba = async (params:SearchAlbaRequestDto):Promise<SearchAlbaResponseDto[]>=>{
10+
export const getFilteredAlba = async (params:SearchAlbaRequestDto,userBuffer:Buffer):Promise<SearchAlbaResponseDto[]>=>{
1111
let storeCategoryId:number|undefined
1212
//문자로 받은 카테고리를 카테고리 id로 변환
1313
if(params.storeCategory){
@@ -20,7 +20,8 @@ export const getFilteredAlba = async (params:SearchAlbaRequestDto):Promise<Searc
2020

2121
const posting = await findPostingByFilter({
2222
...params,
23-
storeCategoryId
23+
storeCategoryId,
24+
userBuffer
2425
})
2526
let result = posting
2627
//요청으로 들어온 시간과 공고 시간 비교

src/service/store_review_service.ts

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { StoreReviewRequestDto, StoreReviewResponseDto } from "../DTO/store_review_dto";
2-
import { createStoreReview } from "../repository/store_review_repository";
1+
import { StoreReviewRequestDto, StoreReviewResponseDto,StoreReviewDto } from "../DTO/store_review_dto";
2+
import { createStoreReview,findReviewsByStoreId } from "../repository/store_review_repository";
33
import { bufferToUuid, uuidToBuffer } from "../util/uuid_util";
44

55
/**
@@ -18,4 +18,32 @@ export const addReview = async(userBuffer:Buffer,data:StoreReviewRequestDto):Pro
1818
storeId:bufferToUuid(sBuf),
1919
userId:bufferToUuid(uBuf)
2020
};
21-
}
21+
}
22+
/**
23+
* 특정 가게의 모든 리뷰를 조회하여 DTO 형태로 반환
24+
*/
25+
export const getStoreReviewById= async(storeIdStr: string): Promise<StoreReviewDto>=>{
26+
//UUID 문자열을 DB 조회를 위한 Buffer로 변환
27+
const storeIdBuffer = Buffer.from(uuidToBuffer(storeIdStr));
28+
29+
// 레포지토리 호출
30+
const reviews = await findReviewsByStoreId(storeIdBuffer);
31+
32+
return {
33+
reviews: reviews.map(rev => ({
34+
reviewId: bufferToUuid(rev.review_id),
35+
userId: bufferToUuid(rev.user_id),
36+
storeId: bufferToUuid(rev.store_id),
37+
userName: rev.user.user_name,
38+
storeName: rev.store.store_name,
39+
totalScore: rev.total_score,
40+
kindness: rev.kindness_rating,
41+
communication: rev.communication_rating,
42+
settlement: rev.settlement_rating,
43+
rest: rev.break_time_rating,
44+
review: rev.review,
45+
createdAt: rev.created_at,
46+
updatedAt: rev.updated_at
47+
}))
48+
};
49+
}

0 commit comments

Comments
 (0)