Github 프로젝트/음식점 포스 프로그램

[11] 음식점 포스 프로그램 - 백엔드 인터페이스 개발(5) - 인터페이스 개발(3), 음식 정보, 계좌 정보 와 로그 부분(2) Service와 Controller

Berkley 2023. 10. 29. 02:05
728x90
반응형
SMALL

지난 시간에는 고객정보와 로그 API를 구성 하였습니다.

 

이번 시간에는 음식 정보 및 계좌 정보를 Front-End 개발자에게 넘겨줄 각각 인터페이스 개발을 이어서 진행 해보겠습니다.

 

 

github: https://github.com/BerkleyLim/foodstor_pos

 

GitHub - BerkleyLim/foodstor_pos: This is the program on foot store pos machine.

This is the program on foot store pos machine. . Contribute to BerkleyLim/foodstor_pos development by creating an account on GitHub.

github.com

 

 

 


1.  프론트엔드 개발자에게 제공 해 줄 고객, 로그 정보 API 리스트

- API 원칙

1) uri 부분에서는 대문자를 절대 사용 하지 않는다.

2) Front 서버와 Back 서버와 연동 시 CORS 문제 해결 할 것 (보안상 인터페이스를 제한적으로 사용 가능)

3) 가급적 로직적인 부분은 백엔드에서 사용할 것. (View 관련 로직은 프론트엔드에서 사용한다.)

4) Controller 는 입출력 처리, 1개의 Data를 여러개의 서비스 로직이 필요한 부분을 넣을 수 있음

5) Service 는 백엔드에서 사용해야할 로직적인 부분에서 작업을 진행 해야한다. (Data 가공 처리 역할)

 

<계좌 정보>

- 사용자 계좌 정보 조회 =>  (이 프로젝트에서는 1명의 회원만 조회)

  • URI :/api/account/{uno}
  • Method : GET
  • Request : uno
  • Response : ano, uno, userMoney

 

- 계좌 입출금 서비스

  • URI : /api/account/change
  • Method : POST
  • Request :  ano, uno, userMoney
  • Response : 없음

 

<음식 메뉴 관련 >

음식 메뉴 전체 조회

  • URI :/api/food/
  • Method : GET
  • Request : null
  • Response : 리스트 [fno, foodMenu, foodPrice, vat]

 

- 음식 주문시 계좌 출금

  • URI :/api/food/purchase
  • Method : POST
  • Request : uno, fno, pageNo, pageEventTitle, pageEventView, crtTime
  • Response : 없음

 

 

2.  음식 메뉴, 계좌 정보 API 개발

(1) 사용자 계좌 조회 =>  (이 프로젝트에서는 1명의 회원만 조회)

 

<AccountController.java>

  @GetMapping("/api/account/{uno}")
  public AccountDto selectAccount(
      @PathVariable String uno) {
    return accountService.selectAccount(Long.parseLong(uno));
  }

 

<UserInfoService.java>

  public AccountDto selectAccount(Long uno) {
    return accountMapper.selectAccount(uno);
  }

 

 

 

 

 

(2) 계좌 입출금 서비스

 

<AccountController.java>

  @PostMapping("/api/account/change")
  public int InOutAccount(
      @RequestBody AccountVo accountVo) {
    return accountService.changeInOutMoneyAccount(accountVo);
  }

 

<AccountService.java>

  public int changeInOutMoneyAccount(AccountVo accountVo) {
    AccountDto accountDto = AccountDto.from(accountVo);
    int insertAccountStatus = accountMapper.changeInOutMoney(accountDto);
    System.out.println(insertAccountStatus);

    LogDto logDto = LogDto.fromAccountInOutMoney(accountVo);
    int insertLogStatus = logMapper.insertLog(logDto);
    System.out.println(insertLogStatus);

    return 1;
  }

 

 

- 프론트엔드에서 Request로 보낸 데이터들을 VO를 이용하여 받아올 값들을 추가해줍니다.

 

<AccountVo.java>


@Data
public class AccountVo {
  // 음식 구매시의 대한 정보
  Long uno;
  Long userMoney;

  // 로그에 담을 변수 (uno는 이미 있으니 생략)
  Long lno;
  Long pageNo;
  String pageEventTitle;
  String pageEventView;
  String crtTime;
}

 

 

 

- 계좌 입출금을 위해 프론트엔드에서 데이터를 보낸 값 중에 일부 값을 AccountDto 를 사용할 용도로 가공해줍니다.

 

<AccountDto.java>

@Data
@Builder // Builder :  Reqeust 값 중 일부분을 Dto에 생성을 위해 작업 진행
public class AccountDto {
...

  // 이 부분은 Vo에서 받아온 메소드를 dto에 넣기 위해 실행
  public static AccountDto from(AccountVo accountVo) {
    if (accountVo == null)
      return null;

    return AccountDto.builder()
        .uno(accountVo.getUno())
        .userMoney(accountVo.getUserMoney())
        .build();
  }
}

 

 

 

- 로그 데이터를 삽입할 Dto를 가공해 줍니다. (사용자가 진행한 로그 데이터 삽입)

- 이 경우, 계좌 입출금 한 내용을 로그 테이블에 저장 할 것을  빌드 해줌

 

<LogDto.java>

@Data
@Builder
public class LogDto {
...

  // 이 부분은 AccountInOutMoney Vo에서 받아온 메소드를 dto에 넣기 위해 실행
  public static LogDto fromAccountInOutMoney(AccountVo accountInOutMoneyVo) {
    if (accountInOutMoneyVo == null)
      return null;

    return LogDto.builder()
        .lno(accountInOutMoneyVo.getLno())
        .uno(accountInOutMoneyVo.getUno())
        .pageNo(accountInOutMoneyVo.getPageNo())
        .pageEventTitle(accountInOutMoneyVo.getPageEventTitle())
        .pageEventView(accountInOutMoneyVo.getPageEventView())
        .crtTime(accountInOutMoneyVo.getCrtTime())
        .build();
  }
}

 

 

 

 

 

(3) 음식 메뉴 전체 조회

 

<FoodController.java>

  @GetMapping("/api/food/")
  public List<FoodDto> selectFood() {
    return foodService.selectFood();
  }

 

<FoodService.java>

  public List<FoodDto> selectFood() {
    return foodMapper.selectFood();
  }

 

 

 

 

 

 

(4) 음식 주문시 계좌 출금

 

<FoodController.java>

  @PostMapping("/purchase")
  public int purchaseFoodAccount(
      @RequestBody PurchaseFoodOutMoneyVo purchaseFoodOutMoneyVo) {
    return foodService.PurchaseMoneyAccount(purchaseFoodOutMoneyVo);
  }

 

<FoodService.java>

  public int PurchaseMoneyAccount(PurchaseFoodOutMoneyVo purchaseFoodOutMoneyVo) {
    System.out.println(purchaseFoodOutMoneyVo);
    FoodPurchaseMoneyDto accountPurchaseMoneyDto = FoodPurchaseMoneyDto.from(purchaseFoodOutMoneyVo);
    int insertAccountStatus = accountMapper.purchaseOutMoney(accountPurchaseMoneyDto);
    System.out.println(insertAccountStatus);

    LogDto logDto = LogDto.fromPurchaseFoodOutMoneyVo(purchaseFoodOutMoneyVo);
    int insertLogStatus = logMapper.insertLog(logDto);
    System.out.println(insertLogStatus);
    return 1;
  }

 

 

 

- 프론트엔드에서 Request로 보낸 데이터들을 VO를 이용하여 받아올 값들을 추가해줍니다.

 

<PurchaseFoodOutMoneyVo.java>

@Data
public class PurchaseFoodOutMoneyVo {
  // 음식 구매시의 대한 정보
  Long uno;
  Long fno;

  // 로그에 담을 변수 (uno는 이미 있으니 생략)
  Long lno;
  Long pageNo;
  String pageEventTitle;
  String pageEventView;
  String crtTime;
}

 

 

- 여기서 FoodMapper.xml에서 질의어를 사용할 파라미터를 넣어줍니다.

 

<FoodPurchaseMoneyDto.java>

@Data
@Builder
public class FoodPurchaseMoneyDto {
  Long uno;
  Long fno;

  // 이 부분은 Vo에서 받아온 메소드를 dto에 넣기 위해 실행
  public static FoodPurchaseMoneyDto from(PurchaseFoodOutMoneyVo purchaseFoodOutMoneyVo) {
    if (purchaseFoodOutMoneyVo == null)
      return null;

    return FoodPurchaseMoneyDto.builder()
        .uno(purchaseFoodOutMoneyVo.getUno())
        .fno(purchaseFoodOutMoneyVo.getFno())
        .build();
  }
}

 

- 로그 데이터를 삽입할 Dto를 가공해 줍니다. (사용자가 진행한 로그 데이터 삽입)

- 이 경우, 음식 구매의 대한 로그 테이블에 저장할 dto를 만들어 빌드해줍니.

 

<LogDto.java>

@Data
@Builder
public class LogDto {
...

  // 이 부분은 AccountPurchaseMoney Vo에서 받아온 메소드를 dto에 넣기 위해 실행
  public static LogDto fromPurchaseFoodOutMoneyVo(PurchaseFoodOutMoneyVo purchaseFoodOutMoneyVo) {
    if (purchaseFoodOutMoneyVo == null)
      return null;

    return LogDto.builder()
        .lno(purchaseFoodOutMoneyVo.getLno())
        .uno(purchaseFoodOutMoneyVo.getUno())
        .pageNo(purchaseFoodOutMoneyVo.getPageNo())
        .pageEventTitle(purchaseFoodOutMoneyVo.getPageEventTitle())
        .pageEventView(purchaseFoodOutMoneyVo.getPageEventView())
        .crtTime(purchaseFoodOutMoneyVo.getCrtTime())
        .build();
  }
}

 

 

 

 

 

 

마치며, 이번 시간에는 음식메뉴, 계좌정보의 관련되어 인터페이스를 개발해 보았습니다.

추가적으로 로그 Table에 저장할 DTO를 넣어서 작업해봤습니다.

개인적으로는 VO는 프론트엔드 서버에 받을 데이터와 보낼 데이터로 사용 용도로 쓰고 있으며,

DTO 는 데이터 필드 연결하는 용도로 사용하고 있습니다.

DAO 같은 경우는 JDBC 연결을 할 때 쓰이는 것 중 하나이며, My-Batis를 활용하여 하고 있기 때문에 DAO를 활용 하지 않습니다.

 

이것은 프로젝트나 사람의 따라 쓰는 용도가 다를 수 있으며 개인적으로 프로젝트 구성할 때 주로 쓰이는 원칙 중 하나로 보시면 될 것 같습니다.

 

다음 시간에는 API를 만든 내용으로 프론트 엔드에 적용해보겠습니다.

 

 

 

 

 

 

728x90
반응형
LIST