할 게 두 가지다.
1. 투표기능에 대한 DB연결
2. 로그인/회원가입에 대한 코드 리팩토링 (이것도 다 개발된 게 아니라 약간 수정해야함, 유효성검사와 예외처리도 해야)
뭐부터할까 하다가 1번은 그래도 돌아가긴 하니까 2번을 하기로 결정함
그리고.. 서비스에서 JDBC 템플릿을 쓰는 것을 권장하지 않으므로 이를 분리해야한다. 이를 리팩토링의 기준으로 삼으면 좋을듯하다.
우선은...

투표창은 이렇게 생겼고..
API 명세서부터 다시 짜야할 것 같다.
0. 관리자 상점등록
먼저 투표기능을 위해서는 '투표할 상점'이 필요하다.

우선 대충 이정도의 값만 받는다고하고..
이러저러 코드를 짜서 테스트를 돌려보니

띠용?
알고보니 DB에서 이름과 좌표를 통해서 입력된 가게와 같은 가게가 있는지 검사하는데, 이 때 DB에 같은 가게가 1개 이상일 경우 true로 반환되게 해놨다. 당연히 true일 때만 등록이 가능하고..
또 몇가지 어이없는 오류들도 수정했다.
JDBC를 사용 중이지만 JPA @Entity 를 통해 기본 테이블을 세팅하는데 거기서 컬럼명이 틀리지 않게 확인해야하고..
STORE 테이블에 저장해야하는데 Member 테이블에 저장 중이거나...
두 번에 한 번 꼴로 빈이 생성되지 않았다고 오류를 뱉으니 환장할 노릇


겨우 성공함
이렇게 오래 걸리면 안되는데;;;

대충 테스트
이게 7월 말이었고..
8월 되어서 JPA를 배웠으므로 JPA로 교체했다.
public interface StoreRepositoryInterface extends CrudRepository<Store, String> {
List<Store> findByStoreName(String storeName);
Integer countByStoreLocation(String storeLocation);
}
레포지토리가 이렇게 쉬워지다니..
그리고 상점DB에 들어갈 내용도 수정했다.




성공
1. 관리자가 투표후보에 상점등록
관리자가 상점에 투표지를 등록하도록하는 기능.
어떤 것을 값으로 받으려고 생각해보니까.. 상점이름과 주소 정도면 되지 않을까?


STORE에는 상점들이, STORE_FOR_VOTE에는 투표게시판에 보일 상점들이 들어간다.

성공...인데 중복저장 기능도 추가해야했다.

성공
public ResponseEntity<ResponseDTO> storeRegisterInVote(StoreRegisterInVoteRequestDTO storeRegisterInVoteRequestDTO) {
String location = storeRegisterInVoteRequestDTO.getStoreLocation();
String storeName = storeRegisterInVoteRequestDTO.getStoreName();
Integer countInDB = storeRepository.countByStoreNameAndStoreLocation(storeName, location);
Integer count = storeForVoteRepository.countByStoreNameAndStoreLocation(storeName, location);
if (count == 0) {
if (countInDB == 1) {
Store store = storeRepository.findByStoreName(storeName).get(0);
StoreForVote storeForVote = StoreForVote.builder()
.storeName(storeName)
.storeLocation(location)
.storeImg(store.getStoreImg())
.storeInfoOneline(store.getStoreInfoOneline())
.build();
storeForVoteRepository.save(storeForVote);
ResponseDTO responseDTO = ResponseDTO.builder()
.status(200)
.message("성공")
.build();
return ResponseEntity.ok(responseDTO);
} else if (countInDB == 0) {
ResponseDTO responseDTO = ResponseDTO.builder()
.status(400)
.message("가게 정보가 없습니다.")
.build();
return ResponseEntity
.status(HttpStatus.BAD_REQUEST)
.body(responseDTO);
} else {
ResponseDTO responseDTO = ResponseDTO.builder()
.status(500)
.message("가게 정보가 여러 개입니다. 하나만 남기고 삭제해주세요.")
.build();
return ResponseEntity
.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(responseDTO);
}
} else {
ResponseDTO responseDTO = ResponseDTO.builder()
.status(500)
.message("이미 등록된 가게입니다.")
.build();
return ResponseEntity
.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(responseDTO);
}
}
JPA 쓰니까 확실히 편하긴 펺하다.
투표에 등록하기

같이 백엔드 협업하시는 분께서 보내주신 요구사항이다. 하나하나 진행하면 좋겠다.

근데 우리 팀이 이전에 결정한 방식과는 약간 차이가 있어서.. 문의를 드려봤다.
우선은 저대로 개발할 예정이다. 저 위에서 진행한 코드는 저장할 가게의 이름과 주소를 입력하면 가게 DB에 있는지 확인한 후에 투표용DB에 가게 DB에서 가져온 정보를 저장한다.
정보는 StoreRegisterInVoteRequestDTO에 담아서 StoreRegisterInVoteService의 storeRegisterInVote 메서드에 전달하면, 저장된다. StoreRegisterInVoteRequestDTO는 /votes/stores 에서 body에 POST 요청을 담아서 접근할 수 있다. 메서드를 직접 호출할 수 있고..
투표 페이지 접속
우선 접속부터하면 투표가게들이 있는 DB에서 목록을 긁어와야하니까 그것부터 만듭시다.


옆에거는 음악 듣는건데 다시 캡처하기 귀찮아서 그냥 넣었다

기타서버에러는 전역Exception으로 처리할 예정이다.
사실 뼈대는 세워놔서 거기에 맞게만 수정하면 된다.
가장먼저 재학생여부를 가르는 것. 헤더에 JWT토큰이 있는지 여부만 따지면 된다.
public ResponseEntity<ResponseDTO> VoteService(String secret, HttpServletRequest request, voteRequstDTO voteRequestDTO) {
MemberDTO memberDTO = jwtFilter.getTokenFromHeader(secret, request).getMemberInfo();
if (memberDTO != null) {
boolean isInToken = jwtFilter.getTokenFromHeader(secret, request).getValidity(); //
if (isInToken) {
String identifier = memberDTO.getIdentifier();
여기서 getTokenFromHeader 메서드를 호출하면 자동으로 헤더에서 토큰을 빼고 토큰의 유효성검사까지 다 진행해주는데 isInToken을 통해 한 번 더 값을 조회하고 있으므로 제거했다. 어차피 유효성검사를 통과하지 못하면 memberDTO는 null로 들어오기 때문에...
우선은 이정도까지만..
되게 짧은 것 같지만 짧은거 맞다. 오늘 늦게 일어나기도했고 내일 아침에 나가려면 자야해서.. 내일은 알바에 안가니까 어느정도 진도를 나갈 수 있을 것이라고 생각된다.
해야할 것
관리자 기능에 권한 확인하기
'팀 프로젝트 > [2025][GDG]홍대 맛집 아카이빙 프로젝트' 카테고리의 다른 글
| [GDG]홍대 맛집 아카이빙 프로젝트 #14 - 기타 투표기능 개발 (4) | 2025.08.08 |
|---|---|
| [GDG]홍대 맛집 아카이빙 프로젝트 #13 - 투표기능 (6) | 2025.08.06 |
| [GDG] 홍대 맛집 아카이빙 프로젝트 #11 - 로그인/회원가입 마무리 (진) (2) | 2025.07.31 |
| [GDG] 개발코스 4주차 WIL (5) | 2025.07.29 |
| [GDG]홍대 맛집 아카이빙 프로젝트 #10.1 - H2 DB 강화하기 (2) | 2025.07.27 |