nft 커뮤니티 프로젝트에서는 회원들이 게시글 작성 / 댓글 작성으로 포인트를 적립하거나 현금으로 충전하여 nft사진을 구매할 수 있다.
member_table에 m_point 추가
point_table 만들기 : 왜 있어야 하냐? 포인트 이력을 조회하기 위해!
게시글 작성(50p), 댓글 작성(10p) 적립
포인트 충전 - 카카오페이 api 활용
database
create table member_table(
m_number bigint auto_increment,
m_id varchar(20) not null,
m_password varchar(20) not null,
m_name varchar(20) not null,
m_email varchar(100),
m_phone varchar(100),
m_likegame varchar(50) not null,
m_profilename varchar(100) default "기본프로필사진.png",
m_point bigint default 10,
constraint primary key(m_number),
constraint unique key(m_id)
);
create table point_table (
p_number bigint auto_increment,
m_id varchar(20),
p_point int,
p_pointdate datetime not null,
p_type varchar(20),
constraint primary key (p_number),
constraint foreign key(m_id) references member_table(m_id) on delete cascade
);
게시글 / 댓글 작성 시 포인트 적립 + 이력
serviceImpl
//board serviceImpl 덤으로 파일 저장하기
@Override
public void boardSave(BoardDTO board)throws IllegalStateException, IOException{
MultipartFile b_file = board.getB_file();
String b_filename = b_file.getOriginalFilename();
b_filename = System.currentTimeMillis() + "-" + b_filename;
System.out.println("b_filename: " + b_filename);
// 파일 저장하기
String savePath = "D:\\development_Phl\\source\\spring\\NftGameCommunity\\src\\main\\webapp\\resources\\board_uploadfile\\"+b_filename;
if(!b_file.isEmpty()) {
b_file.transferTo(new File(savePath));
}
board.setB_filename(b_filename);
br.save(board);
br.boardPoint(board.getM_id(),50,"게시물 적립");
}
//comment serviceImpl
@Override
public void commentSave(CommentDTO comment) {
cr.commentSave(comment);
cr.commentPoint(comment.getM_id(),10,"댓글작성 적립");
}
repository - 포인트 적립 이력 / 멤버 포인트 업데이트
//board
public void boardPoint(String m_id, int p_point, String p_type) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("m_id", m_id);
map.put("p_point", p_point);
map.put("p_type", p_type);
sql.insert("point.pointSave",map);
sql.update("Member.updatePoint", map);
}
//comment
public void commentPoint(String m_id, int p_point, String p_type) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("m_id", m_id);
map.put("p_point", p_point);
map.put("p_type", p_type);
sql.insert("point.pointSave",map);
sql.update("Member.updatePoint", map);
}
mapper
//member 포인트 업데이트
<update id="updatePoint" parameterType="java.util.HashMap">
update member_table set m_point = m_point + #{p_point}
where m_id = #{m_id}
</update>
//point 이력 insert
<insert id="pointSave" parameterType="java.util.HashMap">
insert into point_table(p_point, p_type, p_pointdate, m_id)
values(#{p_point},#{p_type},now(),#{m_id})
</insert>
아쉬운 점 : map말고 dto로 가져올 수 있었나? 생각해보기