Skip to content
Merged

Step2 #117

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
33 changes: 33 additions & 0 deletions src/main/java/codesquad/domain/Contents.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package codesquad.domain;

import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.Lob;
import javax.validation.constraints.Size;

@Embeddable
public class Contents {
@Size(min = 1, max = 30)
@Column(nullable = false, length = 30)
private String subject;

@Lob
@Column(nullable = false)
private String comment;

public String getSubject() {
return subject;
}

public void setSubject(String subject) {
this.subject = subject;
}

public String getComment() {
return comment;
}

public void setComment(String comment) {
this.comment = comment;
}
}
41 changes: 41 additions & 0 deletions src/main/java/codesquad/domain/Issue.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package codesquad.domain;

import support.domain.AbstractEntity;

import javax.persistence.*;

@Entity
public class Issue extends AbstractEntity {

@Embedded
private Contents contents = new Contents();

@ManyToOne
@JoinColumn(foreignKey = @ForeignKey(name = "fk_issue_writer"))
private User writer;

public Issue() {
}

public Issue(String subject, String comment, User writer) {
contents.setComment(comment);
contents.setSubject(subject);
this.writer = writer;
}

public Contents getContents() {
return contents;
}

public void setContents(Contents contents) {
this.contents = contents;
}

public User getWriter() {
return writer;
}

public void setWriter(User writer) {
this.writer = writer;
}
}
8 changes: 8 additions & 0 deletions src/main/java/codesquad/domain/IssueRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package codesquad.domain;

import org.springframework.data.jpa.repository.JpaRepository;


public interface IssueRepository extends JpaRepository<Issue, Long> {

}
5 changes: 1 addition & 4 deletions src/main/java/codesquad/domain/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,8 @@ public void update(User loginUser, User target) {
throw new UnAuthorizedException();
}

if (!matchPassword(target.getPassword())) {
return;
}

this.name = target.name;
this.password = target.password;
}

public boolean matchPassword(String password) {
Expand Down
58 changes: 58 additions & 0 deletions src/main/java/codesquad/dto/IssueDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package codesquad.dto;

import codesquad.domain.Issue;
import codesquad.domain.User;

import javax.persistence.Column;
import javax.persistence.Lob;
import javax.validation.constraints.Size;

public class IssueDto {
@Size(min = 1, max = 30)
@Column(nullable = false, length = 30)
private String subject;

@Lob
@Column(nullable = false)
private String comment;

@Column(nullable = false)
private User writer;

public IssueDto() {
}

public IssueDto(String subject, String comment, User writer) {
this.subject = subject;
this.comment = comment;
this.writer = writer;
}

public Issue _toIssue() {
return new Issue(this.subject, this.comment, this.writer);
}

public String getSubject() {
return subject;
}

public void setSubject(String subject) {
this.subject = subject;
}

public String getComment() {
return comment;
}

public void setComment(String comment) {
this.comment = comment;
}

public User getWriter() {
return writer;
}

public void setWriter(User writer) {
this.writer = writer;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;

import javax.persistence.EntityNotFoundException;

@ControllerAdvice
@ControllerAdvice(annotations = Controller.class)
public class SecurityControllerAdvice {
private static final Logger log = LoggerFactory.getLogger(SecurityControllerAdvice.class);

Expand Down
25 changes: 25 additions & 0 deletions src/main/java/codesquad/service/IssueService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package codesquad.service;

import codesquad.domain.Issue;
import codesquad.domain.IssueRepository;
import codesquad.dto.IssueDto;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.persistence.EntityNotFoundException;

@Service
public class IssueService {

@Resource(name = "issueRepository")
private IssueRepository issueRepository;

public Issue findById(long id) {
return issueRepository.findById(id).orElseThrow(EntityNotFoundException::new);
}

public Issue add(IssueDto issueDto) {
return issueRepository.save(issueDto._toIssue());
}

}
19 changes: 19 additions & 0 deletions src/main/java/codesquad/web/HomeController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package codesquad.web;

import codesquad.domain.IssueRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {
@Autowired
IssueRepository issueRepository;

@GetMapping("")
public String home(Model model) {
model.addAttribute("issue", issueRepository.findAll());
return "index";
}
}
45 changes: 45 additions & 0 deletions src/main/java/codesquad/web/IssueController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package codesquad.web;

import codesquad.domain.Issue;
import codesquad.domain.User;
import codesquad.dto.IssueDto;
import codesquad.security.LoginUser;
import codesquad.service.IssueService;
import org.slf4j.Logger;
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.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.validation.Valid;

import static org.slf4j.LoggerFactory.getLogger;

@Controller
@RequestMapping("/issue")
public class IssueController {
private static final Logger log = getLogger(IssueController.class);

@Autowired
IssueService issueService;

@GetMapping("")
public String form(@LoginUser User loginUser) {
return "issue/form";
}

@PostMapping("")
public String create(@Valid IssueDto issueDto) {
issueService.add(issueDto);
return "redirect:/";
}

@GetMapping("/{id}")
public String show(@PathVariable long id, Model model) {
model.addAttribute("issue", issueService.findById(id));
return "issue/show";
}
}
25 changes: 15 additions & 10 deletions src/main/java/codesquad/web/UserController.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;

import static codesquad.security.HttpSessionUtils.USER_SESSION_KEY;

@Controller
@RequestMapping("/users")
public class UserController {
Expand All @@ -27,15 +29,10 @@ public String form() {
return "/user/form";
}

@GetMapping("")
public String show() {
return "index";
}

@PostMapping("")
public String create(UserDto userDto) {
userService.add(userDto);
return "redirect:/users";
return "redirect:/";
}

@GetMapping("/login")
Expand All @@ -46,8 +43,14 @@ public String loginForm() {
@PostMapping("/login")
public String login(String userId, String password, HttpSession httpSession) throws UnAuthenticationException {
User loginUser = userService.login(userId, password);
httpSession.setAttribute("loginUser", loginUser);
return "redirect:/users";
httpSession.setAttribute(USER_SESSION_KEY, loginUser);
return "redirect:/";
}

@GetMapping("/logout")
public String logout(HttpSession httpSession) {
httpSession.removeAttribute(USER_SESSION_KEY);
return "redirect:/";
}

@GetMapping("/{id}/form")
Expand All @@ -58,9 +61,11 @@ public String updateForm(@LoginUser User loginUser, @PathVariable long id, Model
}

@PutMapping("/{id}")
public String update(@LoginUser User loginUser, @PathVariable long id, UserDto target) {
public String update(@LoginUser User loginUser, @PathVariable long id, UserDto target, HttpSession httpSession) {
log.debug("업데이트 유저 : " + target);
userService.update(loginUser, id, target);
return "redirect:/users";
httpSession.removeAttribute(USER_SESSION_KEY);
return "redirect:/";
}

}
5 changes: 4 additions & 1 deletion src/main/resources/import.sql
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
INSERT INTO user (id, user_id, password, name) values (1, 'javajigi', 'test', '자바지기');
INSERT INTO user (id, user_id, password, name) values (2, 'sanjigi', 'test', '산지기');
INSERT INTO user (id, user_id, password, name) values (2, 'sanjigi', 'test', '산지기');
INSERT INTO user (id, user_id, password, name) values (3, 'master', '1', '관리자');
INSERT INTO issue (id, subject, comment, writer_id) values (1, '안녕하세요1', '하이하이하이하이하이', 1);
INSERT INTO issue (id, subject, comment, writer_id) values (2, '안녕하세요2', '너의 머리속은 마구니가 꼈어!', 1);
7 changes: 7 additions & 0 deletions src/main/resources/templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,15 @@
<nav class="mdl-navigation">
<a class="mdl-navigation__link" href="/">Issues</a>
<a class="mdl-navigation__link" href="/milestone/list.html">Milestones</a>
{{^loginedUser}}
<a class="mdl-navigation__link" href="/users/login">login</a>
<a class="mdl-navigation__link" href="/users/form">join</a>
{{/loginedUser}}

{{#loginedUser}}
<a class="mdl-navigation__link" href="/users/logout">logout</a>
<a class="mdl-navigation__link" href="/users/{{id}}/form">my</a>
{{/loginedUser}}
</nav>
</div>
</header>
Expand Down
Loading