[9] 음식점 포스 프로그램 - 백엔드 인터페이스 개발(3) - 인터페이스 개발(1), Mapper와 DTO 설계

2023. 10. 28. 23:44Github 프로젝트/음식점 포스 프로그램

728x90
반응형
SMALL

지난 시간에는 SQL문 설계를 진행을 하였고,

이번 시간 부터 프론트 엔드 개발자에게 필요로 하는 고객 정보/계좌처리/음식메뉴/이벤트 로그 인터페이스 개발을 진행하겠습니다.

 

 

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

 

 

다음은 사용할 인터페이스를 설계를 우선으로 할 것이기 때문에, 요구사항에 알맞는 인터페이스 기반으로 하여 먼저 설계를 하여 진행을 할 것인데, 각각 사용할 SQL문 쿼리를 기반으로 하여 Mapper와 DTO를 설계를 먼저 진행합니다. 이후, controller와 Service 개발을 진행합니다.

 

 

 


 

1. 고객 정보 SQL문 설계 내역

- 회원 정보 조회

select * from T_USER;

 

- 회원 정보 삽입

insert into t_user
(user_name, user_age, user_sex, user_phone, user_number, user_card_password)
values ('poll', 29, '남', '01011111111', '880401', '1111');

 

- 회원 정보 삭제 (초기화 시)

delete from T_USER 
-- where uno = {회원인덱스}

 

- 사용자 생성시, uno 값이 null 값으로 출력 되므로, 생성 이후 uno에 데이터를 넣기 위해 추가

select uno from T_USER order by uno desc limit 1;

 

2. 고객 정보 Mapper 설계 

- Spring Boot를 기반으로 Mapper 설계를 진행해 보겠습니다.

- 현재, 조회, 삽입, 삭제(실제로 1개의 정보만 가지고 사용 할 것이기 때문에, Mapper에 아래와 같이 설계합니다.

 

<UserInfoMapper.xml>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "//mybatis.org/DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.berkley.food.store.pos.machine.foodback.mapper.UserInfoMapper">
  <select id="selectUserInfo" resultType="UserInfoDto">
    select * from T_USER
  </select>
  
  <insert id="insertUserInfo">
    insert into T_USER
      (user_name, user_age, user_sex, user_phone, user_number, user_card_password)
    values (#{userName}, #{userAge}, #{userSex}, #{userPhone}, #{userNumber}, #{userCardPassword})
  </insert>

  <delete id="deleteUserInfo">
    delete from T_USER
  </delete>
  <!-- where uno = #{uno} -->


  <!-- 사용자 생성 시 한정으로 가장 최근 생성 된 테이블 중 uno 마지막 로그 출력 -->
  <select id="selectLastRowUno" resultType="Long">
    select uno from T_USER order by uno desc limit 1;
  </select>
</mapper>

 

- My-Batis 설계 이후, Mapper 인터페이스를 만들어 줍니다.

<UserInfoMapper.java>

@Repository
@Mapper
public interface UserInfoMapper {
  List<UserInfoDto> selectUserInfo();

  int insertUserInfo(UserInfoDto userInfoDto);

  int deleteUserInfo();

  // 사용자 생성 시 한정으로 마지막 로그 출력
  Long selectLastRowUno();
}

 

 

3. 고객 정보 DTO 설계

- 고객 정보에 사용할 Field 들을 설계하겠습니다.

@Data
public class UserInfoDto {
  Long uno;
  String userName;
  Long userAge;
  String userSex;
  String userPhone;
  String userNumber;
  String userCardPassword;
}

 


 

4. 음식 메뉴 SQL문 설계 내역

- 음식 메뉴 조회

select * from T_Food

 

 

5. 음식 메뉴 Mapper 설계 

- Spring Boot를 기반으로 Mapper 설계를 진행해 보겠습니다.

- 현재 실제로 조회 내역밖에 없다고 판단을 하여 작성하였습니다.

 

<FoodMapper.xml>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "//mybatis.org/DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.berkley.food.store.pos.machine.foodback.mapper.FoodMapper">
  <select id="selectFood" resultType="FoodDto">
    select * from T_Food
  </select>

  
</mapper>

 

<FoodMapper.java>

@Repository
@Mapper
public interface FoodMapper {
  List<FoodDto> selectFood();
}

 

 

6. 음식 정보 DTO 설계

- 음식 정보에 사용할 Table 그대로 넣어줍니다.

 

<FoodDto.java>

@Data
public class FoodDto {
  Long fno;
  String foodMenu;
  int foodPrice;
  int vat;
}

 

<FoodPurchaseMoneyDto.java>

- 이부분은 Mapper 인터페이스에서 PurchaseOutMoney, 즉 음식 구매시 출금 처리를 위한 용도로 작성

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

}

 

 

 


 

7. 계좌 정보 SQL문 설계 내역

- 계좌 정보 조회

select * from T_ACCOUNT

 

- 계좌 정보 삭제 (초기화 시 만 적용)

delete from T_ACCOUNT
-- where uno = {회원인덱스}

 

- 계좌 정보 삽입

insert into t_account (uno, user_money) values (1, 100000);

 

- 계좌 정보 수정 (가격 입출금)

update  T_ACCOUNT
set user_money = ((select user_money from T_ACCOUNT where uno=1) -5500)
where uno = 1;

 

- 계좌 정보 수정 (음식 주문)

update  T_ACCOUNT
set user_money = (
     (select user_money from T_ACCOUNT where uno=1)
   - (select FOOD_PRICE from T_FOOD where fno=1)
   - (select VAT from T_FOOD where fno=1)
)
where uno = 1;

 

 

8. 계좌 정보 Mapper 설계 

- Spring Boot를 기반으로 Mapper 설계를 진행해 보겠습니다.

- 음식 구매 및 계좌 입출금을 처리 하기 위해 추가로 작업 진행

 

<AccountMapper.xml>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "//mybatis.org/DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.berkley.food.store.pos.machine.foodback.mapper.AccountMapper">
  <select id="selectAccount" resultType="AccountDto">
    select * from T_ACCOUNT where uno = #{uno}
  </select>
  
  <insert id="insertAccount">
    insert into T_ACCOUNT
      (uno, user_money)
    values (#{uno}, #{userMoney})
  </insert>

  <delete id="deleteAccount">
    delete from T_ACCOUNT
  </delete>
  <!-- where uno = #{uno} -->

  <!-- Front End에서 계산하여 user_money 값은 입출금 결과 값을 받아서 그냥 직접적으로 변경하는 형식으로 변경 -->
  <!-- set user_money = ((select user_money from T_ACCOUNT where uno=1) - (#{userMoney})) 사용 안함 -->
  <update id="changeInOutMoney">
    update  T_ACCOUNT
      set user_money = (#{userMoney})
    where uno = #{uno};
  </update>

  <update id="purchaseOutMoney">
    update  T_ACCOUNT
      set user_money = (
          (select user_money from T_ACCOUNT where uno=#{uno})
        - (select FOOD_PRICE from T_FOOD where fno=#{fno})
        - (select VAT from T_FOOD where fno=#{fno})
      )
    where uno = #{uno};
  </update>


</mapper>

 

<AccountMapper.java>

@Repository
@Mapper
public interface AccountMapper {
  // List<AccountDto> selectAccount();
  AccountDto selectAccount(Long uno);

  int insertAccount(AccountDto accountDto);

  int deleteAccount();

  int changeInOutMoney(AccountDto accountDto);

  int purchaseOutMoney(AccountPurchaseMoneyDto accountPurchaseMoneyDto);

}

 

 

9. 계좌 정보 DTO 설계

- 계좌 정보에 사용할 Table 그대로 넣어줍니다.

 

<AccountDto.java>

@Data
public class AccountDto {
  Long ano;
  Long uno;
  Long userMoney;
}

 

 


10. 로그 관련 SQL 설계문 (현재, 작업 내용 보는 용도로 사용)

- 사용자 전용 로그 조회

select * from T_LOG;

 

- 사용자 전용 로그 삽입

insert into t_log 
(uno, page_no, page_event_title, page_event_view, crt_time) 
values 
(1, 1, '로그인', '로그인 진입', now());

 

- 사용자 전용 로그 삭제 (초기화시)

delete from T_LOG
-- where lno = 1
;

 

 

11. 사용자가 작업한 이벤트 관련 로그 Mapper 설계 

- Spring Boot를 기반으로 Mapper 설계를 진행해 보겠습니다.

- 실제 운영에서는 필요로 하지 않고, 주로 관리자에서 사용하는 용도지만, 이벤트를 보기 위해 설

 

<LogMapper.xml>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "//mybatis.org/DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.berkley.food.store.pos.machine.foodback.mapper.LogMapper">
  <select id="selectLog" resultType="LogDto">
    select * from T_LOG
  </select>
  
  <insert id="insertLog">
    insert into t_log 
    (uno, page_no, page_event_title, page_event_view, crt_time) 
    values 
    (#{uno}, #{pageNo}, #{pageEventTitle}, #{pageEventView}, now());
  </insert>

  <delete id="deleteLog">
    delete from T_LOG
  </delete>
  <!-- where uno = #{uno} -->
</mapper>

 

<LogMapper.java>

@Repository
@Mapper
public interface LogMapper {
  List<LogDto> selectLog();

  int insertLog(LogDto logDto);

  int deleteLog();
}

 

 

12.사용자가 작업한 이벤트 관련 로그 DTO 설계

- 로그 Table 에 사용할 필드를 넣어줍니다.

 

<FoodDto.java>

@Data
public class LogDto {
  Long lno;
  Long uno;
  Long pageNo;
  String pageEventTitle;
  String pageEventView;
  String crtTime;
}

 

 

이번 시간에 개발 전 미리 설계 작업을 진행 하였습니다.

Front-End 개발자에게 보낼 인터페이스 개발을 Service 단이랑 Controller 단까지 진행하도록 하겠습니다.

 

 

 

 

728x90
반응형
LIST