Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 프로세스 생성
- multiparfile데이터
- 스프링요청반응
- 공유기작동방식
- 클라이언트요청반응
- HttpServlet
- 동등성동일성
- biblecash
- rest api 검증
- rest api
- 동기비동기블로킹논블로킹
- Wrapper class
- java enum
- equals
- 데이터베이스파서
- 옵티마이저
- 래퍼클래스
- fcmv1
- 옵티마저
- 왜불변객체인가
- 검증 실패 예외처리
- DispatcherServlet
- fcm성능비교
- multipart바인딩
- httpservlet기술
- 불변객체
- 중첩클래스
- 디스패처서블릿
- fcm데이터구조
- HTTP프로토콜
Archives
- Today
- Total
개발은 아름다워
[ bible Cash ] 로그인 시, 아이디 존재하지 않는 경우 처리, 추가로 읽은 말씀 기능 본문
MemberController
@PostMapping("/login")
public String login(@ModelAttribute LoginForm loginForm, Model model, HttpSession session){
log.info("loginForm : {}",loginForm);
Member findMember = memberRepository.findByUserId(loginForm.getUserId());
if(findMember == null){
model.addAttribute("loginError","해당 아이디는 존재하지 않습니다.");
return "index";
}
session.setAttribute("member",findMember);
model.addAttribute("id",findMember.getUserId());
return "redirect:/home";
}
index.html
<form th:action="@{/login}" method="post">
<!-- 아이디 입력란 -->
<div class="form-group">
<label for="userId">아이디</label>
<input type="text" id="userId" name="userId" class="form-control"
placeholder="아이디를 입력하세요" required>
<!-- 오류 메시지 표시 -->
<div th:if="${loginError}" class="text-danger mt-2">
<i class="fas fa-exclamation-circle"></i> <span th:text="${loginError}"></span>
</div>
</div>
<button type="submit" class="btn btn-primary btn-block">로그인</button>
</form>
hom.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>오늘의 말씀</title>
<link rel="stylesheet" th:href="@{/css/style.css}">
</head>
<body>
<div class="container">
<div class="calendar-header">
<div class="current-month" id="yearText">2025년</div>
<select id="monthSelect" class="dropdown"></select>
<button class="nav-button" id="todayButton">오늘</button>
</div>
<div id="daysOfWeek"></div>
<div id="calendar"></div>
<div class="footer">
<!-- '오늘의 말씀' 버튼을 link로 감싸지 않고, 클릭 이벤트로 처리하도록 수정 -->
<button class="verse-button" id="verseButton">오늘의 말씀</button>
<h2>말씀 읽은 순위</h2>
<div th:each="entry : ${groupedRanking}">
<span th:text="|${entry.key}등 |"></span>
<!-- 순위 내 멤버들의 이름(그룹) 형식으로 출력 -->
<span th:each="member, iterStat : ${entry.value}">
<span th:text="${member.name} + '(' + ${member.memberGroup} + ')'"></span>
<!-- 마지막 멤버가 아니면 쉼표 추가 -->
<span th:if="!${iterStat.last}">, </span>
</span><br/>
</div>
<h2>그룹별 읽은 장 수</h2>
<div th:each="groupReadCount : ${groupReadCountDtos}">
<span th:text="${groupReadCount.memberGroup} + ' 총 ' + ${groupReadCount.totalReadCount} + '장'"></span>
<br/>
</div>
<h3>추가로 읽은 말씀</h3>
<form id="additionalVerseForm" th:action="@{/add}" method="post">
<div class="additional-verse">
<input type="number" id="additionalVerseInput" name="additionalVerse" class="number-input" required>
<button type="submit" class="verse-button" id="additionalVerseButton">추가</button>
</div>
</form>
</div>
</div>
<!-- JavaScript -->
<script th:src="@{/js/calendar.js}"></script>
</body>
</html>
MemberController
@PostMapping("/add")
public String addAdditionalVerse(@RequestParam("additionalVerse") int additionalVerse,HttpSession session) {
log.info("추가 읽은 구절 수: {}", additionalVerse);
Member member = (Member)session.getAttribute("member");
log.info("member : {}",member.getName());
memberRepository.incrementReadCount(member.getIdx(),additionalVerse);
return "redirect:/home"; // 홈 화면으로 리디렉트
}
MemberRepository
@Modifying
@Transactional
@Query("UPDATE Member m SET m.readCount = COALESCE(m.readCount, 0) + :increment WHERE m.idx = :idx")
void incrementReadCount( Long idx, int increment);
'프로젝트' 카테고리의 다른 글
[ bible Cash ] stmp를 이용한 서버 종료 이메일 받기 (0) | 2025.02.05 |
---|---|
[ bible Cash ] 주간 읽은 양 랭킹 기능 추가 (1) | 2025.02.05 |
[ bible Cash ] 개인 랭킹, 그룹별 랭킹, 더 읽은 말씀 기능 추가 (0) | 2025.02.04 |
[ biblecash ] 스케쥴러 코드 변경 (0) | 2025.02.03 |
[ bible cash ] 각 계층별 코드 (1) | 2025.01.17 |