2023. 10. 28. 23:44ㆍGithub 프로젝트/음식점 포스 프로그램
지난 시간에는 SQL문 설계를 진행을 하였고,
이번 시간 부터 프론트 엔드 개발자에게 필요로 하는 고객 정보/계좌처리/음식메뉴/이벤트 로그 인터페이스 개발을 진행하겠습니다.
github: https://github.com/BerkleyLim/foodstor_pos
다음은 사용할 인터페이스를 설계를 우선으로 할 것이기 때문에, 요구사항에 알맞는 인터페이스 기반으로 하여 먼저 설계를 하여 진행을 할 것인데, 각각 사용할 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 단까지 진행하도록 하겠습니다.