-
2023 - 07 - 28 타입스크립트 별다방 프로젝트 - 2Today I Learned/TIL 07 2023. 7. 31. 22:43
오늘 할 일 : 별다방 프로젝트 2
1. 어드민 권한 체크 함수
function isAdmin(user: User): boolean { return user.role === "admin"; }
2. 고객 권한 체크 함수
function isCustomer(user: User): boolean { return user.role === "customer"; }
3. 음료 등록 함수 - 어드민 : 음료 목록에 음료를 새로 등록하는 addBeverage 함수
음료 등록은 어드민만 가능해야 하므로, 어드민만 호출할 수 있어야 한다.
function addBeverage(user: User, name: string, price: number): void { if (!isAdmin(user)) { console.log("권한이 없습니다."); return; } const newBeverage: Beverage = { name, price }; beverages.push(newBeverage); }
4. 음료 삭제 함수 - 어드민: 음료 목록에서 음료를 삭제하는 removeBeverage 함수
음료 삭제 역시 마찬가지로 어드민만 가능해야 하므로, 어드민만 호출할 수 있어야 한다.
function removeBeverage(user: User, beverageName: string): void { if (!isAdmin(user)) { console.log("권한이 없습니다."); return; } beverages = beverages.filter((beverage) => beverage.name !== beverageName); }
5. 음료 조회 함수 - 어드민, 고객 둘 다 가능.
function getBeverages(user: User): Beverage[] { if (!user) { return []; } return beverages; }
6. 음료 찾기 함수 : 고객이 음료주문할 때, 판매하지 않는 음료를 사는 것을 막기 위함
function findBeverage(beverageName: string): Beverage | undefined { return beverages.find((beverage) => beverage.name === beverageName); }
7. 음료 주문 함수 :
고객만 호출할 수 있어야 함. 엉뚱한 커피 주문은 막아야 하며, 주문 ID를 리턴해야 함.
function placeOrder(user: User, beverageName: string): number { if (!isCustomer(user)) { console.log("권한이 없습니다."); return -1; } const beverage = findBeverage(beverageName); if (!beverage) { console.log("해당 음료를 찾을 수 없습니다."); return -1; } const newOrder: Order = { orderId: orders.length + 1, customerId: user.id, customerName: user.name, beverageName, status: "placed", }; orders.push(newOrder); return newOrder.orderId; }
8. 음료 주문 완료 함수 :
고객이 주문한 음료의 준비가 완료되었다는 동작을 담당하는 함수. 어드민만 부를수 있어야 한다.
function completeOrder(user: User, orderId: number): void { if (!isAdmin(user)) { console.log("권한이 없습니다."); return; } const order = orders.find((order) => order.orderId === orderId); if (order) { order.status = "completed"; // 단순히 주문의 상태만 바꾸고 끝! console.log( `[고객 메시지] ${order.customerName}님~ 주문하신 ${order.beverageName} 1잔 나왔습니다~` ); } }
9. 음료 수령 함수 - 고객
function pickUpOrder(user: User, orderId: number): void { if (!isCustomer(user)) { console.log("권한이 없습니다."); return; } const order = orders.find( (order) => order.orderId === orderId && order.customerId === user.id ); if (order && order.status === "completed") { order.status = "picked-up"; console.log( `[어드민 메시지] 고객 ID[${order.customerId}]님이 주문 ID[${orderId}]을 수령했습니다.` ); } }
10. 어드민, 유저생성, 음료등록/삭제, 음료주문, 제작완료, 수령
// 어드민, 유저 생성 function main(){ const admin: User = { id: 1, name: "바리스타", role: "admin", } // 유저 생성 const member1: User = { id: 2, name: "르탄이", role: "customer", } const member2: User = { id: 3, name: "꿈꾸는 개발자", role: "customer", } // 음료 등록 addBeverage(admin, "아메리카노", 4000); addBeverage(admin, "카페라떼", 4500); addBeverage(admin, "에스프레소", 3000); // 음료 삭제 removeBeverage(admin, "에스프레소"); // member1 고객 console.log( `안녕하세요, ${member1.name}고객님, 별다방에 오신 것을 환영합니다. 저희는 ${JSON.stringify(getBeverage(member1))}를 판매하고 있습니다.` ) // 음료 주문, 제작완료, 수령 const orderId1 = placeOrder(member1, "아메리카노"); if(orderId1 > 0){ setTimeout(() => { completeOrder(admin, orderId1); // 제작완료 pickupOrder(member1, orderId1); // 수령 }, 1000) } // member2 고객 console.log( `안녕하세요, ${member2.name}고객님, 별다방에 오신 것을 환영합니다. 저희는 ${JSON.stringify(getBeverage(member2))}를 판매하고 있습니다.` ) // 음료 주문, 제작완료, 수령 const orderId2 = placeOrder(member2, "카페라떼"); if(orderId2 > 0){ setTimeout(() => { completeOrder(admin, orderId2); // 제작완료 pickupOrder(member2, orderId2); // 수령 }, 3000) } } main();
실행
npm run build npm run start
'Today I Learned > TIL 07' 카테고리의 다른 글