Skip to content
Merged

Step2 #105

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

import codesquad.service.IssueService;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import javax.annotation.Resource;

@Controller
public class HomeController {

@Resource(name = "issueService")
private IssueService issueService;

@GetMapping("/")
public String home(Model model) {
model.addAttribute("issues", issueService.findAll());
return "index";
}

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

import support.domain.AbstractEntity;

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

@Entity
public class Issue extends AbstractEntity {

@Size(min = 3, max = 50)
@Column(nullable = false, length = 50)
private String subject;

@Size(min = 3, max = 500)
@Column(nullable = false, length = 500)
private String comment;

public Issue() {
}

public Issue(@Size(min = 3, max = 50) String subject, @Size(min = 3, max = 500) String content) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

생성자에 굳이 @SiZe는 없어도 괜찮음.

this.subject = subject;
this.comment = content;
}

public Issue(long id, @Size(min = 3, max = 50) String subject, @Size(min = 3, max = 500) String content) {
super(id);
this.subject = subject;
this.comment = content;
}

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;
}

// ApiIssueController에서 사용할 것이지만 일단은 만들어 보았다.
// public IssueDto _toIssueDto() {
// return new IssueDto(this.subject, this.comment);
// }
}
10 changes: 10 additions & 0 deletions src/main/java/codesquad/domain/IssueRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package codesquad.domain;

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

import java.util.Optional;

public interface IssueRepository extends JpaRepository<Issue, Long> {
@Override
Optional<Issue> findById(Long Long);
}
7 changes: 6 additions & 1 deletion src/main/java/codesquad/domain/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,13 @@ public class User extends AbstractEntity {
public User() {
}

/* public User(String userId, String password, String name) {
this(0L, userId, password, name);
}*/
public User(String userId, String password, String name) {
this(0L, userId, password, name);
this.userId = userId;
this.password = password;
this.name = name;
}

public User(long id, String userId, String password, String name) {
Expand Down
49 changes: 49 additions & 0 deletions src/main/java/codesquad/dto/IssueDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package codesquad.dto;

import codesquad.domain.Issue;

import javax.validation.constraints.Size;

public class IssueDto {
@Size(min = 3, max = 50)
private String subject;

@Size(min = 3, max = 500)
private String comment;

public IssueDto() {
}

public IssueDto(@Size(min = 3, max = 50) String subject, @Size(min = 3, max = 500) String content) {
this.subject = subject;
this.comment = content;
}

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 Issue _toIssue() {
return new Issue(subject, comment);
}

@Override
public String toString() {
return "IssueDto{" +
"subject='" + subject + '\'' +
", comment='" + comment + '\'' +
'}';
}
}
3 changes: 2 additions & 1 deletion src/main/java/codesquad/dto/UserDto.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,11 @@ public class UserDto {
private String name;

public UserDto() {

}

public UserDto(String userId, String password, String name) {
super();
// super();
this.userId = userId;
this.password = password;
this.name = name;
Expand Down
33 changes: 33 additions & 0 deletions src/main/java/codesquad/service/IssueService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package codesquad.service;

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

import javax.annotation.Resource;

import java.util.Optional;

import static org.slf4j.LoggerFactory.getLogger;

@Service
public class IssueService {
private static final Logger log = getLogger(IssueService.class);

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

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

public Iterable<Issue> findAll() {
return issueRepository.findAll();
}

public Optional<Issue> findById(long id) {
return issueRepository.findById(id);
}
}
52 changes: 52 additions & 0 deletions src/main/java/codesquad/web/IssueController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package codesquad.web;

import codesquad.UnAuthorizedException;
import codesquad.domain.IssueRepository;
import codesquad.dto.IssueDto;
import codesquad.service.IssueService;
import com.sun.org.apache.xpath.internal.operations.Mod;
import org.slf4j.Logger;
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.annotation.Resource;
import javax.naming.CannotProceedException;

import static org.slf4j.LoggerFactory.getLogger;

@Controller
@RequestMapping("/issues")
public class IssueController {

private static final Logger log = getLogger(IssueController.class);
@Resource(name = "issueService")
private IssueService issueService;

@GetMapping("")
public String createIssue() {
return "issue/form";
}

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

@GetMapping("/{id}")
public String showDetail(@PathVariable long id, Model model) {
model.addAttribute("issue", issueService.findById(id)
.orElseThrow(UnAuthorizedException::new));
return "issue/show";
}

@GetMapping("list")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

목록의 경우 "/issues"면 되지 않을까? 굳이 list를 추가할 필요가 있을까?

public String list() {
return "issue/list";
}
}
4 changes: 3 additions & 1 deletion src/main/resources/import.sql
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
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 issue (id, subject, comment) values (1, "this is first issue test", "this is soop's first comment test")
19 changes: 0 additions & 19 deletions src/main/resources/templates/base.html
Original file line number Diff line number Diff line change
@@ -1,19 +0,0 @@
<!doctype html>
<html lang="en">
{{#block "header"}}
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<title>Issue Tracking System</title>

<link href='https://fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en'
rel='stylesheet' type='text/css'>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="https://code.getmdl.io/1.1.3/material.blue_grey-orange.min.css">
<link rel="stylesheet" href="/css/styles.css">
</head>
{{/block}}

{{#block "middle"}}
{{/block}}
Loading