Skip to content

Commit

Permalink
Merge pull request #127 from ku-kim/develop-BE
Browse files Browse the repository at this point in the history
[team-01][BE] API - 전체 Todo 조회 요청 / 전체 History 조회 요청
  • Loading branch information
ku-kim committed Apr 12, 2022
2 parents 3f3ef03 + 5d99b38 commit 555c0fd
Show file tree
Hide file tree
Showing 23 changed files with 428 additions and 91 deletions.
4 changes: 3 additions & 1 deletion BE/build.gradle
Expand Up @@ -17,13 +17,15 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'

// lombok
implementation 'org.projectlombok:lombok'

// h2
runtimeOnly 'com.h2database:h2'

// test
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'io.rest-assured:rest-assured'

}

tasks.named('test') {
Expand Down
19 changes: 19 additions & 0 deletions BE/src/main/java/codesquad/be/todoserver/config/WebConfig.java
@@ -0,0 +1,19 @@
package codesquad.be.todoserver.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.HandlerTypePredicate;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer
.addPathPrefix("/api",
HandlerTypePredicate.forBasePackage("codesquad.be.todoserver.controller"));
}
}
@@ -0,0 +1,22 @@
package codesquad.be.todoserver.controller;

import codesquad.be.todoserver.domain.History;
import codesquad.be.todoserver.service.HistoryService;
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HistoryController {

private final HistoryService historiesService;

public HistoryController(HistoryService historiesService) {
this.historiesService = historiesService;
}

@GetMapping("/histories")
public List<History> getAllHistory() {
return historiesService.getAllHistory();
}
}
Expand Up @@ -2,18 +2,15 @@

import codesquad.be.todoserver.domain.Todo;
import codesquad.be.todoserver.service.TodoService;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("api")
public class TodoController {

@Autowired
private TodoService todoService;
private final TodoService todoService;

public TodoController(TodoService todoService) {
this.todoService = todoService;
Expand All @@ -23,4 +20,9 @@ public TodoController(TodoService todoService) {
public Todo getById(@PathVariable Long id) {
return todoService.getById(id);
}

@GetMapping("/todos")
public List<Todo> todoList() {
return todoService.findTodos();
}
}
29 changes: 29 additions & 0 deletions BE/src/main/java/codesquad/be/todoserver/domain/History.java
@@ -0,0 +1,29 @@
package codesquad.be.todoserver.domain;

import lombok.Getter;

@Getter
public class History {

private final Long id;
private final Long todoId;
private final String todoTitle;
private final String user;
private final String action;
private final String fromStatus;
private final String toStatus;
private final String createdAt;

public History(Long id, Long todoId, String todoTitle, String user, String action,
String fromStatus, String toStatus, String createdAt) {
this.id = id;
this.todoId = todoId;
this.todoTitle = todoTitle;
this.user = user;
this.action = action;
this.fromStatus = fromStatus;
this.toStatus = toStatus;
this.createdAt = createdAt;
}

}
43 changes: 8 additions & 35 deletions BE/src/main/java/codesquad/be/todoserver/domain/Todo.java
@@ -1,22 +1,26 @@
package codesquad.be.todoserver.domain;

import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class Todo {

private Long id;
private final String title;
private final String contents;
private final String user;
private final String status;
private LocalDateTime createdTime;
private LocalDateTime updatedTime;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;

public Todo(Long id, String title, String contents, String userId, String status) {
public Todo(Long id, String title, String contents, String user, String status) {
this.id = id;
this.title = title;
this.contents = contents;
this.user = userId;
this.user = user;
this.status = status;
}

Expand All @@ -27,35 +31,4 @@ public Todo(String title, String contents, String user, String status) {
this.status = status;
}

public Long getId() {
return id;
}

public String getTitle() {
return title;
}

public String getContents() {
return contents;
}

public String getUser() {
return user;
}

public String getStatus() {
return status;
}

public void setId(Long id) {
this.id = id;
}

public void setCreatedTime(LocalDateTime createdTime) {
this.createdTime = createdTime;
}

public void setUpdatedTime(LocalDateTime updatedTime) {
this.updatedTime = updatedTime;
}
}
@@ -0,0 +1,41 @@
package codesquad.be.todoserver.repository;

import codesquad.be.todoserver.domain.History;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public class HistoryJdbcRepository implements HistoryRepository {

private final JdbcTemplate jdbcTemplate;

@Autowired
public HistoryJdbcRepository(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}


@Override
public List<History> findAllHistory() {
String sql = "SELECT id, todo_id, todo_title, user, action, from_status, to_status, created_at FROM HISTORY";

return jdbcTemplate.query(sql, historyRowMapper());
}

private RowMapper<History> historyRowMapper() {
return (rs, rowNum) -> new History(
rs.getLong("id"),
rs.getLong("todo_id"),
rs.getString("todo_title"),
rs.getString("user"),
rs.getString("action"),
rs.getString("from_status"),
rs.getString("to_status"),
rs.getString("created_at")
);
}
}
@@ -0,0 +1,11 @@
package codesquad.be.todoserver.repository;

import codesquad.be.todoserver.domain.History;

import java.util.List;

public interface HistoryRepository {

List<History> findAllHistory();

}
@@ -1,32 +1,37 @@
package codesquad.be.todoserver.repository;

import codesquad.be.todoserver.domain.Todo;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
public class TodoJdbcRepository implements TodoRepository {

@Autowired
private JdbcTemplate jdbcTemplate;
private final JdbcTemplate jdbcTemplate;

public TodoJdbcRepository(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}

@Override
public Optional<Todo> findById(Long id) {
String sql = "SELECT id, title, contents, user, status, created_time, updated_time FROM TODO WHERE id = ?";
String sql = "SELECT id, title, contents, user, status, created_at, updated_at FROM TODO WHERE id = ?";
List<Todo> todos = jdbcTemplate.query(sql, todoRowMapper(), id);

return todos.stream().findAny();
}

@Override
public List<Todo> findAllTodos() {
String sql = "SELECT id, title, contents, user, status, created_at, updated_at FROM TODO";
List<Todo> todos = jdbcTemplate.query(sql, todoRowMapper());
return todos;
}

public RowMapper<Todo> todoRowMapper() {
return (rs, rowNum) -> {
Todo todo = new Todo(
Expand All @@ -35,8 +40,8 @@ public RowMapper<Todo> todoRowMapper() {
rs.getString("user"),
rs.getString("status"));
todo.setId(rs.getLong("id"));
todo.setCreatedTime(rs.getObject("created_time", LocalDateTime.class));
todo.setUpdatedTime(rs.getObject("updated_time", LocalDateTime.class));
todo.setCreatedAt(rs.getTimestamp("created_at").toLocalDateTime());
todo.setUpdatedAt(rs.getTimestamp("updated_at").toLocalDateTime());
return todo;
};
}
Expand Down
@@ -1,11 +1,15 @@
package codesquad.be.todoserver.repository;

import codesquad.be.todoserver.domain.Todo;
import java.util.Optional;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
public interface TodoRepository {

Optional<Todo> findById(Long id);

List<Todo> findAllTodos();
}
@@ -0,0 +1,28 @@
package codesquad.be.todoserver.service;

import codesquad.be.todoserver.domain.History;
import codesquad.be.todoserver.repository.HistoryRepository;
import java.util.List;
import java.util.NoSuchElementException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class HistoryService {

private final HistoryRepository historyRepository;

@Autowired
public HistoryService(HistoryRepository historyRepository) {
this.historyRepository = historyRepository;
}

public List<History> getAllHistory() {
List<History> histories = historyRepository.findAllHistory();

if (histories.isEmpty()) {
throw new NoSuchElementException("Empty History");
}
return histories;
}
}
15 changes: 12 additions & 3 deletions BE/src/main/java/codesquad/be/todoserver/service/TodoService.java
Expand Up @@ -3,13 +3,13 @@
import codesquad.be.todoserver.domain.Todo;
import codesquad.be.todoserver.exception.NoSuchTodoFoundException;
import codesquad.be.todoserver.repository.TodoRepository;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
import java.util.NoSuchElementException;
import org.springframework.stereotype.Service;

@Service
public class TodoService {

@Autowired
private TodoRepository todoRepository;

public TodoService(TodoRepository todoRepository) {
Expand All @@ -18,6 +18,15 @@ public TodoService(TodoRepository todoRepository) {

public Todo getById(Long id) {
return todoRepository.findById(id)
.orElseThrow(() -> new NoSuchTodoFoundException("조회할 수 없는 Todo 입니다. id : " + id));
.orElseThrow(() -> new NoSuchTodoFoundException("id: " + id));
}

public List<Todo> findTodos() {
List<Todo> todos = todoRepository.findAllTodos();

if (todos.isEmpty()) {
throw new NoSuchElementException("Empty Todos");
}
return todos;
}
}
2 changes: 1 addition & 1 deletion BE/src/main/resources/application.yml
@@ -1,7 +1,7 @@
spring:
datasource:
driverClassName: org.h2.Driver
url: jdbc:h2:~/todo-server
url: jdbc:h2:mem:testTodo
username: sa
sql:
init:
Expand Down

0 comments on commit 555c0fd

Please sign in to comment.