From b6af4b90e4b0d7ecf8a93fa780afbabbabc418e9 Mon Sep 17 00:00:00 2001 From: jhchoi57 <46276276+jhchoi57@users.noreply.github.com> Date: Fri, 27 Jan 2023 08:33:39 +0900 Subject: [PATCH] =?UTF-8?q?[=EC=B5=9C=EC=A3=BC=ED=98=95]=2017=EC=9D=BC?= =?UTF-8?q?=EC=B0=A8=20PR=20(#195)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * FEAT : jdbc 구현 및 테스트 * FEAT : 회원가입 기능 db 연동 * FEAT : 로그인 기능 db 연동 * FEAT : list 기능 db 연동 * FEAT : Html controller, htmlservice Autowired 처리 * FEAT : qna 등록 기능 구현 * FEAT : qna 홈페이지 출력 기능 구현 * FEAT : qna에 글쓴 시간 추가 * FEAT : 한줄 게시판이므로 qna title 삭제 * FEAT : 로그인한 사람만 질문 가능 할 수 있게 구현 * FEAT : 로그아웃 구현 * REFORMAT CODE * FEAT : qna 날짜순 정렬 구현 * REFACTOR : 필요없는 것 삭제 * FIX : logback.xml 이름 수정 --- build.gradle | 3 + .../java/bejavawebserver/SpringConfig.java | 24 +++ .../bejavawebserver/WebserverApplication.java | 6 +- .../controller/HomeController.java | 5 +- .../controller/HtmlController.java | 31 ++- .../controller/QnaController.java | 25 +++ .../controller/UserController.java | 34 +++- src/main/java/bejavawebserver/model/Qna.java | 22 ++ .../java/bejavawebserver/model/QnaForm.java | 17 ++ .../repository/JdbcRepository.java | 191 ++++++++++++++++++ ...yRepository.java => MemoryRepository.java} | 4 +- .../bejavawebserver/service/HtmlService.java | 12 +- .../bejavawebserver/service/ListService.java | 14 +- .../bejavawebserver/service/LoginService.java | 22 +- .../service/LogoutService.java | 12 ++ .../bejavawebserver/service/QnaService.java | 24 +++ .../service/SignUpService.java | 12 +- .../{logback.xml => logback-spring.xml} | 0 src/main/resources/templates/index.html | 31 +-- src/main/resources/templates/qna/form.html | 8 +- src/main/resources/templates/qna/show.html | 2 +- src/main/resources/templates/user/form.html | 2 +- src/main/resources/templates/user/list.html | 4 +- src/main/resources/templates/user/login.html | 2 +- .../templates/user/login_failed.html | 2 +- .../resources/templates/user/profile.html | 2 +- .../repository/JdbcRepositoryTest.java | 28 +++ 27 files changed, 456 insertions(+), 83 deletions(-) create mode 100644 src/main/java/bejavawebserver/SpringConfig.java create mode 100644 src/main/java/bejavawebserver/controller/QnaController.java create mode 100644 src/main/java/bejavawebserver/model/Qna.java create mode 100644 src/main/java/bejavawebserver/model/QnaForm.java create mode 100644 src/main/java/bejavawebserver/repository/JdbcRepository.java rename src/main/java/bejavawebserver/repository/{memoryRepository.java => MemoryRepository.java} (93%) create mode 100644 src/main/java/bejavawebserver/service/LogoutService.java create mode 100644 src/main/java/bejavawebserver/service/QnaService.java rename src/main/resources/{logback.xml => logback-spring.xml} (100%) create mode 100644 src/test/java/bejavawebserver/repository/JdbcRepositoryTest.java diff --git a/build.gradle b/build.gradle index b3b525f0..a3dd9d8b 100644 --- a/build.gradle +++ b/build.gradle @@ -24,6 +24,9 @@ dependencies { // mysql implementation group: 'com.mysql', name: 'mysql-connector-j', version: '8.0.32' + + // jdbc + implementation 'org.springframework.boot:spring-boot-starter-jdbc' } tasks.named('test') { diff --git a/src/main/java/bejavawebserver/SpringConfig.java b/src/main/java/bejavawebserver/SpringConfig.java new file mode 100644 index 00000000..f397209d --- /dev/null +++ b/src/main/java/bejavawebserver/SpringConfig.java @@ -0,0 +1,24 @@ +//package bejavawebserver; +// +//import bejavawebserver.repository.JdbcRepository; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +//import javax.sql.DataSource; +// +// +//@Configuration +//public class SpringConfig { +// private DataSource dataSource; +// +// @Autowired +// public SpringConfig(DataSource dataSource){ +// this.dataSource = dataSource; +// } +// +// @Bean +// public JdbcRepository jdbcRepository(){ +// return new JdbcRepository(dataSource); +// } +//} diff --git a/src/main/java/bejavawebserver/WebserverApplication.java b/src/main/java/bejavawebserver/WebserverApplication.java index e15e927b..794dacbd 100644 --- a/src/main/java/bejavawebserver/WebserverApplication.java +++ b/src/main/java/bejavawebserver/WebserverApplication.java @@ -6,8 +6,8 @@ @SpringBootApplication public class WebserverApplication { - public static void main(String[] args) { - SpringApplication.run(WebserverApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(WebserverApplication.class, args); + } } diff --git a/src/main/java/bejavawebserver/controller/HomeController.java b/src/main/java/bejavawebserver/controller/HomeController.java index 285db67f..0b6d6ce3 100644 --- a/src/main/java/bejavawebserver/controller/HomeController.java +++ b/src/main/java/bejavawebserver/controller/HomeController.java @@ -2,12 +2,11 @@ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.SessionAttribute; @Controller public class HomeController { @GetMapping("/") - public String home(){ - return "index"; + public String home() { + return "redirect:/index.html"; } } diff --git a/src/main/java/bejavawebserver/controller/HtmlController.java b/src/main/java/bejavawebserver/controller/HtmlController.java index 471cc3d3..11a9a6ce 100644 --- a/src/main/java/bejavawebserver/controller/HtmlController.java +++ b/src/main/java/bejavawebserver/controller/HtmlController.java @@ -1,23 +1,26 @@ package bejavawebserver.controller; import bejavawebserver.model.User; -import bejavawebserver.repository.memoryRepository; import bejavawebserver.service.HtmlService; import bejavawebserver.service.ListService; import bejavawebserver.service.LoginService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import bejavawebserver.service.QnaService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; @Controller public class HtmlController { - //@GetMapping("/index.html") + @Autowired + HtmlService htmlService; + @Autowired + ListService listService; + @Autowired + QnaService qnaService; @GetMapping(value = { "/index.html", @@ -27,25 +30,31 @@ public class HtmlController { "/user/login.html", "/user/login_failed.html", "/user/profile.html"}) - public String indexHtml(HttpServletRequest httpServletRequest, Model model){ + public String indexHtml(HttpServletRequest httpServletRequest, Model model) { HttpSession session = httpServletRequest.getSession(false); String uri = httpServletRequest.getRequestURI(); + if (uri.equals("/index.html")) qnaService.makeQnaList(model); + // 로그인 상태인 경우 - if(LoginService.isLogin(session)) { - return HtmlService.makeLoginView(model, uri, (User)session.getAttribute("user")); + if (LoginService.isLogin(session)) { + return htmlService.makeLoginView(model, uri, (User) session.getAttribute(session.getId())); } // 로그인 상태가 아닌 경우 - return HtmlService.makeNotLoginView(model, uri); + if (uri.equals("/qna/form.html")) return "redirect:/user/login.html"; + return htmlService.makeNotLoginView(model, uri); } @GetMapping("/user/list.html") - public String listHtml(HttpServletRequest httpServletRequest, Model model){ + public String listHtml(HttpServletRequest httpServletRequest, Model model) { HttpSession session = httpServletRequest.getSession(false); String uri = httpServletRequest.getRequestURI(); // 로그인 상태인 경우 - if(LoginService.isLogin(session)) return ListService.makeUserList(model, uri, (User)session.getAttribute("user")); + if (LoginService.isLogin(session)) { + listService.makeUserList(model); + return htmlService.makeLoginView(model, uri, (User) session.getAttribute("user")); + } // 로그인 상태가 아닌 경우 return "redirect:/user/login.html"; diff --git a/src/main/java/bejavawebserver/controller/QnaController.java b/src/main/java/bejavawebserver/controller/QnaController.java new file mode 100644 index 00000000..7a7af659 --- /dev/null +++ b/src/main/java/bejavawebserver/controller/QnaController.java @@ -0,0 +1,25 @@ +package bejavawebserver.controller; + +import bejavawebserver.model.Qna; +import bejavawebserver.model.QnaForm; +import bejavawebserver.service.QnaService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Controller +public class QnaController { + @Autowired + QnaService qnaService; + + @PostMapping("/qna/form") + public String writeQna(QnaForm qnaForm) { + String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")); + qnaService.addQna(new Qna(qnaForm, time)); + return "redirect:/index.html"; + } + +} diff --git a/src/main/java/bejavawebserver/controller/UserController.java b/src/main/java/bejavawebserver/controller/UserController.java index fc2cfb1c..a0beb714 100644 --- a/src/main/java/bejavawebserver/controller/UserController.java +++ b/src/main/java/bejavawebserver/controller/UserController.java @@ -3,30 +3,52 @@ import bejavawebserver.model.LoginForm; import bejavawebserver.model.User; import bejavawebserver.service.LoginService; +import bejavawebserver.service.LogoutService; import bejavawebserver.service.SignUpService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; @Controller public class UserController { + private static final Logger logger = LoggerFactory.getLogger(UserController.class); + @Autowired + SignUpService signUpService; + @Autowired + LoginService loginService; + @Autowired + LogoutService logoutService; + @PostMapping("/user/create") - public String signUp(User user){ - try{ - SignUpService.addDatabase(user); - }catch (RuntimeException r){ + public String signUp(User user) { + try { + signUpService.addDatabase(user); + } catch (RuntimeException r) { + logger.debug(r.getMessage()); return "redirect:/user/form.html"; } return "redirect:/"; } @PostMapping("/user/login") - public String login(LoginForm loginForm, HttpSession session){ - if(LoginService.isLoginSuccess(loginForm, session)){ + public String login(LoginForm loginForm, HttpSession session) { + if (loginService.isLoginSuccess(loginForm, session)) { return "redirect:/index.html"; } return "redirect:/user/login_failed.html"; } + @GetMapping("/user/logout") + public String logout(HttpServletRequest httpServletRequest) { + HttpSession session = httpServletRequest.getSession(); + logoutService.removeSession(session); + return "redirect:/"; + } + } diff --git a/src/main/java/bejavawebserver/model/Qna.java b/src/main/java/bejavawebserver/model/Qna.java new file mode 100644 index 00000000..2ee03f3f --- /dev/null +++ b/src/main/java/bejavawebserver/model/Qna.java @@ -0,0 +1,22 @@ +package bejavawebserver.model; + +import lombok.Data; + +@Data +public class Qna { + private String writer; + private String contents; + private String time; + + public Qna(QnaForm qnaForm, String time) { + this.writer = qnaForm.getWriter(); + this.contents = qnaForm.getContents(); + this.time = time; + } + + public Qna(String writer, String contents, String time) { + this.writer = writer; + this.contents = contents; + this.time = time; + } +} diff --git a/src/main/java/bejavawebserver/model/QnaForm.java b/src/main/java/bejavawebserver/model/QnaForm.java new file mode 100644 index 00000000..f3aac0a5 --- /dev/null +++ b/src/main/java/bejavawebserver/model/QnaForm.java @@ -0,0 +1,17 @@ +package bejavawebserver.model; + +import lombok.Data; +import lombok.NonNull; + +@Data +public class QnaForm { + @NonNull + private String writer; + @NonNull + private String contents; + + public QnaForm(@NonNull String writer, @NonNull String contents) { + this.writer = writer; + this.contents = contents; + } +} diff --git a/src/main/java/bejavawebserver/repository/JdbcRepository.java b/src/main/java/bejavawebserver/repository/JdbcRepository.java new file mode 100644 index 00000000..ea850e27 --- /dev/null +++ b/src/main/java/bejavawebserver/repository/JdbcRepository.java @@ -0,0 +1,191 @@ +package bejavawebserver.repository; + +import bejavawebserver.model.Qna; +import bejavawebserver.model.User; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.jdbc.datasource.DataSourceUtils; +import org.springframework.stereotype.Repository; + +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +@Repository +public class JdbcRepository { + private static final Logger logger = LoggerFactory.getLogger(JdbcRepository.class); + private final DataSource dataSource; + + public JdbcRepository(DataSource dataSource) { + this.dataSource = dataSource; + } + + public boolean checkDuplicate(User user) { + return findUserById(user.getUserId()) != null; + } + + public void addUser(User user) { + String sql = "insert into User values(?, ?, ?, ?)"; + Connection conn = null; + PreparedStatement pstmt = null; + ResultSet rs = null; + + try { + conn = getConnection(); + pstmt = conn.prepareStatement(sql); + pstmt.setString(1, user.getUserId()); + pstmt.setString(2, user.getPassword()); + pstmt.setString(3, user.getName()); + pstmt.setString(4, user.getEmail()); + pstmt.executeUpdate(); + + } catch (Exception e) { + throw new IllegalStateException(e); + } finally { + close(conn, pstmt, rs); + } + } + + public User findUserById(String userId) { + String sql = "select * from User where user_id = ?"; + Connection conn = null; + PreparedStatement pstmt = null; + ResultSet rs = null; + User findUser = null; + try { + conn = getConnection(); + pstmt = conn.prepareStatement(sql); + pstmt.setString(1, userId); + + rs = pstmt.executeQuery(); + while (rs.next()) { + findUser = new User( + rs.getString("user_id"), + rs.getString("password"), + rs.getString("name"), + rs.getString("email") + ); + } + return findUser; + + } catch (Exception e) { + logger.debug("error : {}", e.getMessage()); + return null; + } finally { + close(conn, pstmt, rs); + } + } + + public List findUserAll() { + String sql = "select * from User"; + Connection conn = null; + PreparedStatement pstmt = null; + ResultSet rs = null; + + try { + conn = getConnection(); + pstmt = conn.prepareStatement(sql); + + rs = pstmt.executeQuery(); + + List userList = new ArrayList<>(); + while (rs.next()) { + User user = new User( + rs.getString("user_id"), + rs.getString("password"), + rs.getString("name"), + rs.getString("email") + ); + userList.add(user); + } + return userList; + + } catch (Exception e) { + logger.debug("error : {}", e.getMessage()); + + return null; + } finally { + close(conn, pstmt, rs); + } + } + + public List findQnaAll() { + String sql = "select * from qna order by time desc"; + Connection conn = null; + PreparedStatement pstmt = null; + ResultSet rs = null; + + try { + conn = getConnection(); + pstmt = conn.prepareStatement(sql); + + rs = pstmt.executeQuery(); + + List qnaList = new ArrayList<>(); + while (rs.next()) { + Qna qna = new Qna( + rs.getString("writer"), + rs.getString("contents"), + rs.getString("time") + ); + qnaList.add(qna); + } + return qnaList; + + } catch (Exception e) { + logger.debug("error : {}", e.getMessage()); + + return null; + } finally { + close(conn, pstmt, rs); + } + } + + public void addQna(Qna qna) { + String sql = "insert into qna values(?, ?, ?)"; + Connection conn = null; + PreparedStatement pstmt = null; + ResultSet rs = null; + + try { + conn = getConnection(); + pstmt = conn.prepareStatement(sql); + pstmt.setString(1, qna.getWriter()); + pstmt.setString(2, qna.getContents()); + pstmt.setString(3, qna.getTime()); + pstmt.executeUpdate(); + + } catch (Exception e) { + throw new IllegalStateException(e); + } finally { + close(conn, pstmt, rs); + } + } + + private Connection getConnection() { + return DataSourceUtils.getConnection(dataSource); + } + + private void close(Connection conn, PreparedStatement pstmt, ResultSet rs) { + // 역순으로 닫아주어야 한다 + try { + if (pstmt != null) { + pstmt.close(); + } + if (conn != null) { + conn.close(); + } + if (rs != null) { + rs.close(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + + +} diff --git a/src/main/java/bejavawebserver/repository/memoryRepository.java b/src/main/java/bejavawebserver/repository/MemoryRepository.java similarity index 93% rename from src/main/java/bejavawebserver/repository/memoryRepository.java rename to src/main/java/bejavawebserver/repository/MemoryRepository.java index 565cfa78..c3884b9d 100644 --- a/src/main/java/bejavawebserver/repository/memoryRepository.java +++ b/src/main/java/bejavawebserver/repository/MemoryRepository.java @@ -8,8 +8,8 @@ import java.util.HashMap; import java.util.Map; -public class memoryRepository { - private static final Logger logger = LoggerFactory.getLogger(memoryRepository.class); +public class MemoryRepository { + private static final Logger logger = LoggerFactory.getLogger(MemoryRepository.class); private static final Map users = new HashMap<>(); public static void addUser(User user) { diff --git a/src/main/java/bejavawebserver/service/HtmlService.java b/src/main/java/bejavawebserver/service/HtmlService.java index 69c94d3b..3577723b 100644 --- a/src/main/java/bejavawebserver/service/HtmlService.java +++ b/src/main/java/bejavawebserver/service/HtmlService.java @@ -2,24 +2,22 @@ import bejavawebserver.controller.HtmlController; import bejavawebserver.model.User; -import org.springframework.stereotype.Service; -import org.springframework.ui.Model; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - -import javax.servlet.http.HttpSession; +import org.springframework.stereotype.Service; +import org.springframework.ui.Model; @Service public class HtmlService { private static final Logger logger = LoggerFactory.getLogger(HtmlController.class); - public static String makeNotLoginView(Model model, String uri){ + + public String makeNotLoginView(Model model, String uri) { logger.debug("현재 로그인 상태 아님"); model.addAttribute("isLogin", false); return uri; } - - public static String makeLoginView(Model model, String uri, User loginUser) { + public String makeLoginView(Model model, String uri, User loginUser) { logger.debug("현재 로그인 상태임"); model.addAttribute("userName", loginUser.getName()); model.addAttribute("isLogin", true); diff --git a/src/main/java/bejavawebserver/service/ListService.java b/src/main/java/bejavawebserver/service/ListService.java index eed17d5a..e9f4ce63 100644 --- a/src/main/java/bejavawebserver/service/ListService.java +++ b/src/main/java/bejavawebserver/service/ListService.java @@ -1,20 +1,20 @@ package bejavawebserver.service; import bejavawebserver.model.User; -import bejavawebserver.repository.memoryRepository; +import bejavawebserver.repository.JdbcRepository; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.ui.Model; -import javax.servlet.http.HttpSession; -import java.util.ArrayList; -import java.util.Collection; import java.util.List; @Service public class ListService { - public static String makeUserList(Model model, String uri, User loginUser){ - List userList = new ArrayList<>(memoryRepository.findAll()); + @Autowired + JdbcRepository jdbcRepository; + + public void makeUserList(Model model) { + List userList = jdbcRepository.findUserAll(); model.addAttribute("userList", userList); - return HtmlService.makeLoginView(model, uri, loginUser); } } diff --git a/src/main/java/bejavawebserver/service/LoginService.java b/src/main/java/bejavawebserver/service/LoginService.java index 2e7a9b69..6a584994 100644 --- a/src/main/java/bejavawebserver/service/LoginService.java +++ b/src/main/java/bejavawebserver/service/LoginService.java @@ -2,20 +2,28 @@ import bejavawebserver.model.LoginForm; import bejavawebserver.model.User; -import bejavawebserver.repository.memoryRepository; +import bejavawebserver.repository.JdbcRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import javax.servlet.http.HttpSession; import java.util.Objects; +@Service public class LoginService { - public static boolean isLoginSuccess(LoginForm loginForm, HttpSession session) { - User user = memoryRepository.findUserById(loginForm.getUserId()); - session.setAttribute("user", user); - return Objects.equals(user.getPassword(), loginForm.getPassword()); - } + @Autowired + JdbcRepository jdbcRepository; public static boolean isLogin(HttpSession session) { - return session != null; + if (session == null) return false; + return session.getAttribute(session.getId()) != null; + } + + public boolean isLoginSuccess(LoginForm loginForm, HttpSession session) { + User user = jdbcRepository.findUserById(loginForm.getUserId()); + boolean isSuccess = Objects.equals(user.getPassword(), loginForm.getPassword()); + if (isSuccess) session.setAttribute(session.getId(), user); + return isSuccess; } diff --git a/src/main/java/bejavawebserver/service/LogoutService.java b/src/main/java/bejavawebserver/service/LogoutService.java new file mode 100644 index 00000000..eefb9508 --- /dev/null +++ b/src/main/java/bejavawebserver/service/LogoutService.java @@ -0,0 +1,12 @@ +package bejavawebserver.service; + +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; + +@Service +public class LogoutService { + public void removeSession(HttpSession session) { + session.removeAttribute(session.getId()); + } +} diff --git a/src/main/java/bejavawebserver/service/QnaService.java b/src/main/java/bejavawebserver/service/QnaService.java new file mode 100644 index 00000000..c07f1d3c --- /dev/null +++ b/src/main/java/bejavawebserver/service/QnaService.java @@ -0,0 +1,24 @@ +package bejavawebserver.service; + +import bejavawebserver.model.Qna; +import bejavawebserver.repository.JdbcRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.ui.Model; + +import java.util.List; + +@Service +public class QnaService { + @Autowired + JdbcRepository jdbcRepository; + + public void addQna(Qna qna) { + jdbcRepository.addQna(qna); + } + + public void makeQnaList(Model model) { + List qnaList = jdbcRepository.findQnaAll(); + model.addAttribute("qnaList", qnaList); + } +} diff --git a/src/main/java/bejavawebserver/service/SignUpService.java b/src/main/java/bejavawebserver/service/SignUpService.java index fa60818c..ecee3511 100644 --- a/src/main/java/bejavawebserver/service/SignUpService.java +++ b/src/main/java/bejavawebserver/service/SignUpService.java @@ -1,13 +1,17 @@ package bejavawebserver.service; -import bejavawebserver.repository.memoryRepository; import bejavawebserver.model.User; +import bejavawebserver.repository.JdbcRepository; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class SignUpService { - public static void addDatabase(User user) { - if(memoryRepository.checkDuplicate(user)) throw new RuntimeException("중복된 사용자가 있습니다."); - memoryRepository.addUser(user); + @Autowired + JdbcRepository jdbcRepository; + + public void addDatabase(User user) { + if (jdbcRepository.checkDuplicate(user)) throw new RuntimeException("중복된 사용자가 있습니다."); + jdbcRepository.addUser(user); } } diff --git a/src/main/resources/logback.xml b/src/main/resources/logback-spring.xml similarity index 100% rename from src/main/resources/logback.xml rename to src/main/resources/logback-spring.xml diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 1615d17c..69c149d4 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -77,7 +77,7 @@
  • 로그인
  • 회원가입
  • --> -
  • 로그아웃
  • +
  • 로그아웃
  • 개인정보수정
  • @@ -88,38 +88,21 @@
    @@ -82,19 +82,23 @@
    -
    +
    + +
    +
    diff --git a/src/main/resources/templates/qna/show.html b/src/main/resources/templates/qna/show.html index a045d94d..2c7a5329 100644 --- a/src/main/resources/templates/qna/show.html +++ b/src/main/resources/templates/qna/show.html @@ -72,7 +72,7 @@
  • 로그인
  • 회원가입
  • -
  • 로그아웃
  • +
  • 로그아웃
  • 개인정보수정
  • diff --git a/src/main/resources/templates/user/form.html b/src/main/resources/templates/user/form.html index bf3b0c97..0244618d 100644 --- a/src/main/resources/templates/user/form.html +++ b/src/main/resources/templates/user/form.html @@ -71,7 +71,7 @@
  • 로그인
  • 회원가입
  • -
  • 로그아웃
  • +
  • 로그아웃
  • 개인정보수정
  • diff --git a/src/main/resources/templates/user/list.html b/src/main/resources/templates/user/list.html index bfd689bb..e6a0536a 100644 --- a/src/main/resources/templates/user/list.html +++ b/src/main/resources/templates/user/list.html @@ -72,7 +72,7 @@
  • 로그인
  • 회원가입
  • -
  • 로그아웃
  • +
  • 로그아웃
  • 개인정보수정
  • @@ -98,7 +98,7 @@ - 수정 + 수정 diff --git a/src/main/resources/templates/user/login.html b/src/main/resources/templates/user/login.html index 98b95047..5cb8a852 100644 --- a/src/main/resources/templates/user/login.html +++ b/src/main/resources/templates/user/login.html @@ -72,7 +72,7 @@
  • 로그인
  • 회원가입
  • -
  • 로그아웃
  • +
  • 로그아웃
  • 개인정보수정
  • diff --git a/src/main/resources/templates/user/login_failed.html b/src/main/resources/templates/user/login_failed.html index 488abb41..ea79c6e2 100644 --- a/src/main/resources/templates/user/login_failed.html +++ b/src/main/resources/templates/user/login_failed.html @@ -72,7 +72,7 @@
  • 로그인
  • 회원가입
  • -
  • 로그아웃
  • +
  • 로그아웃
  • 개인정보수정
  • diff --git a/src/main/resources/templates/user/profile.html b/src/main/resources/templates/user/profile.html index ef024bd6..ffa84b2e 100644 --- a/src/main/resources/templates/user/profile.html +++ b/src/main/resources/templates/user/profile.html @@ -72,7 +72,7 @@
  • 로그인
  • 회원가입
  • -
  • 로그아웃
  • +
  • 로그아웃
  • 개인정보수정
  • diff --git a/src/test/java/bejavawebserver/repository/JdbcRepositoryTest.java b/src/test/java/bejavawebserver/repository/JdbcRepositoryTest.java new file mode 100644 index 00000000..ffed4a42 --- /dev/null +++ b/src/test/java/bejavawebserver/repository/JdbcRepositoryTest.java @@ -0,0 +1,28 @@ +package bejavawebserver.repository; + +import bejavawebserver.model.User; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import javax.sql.DataSource; +import java.sql.SQLException; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +@SpringBootTest +class JdbcRepositoryTest { + @Autowired JdbcRepository jdbcRepository; + @Test + @DisplayName("데이터베이스에 유저 추가 테스트") + void addUser() throws SQLException { + // given + User user = new User("testid", "testpassword", "주형", "test@gmail.com"); + // when + jdbcRepository.addUser(user); + // then + assertThat(jdbcRepository.findUserById(user.getUserId())).usingRecursiveComparison().isEqualTo(user); + } +} \ No newline at end of file