Skip to content

Commit

Permalink
Merge pull request #35 from Kusitms-POPTATO-DEV/feat/31-create-backlog
Browse files Browse the repository at this point in the history
Feat#31: 백로그 생성 기능 구현
  • Loading branch information
yeonjookang authored Oct 17, 2024
2 parents 4d832e4 + a757165 commit cab488c
Show file tree
Hide file tree
Showing 7 changed files with 121 additions and 1 deletion.
8 changes: 8 additions & 0 deletions src/main/java/server/poptato/todo/api/TodoController.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import server.poptato.global.response.BaseResponse;
import server.poptato.todo.api.request.BacklogCreateRequestDto;
import server.poptato.todo.api.request.DragAndDropRequestDto;
import server.poptato.todo.api.request.SwipeRequestDto;
import server.poptato.todo.application.TodoService;
Expand Down Expand Up @@ -70,4 +71,11 @@ public BaseResponse dragAndDrop(@UserId Long userId,
todoService.dragAndDrop(userId, dragAndDropRequestDto);
return new BaseResponse<>();
}

@PostMapping("/backlog")
public BaseResponse generateBacklog(//@UserId Long userId,
@Validated @RequestBody BacklogCreateRequestDto backlogCreateRequestDto){
todoService.generateBacklog(1L, backlogCreateRequestDto.getContent());
return new BaseResponse<>();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package server.poptato.todo.api.request;

import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Builder
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class BacklogCreateRequestDto {
@NotBlank(message = "백로그 생성 시 내용은 필수입니다.")
String content;
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import server.poptato.todo.api.request.BacklogCreateRequestDto;
import server.poptato.todo.api.request.DragAndDropRequestDto;
import server.poptato.todo.api.request.SwipeRequestDto;
import org.springframework.transaction.annotation.Transactional;
Expand Down Expand Up @@ -208,4 +209,12 @@ private void checkIsExistUser(Long userId) {
userRepository.findById(userId).orElseThrow(()
-> new UserException(UserExceptionErrorCode.USER_NOT_EXIST));
}

public Long generateBacklog(Long userId, String content) {
checkIsExistUser(userId);
Integer maxBacklogOrder = todoRepository.findMaxBacklogOrderByUserIdOrZero(userId);
Todo backlog = Todo.createBacklog(userId, content, maxBacklogOrder+1);
Todo newBacklog = todoRepository.save(backlog);
return newBacklog.getId();
}
}
11 changes: 11 additions & 0 deletions src/main/java/server/poptato/todo/domain/entity/Todo.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,17 @@ public class Todo{
@LastModifiedDate
private LocalDateTime modifyDate;
// isBookmark 값을 토글하는 도메인 메서드

public static Todo createBacklog(Long userId, String content, Integer backlogOrder) {
return Todo.builder()
.userId(userId)
.content(content)
.backlogOrder(backlogOrder)
.isBookmark(false)
.type(Type.BACKLOG)
.build();
}

public void toggleBookmark() {
this.isBookmark = !this.isBookmark;
}
Expand Down
30 changes: 30 additions & 0 deletions src/test/java/server/poptato/todo/api/TodoControllerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import server.poptato.auth.application.service.JwtService;
import server.poptato.todo.api.request.BacklogCreateRequestDto;
import server.poptato.todo.api.request.DragAndDropRequestDto;
import server.poptato.todo.api.request.SwipeRequestDto;
import server.poptato.todo.application.TodoService;
Expand Down Expand Up @@ -269,4 +270,33 @@ public void shouldReturnOk_WhenIsBookmarkToggled() throws Exception {
.andExpect(status().isOk())
.andDo(print());
}

@DisplayName("백로그 생성 요청 바디에 content가 없거나 비어있으면 Validator가 잡는다.")
@Test
void 백로그_생성_요청바디_예외(){
//given
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();

BacklogCreateRequestDto request = BacklogCreateRequestDto.builder()
.content(" ")
.build();

//when
Set<ConstraintViolation<BacklogCreateRequestDto>> violations = validator.validate(request);
//then
Assertions.assertEquals(violations.size(), 1);
}

@DisplayName("백로그 생성 요청 시 성공한다.")
@Test
void 백로그_생성_성공_응답() throws Exception {
//when
mockMvc.perform(post("/backlog")
.content("{\"content\": \"할일 내용 수정본\"}")
.header("Authorization", "Bearer "+accessToken)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andDo(print());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package server.poptato.todo.application;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import server.poptato.todo.domain.entity.Todo;
import server.poptato.todo.domain.repository.TodoRepository;
import server.poptato.todo.domain.value.Type;

import static org.assertj.core.api.Assertions.assertThat;

@SpringBootTest
public class BacklogCreateTest {
@Autowired
private TodoService todoService;
@Autowired
private TodoRepository todoRepository;

@DisplayName("백로그 생성 시 할 일의 값들이 기본값으로 설정된다.")
@Test
void 백로그_생성_속성_기본값(){
//given
Long userId = 1L;
String content = "내용";

//when
Long todoId = todoService.generateBacklog(userId,content);
Todo findTodo = todoRepository.findById(todoId).get();

//then
assertThat(findTodo.getId()).isNotNull();
assertThat(findTodo.getTodayOrder()).isNull();
assertThat(findTodo.getTodayDate()).isNull();
assertThat(findTodo.getTodayStatus()).isNull();
assertThat(findTodo.getDeadline()).isNull();
assertThat(findTodo.getContent()).isEqualTo(content);
assertThat(findTodo.getType()).isEqualTo(Type.BACKLOG);
assertThat(findTodo.getUserId()).isEqualTo(userId);
assertThat(findTodo.isBookmark()).isEqualTo(false);
assertThat(findTodo.getBacklogOrder()).isEqualTo(11L);
assertThat(findTodo.getCompletedDateTime()).isNull();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ public void shouldDeleteTodoById_WhenTodoExists_ForUser2() {
@Test
public void shouldThrowException_WhenTodoNotFound_ForUser2() {
//given
Long nonExistentTodoId = 30L; // 존재하지 않는 투두 ID
Long nonExistentTodoId = 1000L; // 존재하지 않는 투두 ID

//when & then
assertThrows(TodoException.class, () -> {
Expand Down Expand Up @@ -349,4 +349,6 @@ void getHistories_ShouldReturnPagedResult() {
// 전체 페이지 수가 적절하게 계산되었는지 확인
assertThat(result.getTotalPageCount()).isGreaterThan(0);
}


}

0 comments on commit cab488c

Please sign in to comment.