1 계좌 생성 form 확인하기
2 계좌 생성 페이지 요청시 인증 로직 구현
3 SaveFormDto 설계 하기
4 AccountService 만들기
5 account.xml 설계
6 utils/Define 클래스 생성 코드 수정
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/view/layout/header.jsp"%>
<div class="col-sm-8">
<h2>계좌 생성 페이지(인증)</h2>
<h5>어서오세요 환영합니다</h5>
<div class="bg-light p-md-5 h-75">
<form action="/account/save-proc" method="post">
<div class="form-group">
<label for="number">계좌 번호:</label>
<input type="text" class="form-control" placeholder="생성 계좌 번호 입력" id="number" name="number" value="5555">
</div>
<div class="form-group">
<label for="password">계좌 비밀번호:</label>
<input type="password" class="form-control" placeholder="계좌 비밀번호 입력" id="password" name="password" value="1234">
</div>
<div class="form-group">
<label for="balance">입금 금액:</label>
<input type="text" class="form-control" placeholder="입금 금액" id="balance" name="balance" value="2000">
</div>
<button type="submit" class="btn btn-primary">계좌 생성</button>
</form>
</div>
<br>
</div>
<%@ include file="/WEB-INF/view/layout/footer.jsp"%>
AccountController 기능 추가
// 계좌 생성 페이지
@GetMapping("/save")
public String save() {
// 인증 검사 처리
User user = (User)session.getAttribute("principal");
if(user == null) {
throw new UnAuthorizedException("로그인 먼저 해주세요", HttpStatus.UNAUTHORIZED);
}
return "/account/saveForm";
}
AccountService 생성
package com.tenco.bank.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.tenco.bank.dto.SaveFormDto;
import com.tenco.bank.handler.exception.CustomRestfullException;
import com.tenco.bank.repository.interfaces.AccountRepository;
import com.tenco.bank.repository.model.Account;
@Service // Ioc 대상 + 싱글톤으로 관리
public class AccountService {
@Autowired // DI
private AccountRepository accountRepository;
/**
* 계좌 생성 기능
* @param saveFormDto
* @param principalId
*/
@Transactional
public void createAccount(SaveFormDto saveFormDto, Integer principalId) {
Account account = new Account();
account.setNumber(saveFormDto.getNumber());
account.setPassword(saveFormDto.getPassword());
account.setBalance(saveFormDto.getBalance());
account.setUserId(principalId);
int resultRowCount = accountRepository.insert(account);
if(resultRowCount != 1) {
throw new CustomRestfullException("계좌 생성 실패", HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
AccountRepository 확인
@Mapper // mybatis 연결 처리
public interface AccountRepository {
public int insert(Account account);
public int updateById(Account account);
public int deleteById(int id);
public List<Account> findAll();
public Account findById(int id);
}
account.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.tenco.bank.repository.interfaces.AccountRepository">
<insert id="insert">
insert into account_tb(number, password, balance, user_id, created_at)
values(#{number}, #{password}, #{balance}, #{userId}, now())
</insert>
<update id="updateById">
update account_tb set number = #{number}, password = #{password},
balance = #{balance}, user_id = #{userId} where id = #{id}
</update>
<delete id="deleteById">
delete from account_tb where id = #{id}
</delete>
<select id="findById" resultType="com.tenco.bank.repository.model.Account">
select * from account_tb where id = #{id}
</select>
<select id="findAll" resultType="com.tenco.bank.repository.model.Account">
select * from account_tb
</select>
</mapper>
AccountController 코드 완성
package com.tenco.bank.controller;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import com.tenco.bank.dto.SaveFormDto;
import com.tenco.bank.handler.exception.CustomPageException;
import com.tenco.bank.handler.exception.CustomRestfullException;
import com.tenco.bank.handler.exception.UnAuthorizedException;
import com.tenco.bank.repository.model.User;
import com.tenco.bank.service.AccountService;
import com.tenco.bank.utils.Define;
@Controller
@RequestMapping("/account")
public class AccountController {
@Autowired
private HttpSession session;
@Autowired
private AccountService accountService;
/**
* 계좌 목록 페이지
* @return 목록 페이지 이동
*/
@GetMapping({"/list", "/"})
public String list() {
//인증검사 처리
User principal = (User)session.getAttribute(Define.PRINCIPAL);
if(principal == null) {
throw new UnAuthorizedException("로그인 먼저 해주세요", HttpStatus.UNAUTHORIZED);
}
return "/account/list";
}
// 출금 페이지
@GetMapping("/withdraw")
public String withdraw() {
return "/account/withdrawForm";
}
// 입금 페이지
@GetMapping("/deposit")
public String deposit() {
return "/account/depositForm";
}
// 이체 페이지
@GetMapping("/transfer")
public String transfer() {
return "/account/transferForm";
}
// 계좌 생성 페이지
@GetMapping("/save")
public String save() {
// 인증 검사 처리
User user = (User)session.getAttribute(Define.PRINCIPAL);
if(user == null) {
throw new UnAuthorizedException("로그인 먼저 해주세요", HttpStatus.UNAUTHORIZED);
}
return "/account/saveForm";
}
/**
* 계좌 생성
* 인증검사
* 유효성 검사 처리 - 0원 입력 가능, 마이너스 입력 불가
* @param saveFormDto
* @return 계좌 목록 페이지
*/
@PostMapping("/save-proc")
public String saveProc(SaveFormDto saveFormDto) {
User user = (User)session.getAttribute(Define.PRINCIPAL);
if(user == null) {
throw new UnAuthorizedException("로그인 먼저 해주세요", HttpStatus.UNAUTHORIZED);
}
// 유효성 검사 하기
if(saveFormDto.getNumber() == null ||
saveFormDto.getNumber().isEmpty()) {
throw new CustomRestfullException("계좌번호를 입력해주세요", HttpStatus.BAD_REQUEST);
}
if(saveFormDto.getPassword() == null ||
saveFormDto.getPassword().isEmpty()) {
throw new CustomRestfullException("계좌 비밀번호를 입력해주세요", HttpStatus.BAD_REQUEST);
}
if(saveFormDto.getBalance() == null ||
saveFormDto.getBalance() < 0 ) {
throw new CustomRestfullException("잘못된 금액 입니다", HttpStatus.BAD_REQUEST);
}
accountService.createAccount(saveFormDto, user.getId());
return "redirect:/account/list";
}
// 계좌 상세 보기 페이지
@GetMapping("/detail")
public String detail() {
return "";
}
}
현재 계좌번호 유니크 제약 해결 하지 않은 상태
Define 클래스 생성하기
package com.tenco.bank.utils;
public class Define {
// 서버 프로그램에서 상태값을 변경할 수 있는 변수는 절대 지양
public final static String PRINCIPAL = "principal";
}
'Spring boot > spring boot 앱 만들어 보기 2 단원' 카테고리의 다른 글
bank app - 출금 처리 (0) | 2023.04.19 |
---|---|
bank app - 계좌 목록 보기 (0) | 2023.04.19 |
bank app - 로그인 처리 (0) | 2023.04.19 |
bank app - 회원가입(트랜잭션처리) (0) | 2023.04.19 |
bank app - Exception Handler (0) | 2023.04.18 |