TIL
(2024-05-17) 개인과제,swagger
o_coding
2024. 5. 17. 20:54
public ApiResponse<TodoResponseDto> createTodo(TodoRequestDto todoRequestDto){
Todo todo = new Todo(todoRequestDto);
Todo saveTodo = todoRepository.save(todo);
TodoResponseDto todoResponseDto = new TodoResponseDto(todo);
ApiResponse<TodoResponseDto> apiResponse = new ApiResponse<>(HttpStatus.OK,"할일 생성",todoResponseDto);
return apiResponse;
}
public ApiResponse<TodoResponseDto> inquireTodo(Long id){
Todo todo = findByTodo(id);
TodoResponseDto todoResponseDto = new TodoResponseDto(todo);
ApiResponse<TodoResponseDto> apiResponse = new ApiResponse(HttpStatus.OK,"조회 성공",todoResponseDto);
return apiResponse;
}
public ApiResponse<List> getTodo(){
List<TodoResponseDto> todoList = todoRepository.findAllByOrderByModifiedAtDesc().stream().map(TodoResponseDto::new).toList();
ApiResponse<List> apiResponse = new ApiResponse<>(HttpStatus.OK,"조회 성공",todoList);
return apiResponse;
}
@Transactional
public ApiResponse<Long> updateTodo(TodoRequestDto todoRequestDto,Long id){
Todo todo = findByTodo(id);
ApiResponse<Long> apiResponse;
if(todo == null)
return new ApiResponse(HttpStatus.NOT_FOUND,id+"는 존재하지 않는 ID입니다.",id);
String password = validationPassword(todoRequestDto,id);
if(!password.equals("0")){
todo.update(todoRequestDto);
apiResponse = new ApiResponse<Long>(HttpStatus.OK,"수정 성공",id);
}else{
apiResponse = new ApiResponse(HttpStatus.FORBIDDEN,"수정 실패",id);
}
return apiResponse;
}
public ApiResponse<Long> deleteTodo(Long id,String password){
Todo todo = findByTodo(id);
ApiResponse<Long> apiResponse;
if(todo == null)
return new ApiResponse(HttpStatus.NOT_FOUND,id+"는 존재하지 않는 ID입니다.",id);
if(todo.getPassword().equals(password)){
todoRepository.delete(todo);
apiResponse = new ApiResponse<Long>(HttpStatus.OK,"삭제 성공",id);
}else{
apiResponse = new ApiResponse<Long>(HttpStatus.FORBIDDEN,"삭제 실패",id);
}
return apiResponse;
}
Todo todo = new Todo(todoRequestDto);
Todo saveTodo = todoRepository.save(todo);
TodoResponseDto todoResponseDto = new TodoResponseDto(todo);
ApiResponse<TodoResponseDto> apiResponse = new ApiResponse<>(HttpStatus.OK,"할일 생성",todoResponseDto);
return apiResponse;
}
public ApiResponse<TodoResponseDto> inquireTodo(Long id){
Todo todo = findByTodo(id);
TodoResponseDto todoResponseDto = new TodoResponseDto(todo);
ApiResponse<TodoResponseDto> apiResponse = new ApiResponse(HttpStatus.OK,"조회 성공",todoResponseDto);
return apiResponse;
}
public ApiResponse<List> getTodo(){
List<TodoResponseDto> todoList = todoRepository.findAllByOrderByModifiedAtDesc().stream().map(TodoResponseDto::new).toList();
ApiResponse<List> apiResponse = new ApiResponse<>(HttpStatus.OK,"조회 성공",todoList);
return apiResponse;
}
@Transactional
public ApiResponse<Long> updateTodo(TodoRequestDto todoRequestDto,Long id){
Todo todo = findByTodo(id);
ApiResponse<Long> apiResponse;
if(todo == null)
return new ApiResponse(HttpStatus.NOT_FOUND,id+"는 존재하지 않는 ID입니다.",id);
String password = validationPassword(todoRequestDto,id);
if(!password.equals("0")){
todo.update(todoRequestDto);
apiResponse = new ApiResponse<Long>(HttpStatus.OK,"수정 성공",id);
}else{
apiResponse = new ApiResponse(HttpStatus.FORBIDDEN,"수정 실패",id);
}
return apiResponse;
}
public ApiResponse<Long> deleteTodo(Long id,String password){
Todo todo = findByTodo(id);
ApiResponse<Long> apiResponse;
if(todo == null)
return new ApiResponse(HttpStatus.NOT_FOUND,id+"는 존재하지 않는 ID입니다.",id);
if(todo.getPassword().equals(password)){
todoRepository.delete(todo);
apiResponse = new ApiResponse<Long>(HttpStatus.OK,"삭제 성공",id);
}else{
apiResponse = new ApiResponse<Long>(HttpStatus.FORBIDDEN,"삭제 실패",id);
}
return apiResponse;
}
개인 과제 5단계 까지 완료했고 swagger를 적용하는중이다
swagger로 api를 테스트해보았다
package com.sparta.todo.apiResponse;
import lombok.Getter;
import lombok.Setter;
import org.springframework.http.HttpStatus;
@Setter
@Getter
public class ApiResponse <T>{
private final HttpStatus status;
private String message;
private T data;
public ApiResponse(HttpStatus status,String message,T data) {
this.status = status;
this.message = message;
this.data = data;
}
}
import lombok.Getter;
import lombok.Setter;
import org.springframework.http.HttpStatus;
@Setter
@Getter
public class ApiResponse <T>{
private final HttpStatus status;
private String message;
private T data;
public ApiResponse(HttpStatus status,String message,T data) {
this.status = status;
this.message = message;
this.data = data;
}
}
http상태 를 전달하는 방법을 생각하다가 제네릭 클래스를 만들어서 여러 타입을 반환하도록 구현했다.