Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ build/
!**/src/test/**/build/
.gitignore
db/be-java-cafe.mv.db
db/be-java-cafe.trace.db

### STS ###
.apt_generated
Expand Down
Binary file removed src/main/.DS_Store
Binary file not shown.
1 change: 0 additions & 1 deletion src/main/java/kr/codesqaud/cafe/config/CafeConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/user/login").setViewName("user/login");
registry.addViewController("/user/form").setViewName("user/form");
registry.addViewController("/qna/show").setViewName("qna/show");
registry.addViewController("/qna/article").setViewName("qna/form");
registry.addViewController("/login_fail").setViewName("user/login_fail");
}
}
51 changes: 49 additions & 2 deletions src/main/java/kr/codesqaud/cafe/controller/ArticleController.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
package kr.codesqaud.cafe.controller;

import kr.codesqaud.cafe.domain.Article;
import kr.codesqaud.cafe.domain.Member;
import kr.codesqaud.cafe.service.ArticleService;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;

@Controller
public class ArticleController {

Expand All @@ -16,12 +20,30 @@ public ArticleController(ArticleService articleService) {
this.articleService = articleService;
}

@GetMapping("/qna/article")
public String askQuestion(HttpSession httpSession) {
Comment on lines +23 to +24
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
@GetMapping("/qna/article")
public String askQuestion(HttpSession httpSession) {
@GetMapping("/qna/articleForm")
public String askQuestionForm(HttpSession httpSession) {

form 을 리턴해 주는 경우 명시적으로 URL 등에 form 이 들어가는 게 좋을 것 같아요.

Member member = (Member) httpSession.getAttribute("sessionedUser");
if (member == null) {
return "redirect:/user/login";
}
return "qna/form";
}

@PostMapping("/qna/ask")
public String registerArticle(Article article) {
public String registerArticle(Article article, HttpSession httpSession) {
Member loginMember = (Member) httpSession.getAttribute("sessionedUser");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기도 로그인이 안 되었을 경우 처리가 필요합니다.

article.setWriter(loginMember.getNickName());
articleService.writeArticle(article);
return "redirect:/";
}

@PostMapping("/qna/{articleId}/update")
public String updateArticle(@PathVariable long articleId, Article article) {
article.setArticleId(articleId);
articleService.updateArticle(article);
return "redirect:/";
}

@GetMapping("/")
public String printArticleList(Model model) {
model.addAttribute("article", articleService.findArticles());
Expand All @@ -30,9 +52,34 @@ public String printArticleList(Model model) {
}

@GetMapping("/qna/{articleId}")
public String printDetailArticle(@PathVariable int articleId, Model model) {
public String printDetailArticle(@PathVariable int articleId, HttpSession httpSession, Model model) {
if (httpSession.getAttribute("sessionedUser") == null) {
return "redirect:/user/login";
};
Article article = articleService.findOneArticleById(articleId).get();
model.addAttribute("article", article);
return "qna/show";
}

@GetMapping("/article/{articleId}/edite")
public String editeArticle(@PathVariable long articleId, HttpSession httpSession, Model model) {
Article writedArticle = articleService.findOneArticleById(articleId).orElseThrow(() -> new EmptyResultDataAccessException(1));
Member loginMember = (Member) httpSession.getAttribute("sessionedUser");
if (loginMember.getNickName().equals(writedArticle.getWriter())) {
model.addAttribute("article", writedArticle);
return "qna/updateForm";
}
return "qna/edite_fail";
}

@DeleteMapping("/article/{articleId}/delete")
public String deleteArticle(@PathVariable long articleId, HttpSession httpSession) {
Article writedArticle = articleService.findOneArticleById(articleId).orElseThrow(() -> new EmptyResultDataAccessException(1));
Member loginMember = (Member) httpSession.getAttribute("sessionedUser");
if (loginMember.getNickName().equals(writedArticle.getWriter())) {
articleService.deleteArticle(articleId);
return "redirect:/";
}
return "qna/delete_fail";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import kr.codesqaud.cafe.domain.Member;
import kr.codesqaud.cafe.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;

Expand All @@ -19,7 +20,7 @@ public LoginController(MemberService memberService) {

@PostMapping("/login")
public String login(Member member, HttpSession httpSession) {
Member loginMember = memberService.findOneMemberByEmail(member.getEmail()).orElse(null);
Member loginMember = memberService.findOneMemberByEmail(member.getEmail()).orElseThrow(() -> new EmptyResultDataAccessException(1));
if (loginMember != null && memberService.checkMember(loginMember, member)) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

loginMember != null 코드는 의미가 없기 때문에 제거해 주는 게 좋습니다. 왜 그런지 생각해 보세요.

httpSession.setAttribute("sessionedUser", loginMember);
return "redirect:/";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import kr.codesqaud.cafe.service.MemberService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
Expand Down Expand Up @@ -36,7 +37,7 @@ public String showList(Model model) {
@GetMapping("/profile/{nickName}")
public String showProfile(@PathVariable String nickName, Model model) {
model.addAttribute("nickName", nickName);
String email = memberService.findOneMemberByNickname(nickName).orElse(null).getEmail();
String email = memberService.findOneMemberByNickname(nickName).orElseThrow(() -> new EmptyResultDataAccessException(1)).getEmail();
model.addAttribute("email", email);
return "user/profile";
}
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/kr/codesqaud/cafe/domain/Article.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public void setWriter(String author) {
this.writer = author;
}

public void setArticleId(int id) {
public void setArticleId(long id) {
articleId = id;
}

Expand Down Expand Up @@ -81,4 +81,4 @@ public String toString() {
", formattedRegistrationDate='" + formattedRegistrationDate + '\'' +
'}';
}
}
}
9 changes: 6 additions & 3 deletions src/main/java/kr/codesqaud/cafe/domain/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

public class Member {

private long id;
private long userId;
private String email;
private String nickName;
private String password;
Expand All @@ -26,7 +26,7 @@ public Member(String email, String nickName, String password) {
}

public long getId() {
return id;
return userId;
}

public String getEmail() {
Expand Down Expand Up @@ -64,5 +64,8 @@ public void setSignUpDate(LocalDateTime signUpDate) {
public String getFormattedSignUpDate() {
return formattedSignUpDate;
}
}

public void setUserId(long userId) {
this.userId = userId;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@

public interface ArticleRepository {
void saveArticle(Article article);
Optional<Article> findOneArticleById(int id);
Optional<Article> findOneArticleById(long id);
List<Article> getArticles();
void deleteArticle(Member member);
void deleteArticle(long articleId);
int getSize();
void updateArticle(Article article);
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package kr.codesqaud.cafe.repository;

import kr.codesqaud.cafe.domain.Article;
import kr.codesqaud.cafe.domain.Member;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
Expand Down Expand Up @@ -36,8 +35,7 @@ public void saveArticle(Article article) {
}

@Override
public Optional<Article> findOneArticleById(int id) {
System.out.println(id);
public Optional<Article> findOneArticleById(long id) {
return Optional.ofNullable(jdbcTemplate.queryForObject("select * from article where articleId = ?", articleRowMapper(), id));
}

Expand All @@ -47,15 +45,22 @@ public List<Article> getArticles() {
}

@Override
public void deleteArticle(Member member) {

public void deleteArticle(long articleId) {
String sql = "delete from article where articleId = ?";
jdbcTemplate.update(sql, articleId);
}

@Override
public int getSize() {
return jdbcTemplate.queryForObject("select count(*) from article", Integer.class);
}

@Override
public void updateArticle(Article article) {
String sql = "update article set title = ?, contents = ? where articleId = ?";
jdbcTemplate.update(sql, article.getTitle(), article.getContents(), article.getId());
}

private RowMapper<Article> articleRowMapper() {
return (rs, rowNum) -> {
Article article = new Article();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public JdbcTemplateMemberRepository(DataSource datasource) {
}

@Override
public Member saveMember(Member member) {
public void saveMember(Member member) {
SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
jdbcInsert.withTableName("member").usingGeneratedKeyColumns("id");

Expand All @@ -34,7 +34,6 @@ public Member saveMember(Member member) {
parameters.put("signUpDate", Timestamp.valueOf(member.getSignUpDate().format(DateTimeFormatter.ofPattern("yyy-MM-dd")) + " 00:00:00"));

jdbcInsert.execute(new MapSqlParameterSource(parameters));
return member;
}

@Override
Expand All @@ -61,7 +60,6 @@ public int getSize() {
@Override
public void editeMember(Member member) {
jdbcTemplate.update("UPDATE member SET nickName = ? WHERE email = ?", member.getNickName(), member.getEmail());

}

private RowMapper<Member> memberRowMapper() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import java.util.Optional;

public interface MemberRepository {
Member saveMember(Member member);
void saveMember(Member member);

Optional<Member> findOneMemberbyEmail(String email);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public void saveArticle(Article article) {
}

@Override
public Optional<Article> findOneArticleById(int id) {
public Optional<Article> findOneArticleById(long id) {
return articlesRepository.stream()
.filter(article -> article.getId() == id)
.findAny();
Expand All @@ -39,7 +39,12 @@ public int getSize() {
}

@Override
public void deleteArticle(Member member) {
public void updateArticle(Article article) {

}

@Override
public void deleteArticle(long articleId) {

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,8 @@ public MemoryMemberRepository() {
}

@Override
public Member saveMember(Member member) {
public void saveMember(Member member) {
repository.put(member.getEmail(), member);
return member;
}

@Override
Expand Down
10 changes: 9 additions & 1 deletion src/main/java/kr/codesqaud/cafe/service/ArticleService.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public void writeArticle(Article article) {
articleRepository.saveArticle(article);
}

public Optional<Article> findOneArticleById(int id) {
public Optional<Article> findOneArticleById(long id) {
return articleRepository.findOneArticleById(id);
}

Expand All @@ -30,4 +30,12 @@ public List<Article> findArticles() {
public int getTotalNumberOfArticles() {
return articleRepository.getSize();
}

public void updateArticle(Article article) {
articleRepository.updateArticle(article);
}

public void deleteArticle(long articleId) {
articleRepository.deleteArticle(articleId);
}
}
5 changes: 4 additions & 1 deletion src/main/resources/templates/data.sql
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,7 @@ insert into member (email, nickname, password)
values ('[email protected]', 'kim', '123');

insert into article (writer, title, contents)
values ('manju', 'hi', 'hello');
values ('manju', '가입인사 드립니다.', '등업해주세요!');

insert into article (writer, title, contents)
values ('core', '자바 질문', '스트림에 대해서 질문합니다.');
13 changes: 13 additions & 0 deletions src/main/resources/templates/qna/delete_fail.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{{>user/header}}

<link href="../../css/user/login_fail.css" rel="stylesheet">

<div class="container" id="main">
<header class="post-header">
<p class="title">다른 사람의 글을 삭제할 수 없습니다!</p>
</header>
<a href="/" class="btn">홈으로</a>
</div>
</div>
</body>
</html>
13 changes: 13 additions & 0 deletions src/main/resources/templates/qna/edite_fail.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{{>user/header}}

<link href="../../css/user/login_fail.css" rel="stylesheet">

<div class="container" id="main">
<header class="post-header">
<p class="title">다른 사람의 글을 수정할 수 없습니다!</p>
</header>
<a href="/" class="btn">홈으로</a>
</div>
</div>
</body>
</html>
4 changes: 0 additions & 4 deletions src/main/resources/templates/qna/form.html
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,6 @@
<div class="col-md-12 col-sm-12 col-lg-10 col-lg-offset-1">
<div class="panel panel-default content-main">
<form name="question" method="post" action="/qna/ask">
<div class="form-group">
<label for="writer">글쓴이</label>
<input type="text" class="form-control" id="writer" name="writer" placeholder="글쓴이"/>
</div>
<div class="form-group">
<label for="title">제목</label>
<input type="text" class="form-control" id="title" name="title" placeholder="제목"/>
Expand Down
4 changes: 2 additions & 2 deletions src/main/resources/templates/qna/show.html
Original file line number Diff line number Diff line change
Expand Up @@ -100,10 +100,10 @@ <h2 class="qna-title">{{title}}</h2>
<div class="article-util">
<ul class="article-util-list">
<li>
<a class="link-modify-article" href="/questions/423/form">수정</a>
<a class="link-modify-article" href="/article/{{articleId}}/edite">수정</a>
</li>
<li>
<form class="form-delete" action="/questions/423" method="POST">
<form class="form-delete" action="/article/{{articleId}}/delete" method="POST">
<input type="hidden" name="_method" value="DELETE">
<button class="link-delete-article" type="submit">삭제</button>
</form>
Expand Down
Loading