|
1 | | -import prisma from "../config/prisma"; |
| 1 | +import prisma from '../config/prisma'; |
| 2 | +import { binToUuid } from '../util/uuid'; |
2 | 3 |
|
3 | 4 | /** |
4 | 5 | * 대타 아르바이트 상세 정보 조회 |
5 | | - * @param albaId |
| 6 | + * @param albaId |
6 | 7 | * @returns 대타 아르바이트 상세 정보 |
7 | 8 | */ |
8 | | -export const findAlbaDetail = async (albaId:string)=>{ |
9 | | - //albaId Buffer로 변환. Todo: 유틸 함수 사용해서 가독성 개선시키기 |
10 | | - const albaBuffer=Buffer.from(albaId.replace(/-/g,""),'hex'); |
11 | | - //albaId로 관련된 store, work_schedule 조회 |
12 | | - const result = await prisma.alba_posting.findUnique({ |
13 | | - where:{alba_id:albaBuffer}, |
14 | | - include:{ |
15 | | - work_schedule:true, |
16 | | - store:{ |
17 | | - include:{ |
18 | | - store_review:true |
19 | | - } |
20 | | - } |
21 | | - } |
22 | | - }) |
23 | | - if (!result) { |
24 | | - throw new Error("존재하지 않는 알바 공고입니다."); |
25 | | - } |
26 | | - |
27 | | - if (!result.work_schedule) { |
28 | | - throw new Error("알바 스케줄 정보를 찾을 수 없습니다."); |
29 | | - } |
30 | | - const {work_schedule,store,requirement,notification,main_task,total_wage,hourly_rate} = result |
31 | | - const {work_date,work_time,start_time,end_time,day_of_week}=work_schedule |
32 | | - //date인 것들 string으로 변환 |
33 | | - const workDate=work_date.toISOString().split('T')[0]; |
34 | | - const startTime = start_time.toISOString().split('T')[1].substring(0, 5); |
35 | | - const endTime = end_time.toISOString().split('T')[1].substring(0, 5); |
36 | | - //특정 가게의 평균 지표 구하기(가게 평점의 합/가게 리뷰 개수) |
37 | | - const reviews = store.store_review; |
38 | | - const reviewCount=reviews.length; |
39 | | - const totalScore = reviewCount>0 |
40 | | - ?Number((reviews.reduce((acc,curr)=>acc+curr.total_score,0)/reviewCount).toFixed(1)) |
41 | | - :0; |
| 9 | +export const findAlbaDetail = async (albaId: string) => { |
| 10 | + //albaId Buffer로 변환. Todo: 유틸 함수 사용해서 가독성 개선시키기 |
| 11 | + const albaBuffer = Buffer.from(albaId.replace(/-/g, ''), 'hex'); |
| 12 | + //albaId로 관련된 store, work_schedule 조회 |
| 13 | + const result = await prisma.alba_posting.findUnique({ |
| 14 | + where: { alba_id: albaBuffer }, |
| 15 | + include: { |
| 16 | + work_schedule: true, |
| 17 | + store: { |
| 18 | + include: { |
| 19 | + store_review: true, |
| 20 | + }, |
| 21 | + }, |
| 22 | + }, |
| 23 | + }); |
| 24 | + if (!result) { |
| 25 | + throw new Error('존재하지 않는 알바 공고입니다.'); |
| 26 | + } |
42 | 27 |
|
43 | | - return { |
44 | | - albaId, |
45 | | - storeName:store.store_name, |
46 | | - workDate, |
47 | | - dayOfWeek:day_of_week, |
48 | | - workTime:work_time, |
49 | | - startTime, |
50 | | - endTime, |
51 | | - hourlyRate:hourly_rate, //시급 |
52 | | - totalWage:total_wage, //예상급여 |
53 | | - storeAddress:store.store_address, |
54 | | - totalScore, //신뢰지표 |
55 | | - mainTask:main_task, |
56 | | - requirement, |
57 | | - notification |
58 | | - } |
59 | | -} |
| 28 | + if (!result.work_schedule) { |
| 29 | + throw new Error('알바 스케줄 정보를 찾을 수 없습니다.'); |
| 30 | + } |
| 31 | + const { work_schedule, store, requirement, notification, main_task, total_wage, hourly_rate } = |
| 32 | + result; |
| 33 | + const { work_date, work_time, start_time, end_time, day_of_week } = work_schedule; |
| 34 | + //date인 것들 string으로 변환 |
| 35 | + const workDate = work_date.toISOString().split('T')[0]; |
| 36 | + const startTime = start_time.toISOString().split('T')[1].substring(0, 5); |
| 37 | + const endTime = end_time.toISOString().split('T')[1].substring(0, 5); |
| 38 | + //특정 가게의 평균 지표 구하기(가게 평점의 합/가게 리뷰 개수) |
| 39 | + const reviews = store.store_review; |
| 40 | + const reviewCount = reviews.length; |
| 41 | + const totalScore = |
| 42 | + reviewCount > 0 |
| 43 | + ? Number((reviews.reduce((acc, curr) => acc + curr.total_score, 0) / reviewCount).toFixed(1)) |
| 44 | + : 0; |
| 45 | + |
| 46 | + return { |
| 47 | + albaId, |
| 48 | + storeId: binToUuid(store.store_id), |
| 49 | + storeName: store.store_name, |
| 50 | + workDate, |
| 51 | + dayOfWeek: day_of_week, |
| 52 | + workTime: work_time, |
| 53 | + startTime, |
| 54 | + endTime, |
| 55 | + hourlyRate: hourly_rate, //시급 |
| 56 | + totalWage: total_wage, //예상급여 |
| 57 | + storeAddress: store.store_address, |
| 58 | + totalScore, //신뢰지표 |
| 59 | + mainTask: main_task, |
| 60 | + requirement, |
| 61 | + notification, |
| 62 | + }; |
| 63 | +}; |
60 | 64 |
|
61 | 65 | /** |
62 | 66 | * 대타 아르바이트 지원 기능 |
63 | 67 | * @param data(albaBuffer,userBuffer) |
64 | 68 | */ |
65 | | -export const applyAlba= async(userBuffer:Buffer,albaBuffer:Buffer) =>{ |
66 | | - |
67 | | - const result = await prisma.user_alba.create({ |
68 | | - data:{ |
69 | | - user_id:new Uint8Array(userBuffer), |
70 | | - alba_id:new Uint8Array(albaBuffer), |
71 | | - //승인이 아니므로 초기에는 waiting으로 설정 |
72 | | - process_status:'waiting', |
73 | | - settlement_status:'waiting' |
74 | | - } |
75 | | - }) |
76 | | - return result |
77 | | -} |
78 | | - |
| 69 | +export const applyAlba = async (userBuffer: Buffer, albaBuffer: Buffer) => { |
| 70 | + const result = await prisma.user_alba.create({ |
| 71 | + data: { |
| 72 | + user_id: new Uint8Array(userBuffer), |
| 73 | + alba_id: new Uint8Array(albaBuffer), |
| 74 | + //승인이 아니므로 초기에는 waiting으로 설정 |
| 75 | + process_status: 'waiting', |
| 76 | + settlement_status: 'waiting', |
| 77 | + }, |
| 78 | + }); |
| 79 | + return result; |
| 80 | +}; |
0 commit comments