ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2023 - 07 - 28 타입스크립트 별다방 프로젝트 - 2
    Today 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

    댓글

Designed by Tistory.