Skip to content
Merged
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
2 changes: 2 additions & 0 deletions src/main/java/codesquad/ImsApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,5 @@ public static void main(String[] args) {
SpringApplication.run(ImsApplication.class, args);
}
}

// TODO : html 자원들 중복 제거하면서 스타일이 제대로 안나오는 부분이 있다, 추후 중복 제거 다시해서 레이아웃이 제대로 나오도록...!
82 changes: 82 additions & 0 deletions src/main/java/codesquad/domain/Issue.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package codesquad.domain;

import codesquad.dto.IssueDto;
import support.domain.AbstractEntity;

import javax.persistence.*;
import javax.validation.constraints.Size;

@Entity
public class Issue extends AbstractEntity {
@Size(min = 3, max = 100)
@Column(nullable = false, length = 100)
private String subject;

@Size(min = 3)
@Lob
private String comment;

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

public Issue() {

}

public Issue(String subject, String comment) {
this.subject = subject;
this.comment = comment;
}

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

public Issue(long id, String subject, String comment, User writer) {
super(id);
this.subject = subject;
this.comment = comment;
this.writer = writer;

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.

Issue 생성자가 너무 많음.
꼭 필요한 생성자가 가지도록 구현

}

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 writeBy(User loginUser) {
this.writer = loginUser;
}

public IssueDto _toIssueDto() {
return new IssueDto(this.subject, this.comment, this.writer);
}

@Override
public String toString() {
return "Issue{" +
"id='" + getId() + '\'' +
"subject='" + subject + '\'' +
", comment='" + comment + '\'' +
", writer=" + writer +
'}';
}
}
9 changes: 9 additions & 0 deletions src/main/java/codesquad/domain/IssueRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package codesquad.domain;

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

import java.util.Optional;

public interface IssueRepository extends JpaRepository<Issue, Long> {
Optional<Issue> findBySubject(String title);
}
64 changes: 64 additions & 0 deletions src/main/java/codesquad/dto/IssueDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package codesquad.dto;

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

import javax.validation.constraints.Size;

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

@Size(min = 3)
private String comment;

private User writer;

public IssueDto() {

}

public IssueDto(String subject, String comment, User writer) {
super();
this.subject = subject;
this.comment = comment;
this.writer = 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 writeBy(User loginUser) {
this.writer = loginUser;
}

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

@Override
public String toString() {
return "IssueDto{" +
"subject='" + subject + '\'' +
", comment='" + comment + '\'' +
", writer=" + writer +
'}';
}
}
43 changes: 43 additions & 0 deletions src/main/java/codesquad/service/IssueService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package codesquad.service;

import codesquad.domain.Issue;
import codesquad.domain.IssueRepository;
import codesquad.domain.User;
import codesquad.dto.IssueDto;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import javax.persistence.EntityNotFoundException;
import java.util.List;

@Service
public class IssueService {

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

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

@Transactional
public Issue create(User loginUser, IssueDto issueDto) {
issueDto.writeBy(loginUser);
add(issueDto);
return issueDto._toIssue();
}

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

public List<Issue> findAll(Pageable pageable) {
return issueRepository.findAll(pageable).getContent();
}

public Issue findById(long id) {
return issueRepository.findById(id).orElseThrow(EntityNotFoundException::new);
}
}
25 changes: 25 additions & 0 deletions src/main/java/codesquad/web/HomeController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package codesquad.web;

import codesquad.domain.Issue;
import codesquad.service.IssueService;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import javax.annotation.Resource;
import java.util.List;

@Controller
public class HomeController {

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

@GetMapping("/")
public String home(Model model, Pageable pageable) {
List<Issue> issues = issueService.findAll(pageable);
model.addAttribute("issues", issues);
return "index";
}
}
50 changes: 50 additions & 0 deletions src/main/java/codesquad/web/IssueController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
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.slf4j.LoggerFactory;
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;


@Controller
@RequestMapping("/newIssue")

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"로 구현할 것을 추천

public class IssueController {
private static final Logger log = LoggerFactory.getLogger(IssueController.class);

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

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

@PostMapping("")
public String create(@LoginUser User loginUser, IssueDto issueDto) {
issueService.create(loginUser, issueDto);
return "redirect:/";
}

@GetMapping("")
public String list() {
return "redirect:/";
}

@GetMapping("/{id}")
public String read(@PathVariable long id, Model model) {
Issue issue = issueService.findById(id);
model.addAttribute("issue", issue);
return "/issue/show";
}
}
18 changes: 18 additions & 0 deletions src/main/java/codesquad/web/UserController.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package codesquad.web;

import codesquad.UnAuthenticationException;
import codesquad.domain.User;
import codesquad.dto.UserDto;
import codesquad.security.HttpSessionUtils;
import codesquad.security.LoginUser;
import codesquad.service.UserService;
import org.slf4j.Logger;
Expand All @@ -11,6 +13,7 @@
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;

@Controller
@RequestMapping("/users")
Expand Down Expand Up @@ -44,4 +47,19 @@ public String update(@LoginUser User loginUser, @PathVariable long id, UserDto t
return "redirect:/users";
}

@GetMapping("/login")
public String loginForm() {
return "/user/login";
}

@PostMapping("/login")
public String login(String userId, String password, HttpSession httpSession) {
try {
User user = userService.login(userId, password);
httpSession.setAttribute(HttpSessionUtils.USER_SESSION_KEY, user);
return "redirect:/";
} catch (UnAuthenticationException e) {
return "/user/login_failed";
}
}
}
3 changes: 3 additions & 0 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
server.servlet.session.tracking-modes=cookie

spring.datasource.url=jdbc:h2:~/java-ims;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.username=sa
spring.datasource.password=

spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
Expand Down
18 changes: 16 additions & 2 deletions src/main/resources/import.sql
Original file line number Diff line number Diff line change
@@ -1,2 +1,16 @@
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, create_date, modified_date) values (1, 'javajigi', 'test', '자바지기', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP());
INSERT INTO user (id, user_id, password, name, create_date, modified_date) values (2, 'sanjigi', 'test', '산지기', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP());
INSERT INTO user (id, user_id, password, name, create_date, modified_date) values (3, 'third', 'test', '셋째', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP());
INSERT INTO user (id, user_id, password, name, create_date, modified_date) values (4, 'fourth', 'test', '넷째', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP());
INSERT INTO user (id, user_id, password, name, create_date, modified_date) values (5, 'fifth', 'test', '다섯째', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP());
INSERT INTO user (id, user_id, password, name, create_date, modified_date) values (6, 'sixth', 'test', '여섯째', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP());
INSERT INTO user (id, user_id, password, name, create_date, modified_date) values (7, 'seventh', 'test', '일곱째', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP());

INSERT INTO issue (id, writer_id, subject, comment, create_date, modified_date) values (1, 1, '자바지기 이슈', '내용', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP());
INSERT INTO issue (id, writer_id, subject, comment, create_date, modified_date) values (2, 2, '산지기 이슈', '내용', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP());
INSERT INTO issue (id, writer_id, subject, comment, create_date, modified_date) values (3, 3, '셋째 이슈', '내용', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP());
INSERT INTO issue (id, writer_id, subject, comment, create_date, modified_date) values (4, 4, '넷째 이슈', '내용', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP());
INSERT INTO issue (id, writer_id, subject, comment, create_date, modified_date) values (5, 5, '다섯째 이슈', '내용', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP());
INSERT INTO issue (id, writer_id, subject, comment, create_date, modified_date) values (6, 6, '여섯째 이슈', '내용', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP());
INSERT INTO issue (id, writer_id, subject, comment, create_date, modified_date) values (7, 7, '일곱째 이슈', '내용', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP());
INSERT INTO issue (id, writer_id, subject, comment, create_date, modified_date) values (8, 1, '자바지기 두 번째 이슈', '내용', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP());
4 changes: 2 additions & 2 deletions src/main/resources/templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<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>
<!--<subject>Issue Tracking System</subject>-->

{{# block "style"}}
{{/ block}}
Expand All @@ -16,7 +16,7 @@
<header class="mdl-layout__header mdl-layout__header--waterfall">
<div class="mdl-layout__header-row">
<!-- Title -->
<span class="mdl-layout-title">Issue Tracking System</span>
<span class="mdl-layout-subject">Issue Tracking System</span>
<div class="mdl-layout-spacer"></div>
<!-- Tabs -->
<nav class="mdl-navigation">
Expand Down
Loading