반응형
기능 설명
- 등록 후 24시간이 경과된 컨텐츠는 삭제 후 Database에 저장
- 추후 Todo 테이블과 분리하여 운용필요
- 최대 5개의 TodoList 전달
TodoResult
에러 핸들링을 위한 TodoResult(Enum Class)생성
package swlee.logiclist.utils;
public enum TodoResult {
SUCCESS(1, "Todo Upload Success"),
FAIL(0, "Todo Upload Fail (Exception)"),
FAIL_NULL(-1, "Todo Upload Fail (Todo is null)"),
FAIL_EXIST(-2, "Todo Already Exist");
private int code;
private String message;
TodoResult(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}
ViewController
- 작은 기능으로 TodoController를 따로 분리하지않음(할걸..)
- Service 클래스는 분리 (TodoService)
Controller 맵핑 로직 및 결과 값 Json 객체로 리턴
@ResponseBody
@PostMapping("/todo")
public String todo_post(HttpServletResponse res, @RequestBody @NotNull Todo todo) {
log.info("Todo_POst Test{}",todo);
JsonObject obj =new JsonObject();
try {
log.info("todo_date::{}",todo.getDate());
TodoResult result = todoService.memorySave(todo);
obj.addProperty("result", result.getCode());
obj.addProperty("errorMsg",result.getMessage());
return obj.toString();
}
catch (Exception e){
log.error("Todo Post Error",e);
obj.addProperty("result", 0);
obj.addProperty("errorMsg",e.getMessage());
return obj.toString();
}
}
TodoList 삭제, 완료 버튼에 해당하는 이벤트 수행
@ResponseBody
@PostMapping("/todo_data")
public String todo_complete_todo(@RequestBody @NotNull Todo todo,@RequestParam("param") String param){
log.info("param:::{}",param);
try {
if(param.equals("complete")){
log.info("complete Todo");
todoService.upload(todo);
todoService.remove(todo);
}
else if(param.equals("remove")){
log.info("Delete Todo");
todoService.remove(todo);
}
}
catch (Exception e){
log.error("Todo_complete Post Error",e);
return "failed";
}
return "success";
}
TodoService
- memorySave - TodoList Value 중복 값 체크 및 Exception Handlling
/**
* @param todo
* @return - 1 : Todo Upload Success
* - 0 : Todo Upload Fail (Exception)
* - -1 : Todo Upload Fail (Todo is null)
* - -2 : Todo Already Exist
*/
public TodoResult memorySave(Todo todo) {
if (todo == null) {
return FAIL_NULL;
}
if(getTodoByContent(todo.getContent())!=null){
return FAIL_EXIST;
}
try {
memoryTodoList.add(todo);
} catch (Exception e) {
log.error("TodoService.memorySave() error", e);
return FAIL;
}
return SUCCESS;
}
TodoList Value 중복 값 체크
public Todo getTodoByContent(String content) {
for (Todo todo : memoryTodoList) {
if (todo.getContent().equals(content)) {
return todo;
}
}
return null;
}
DataBase 저장을 위한 upload 메소드 생성
- upload(Todo todo) - 단건저장
- upload(ArrayList<Todo> todoArrayList) - 다건저장
public void upload(Todo todo) {
todoRepository.save(todo);
}
//ArrayList Todo upload
public void upload(ArrayList<Todo> todoArrayList) {
todoRepository.saveAll(todoArrayList);
}
getMemoryTodoList() - Memory에 저장되어 있는 TodoList 리턴(최대 5개)
memoryFilter() - 24시간 경과 TodoList 제거 및 Database 내 저장
-> 추후 Todo 테이블과 분리하여 운용 필요
public ArrayList<Todo> getMemoryTodoList() {
//memoryTodoList 같은 일자 체크
//memoryTodolist 5개 전달
ArrayList<Todo> todos = memoryFilter();
return todos;
}
private ArrayList<Todo> memoryFilter() {
//new ArrayList
ArrayList<Todo> removeTodoList = new ArrayList<>();
for (Todo todo : memoryTodoList) {
//todo.getData()가 24시간이 지났을경우
if (todo.getDate().getTime() + 86400000 < System.currentTimeMillis()) { //86400000=24시간
removeTodoList.add(todo);
}
}
//지우기 전 revmoveTodoList를 DB저장
upload(removeTodoList);
//removeTodoList를 memoryTodoList에서 제거
memoryTodoList.removeAll(removeTodoList);
return memoryTodoList;
}
TodoRepository
save(Todo todo) - 단건 저장 관련 쿼리문
saveAll(ArrayList<Todo> todoArrayList) - 다건 저장 관련 쿼리문(batchUpdate사용)
public void save(Todo todo){
try{
final String sql = "INSERT INTO todo (content,date) VALUES (?,?)";
jdbcTemplate.update(sql, todo.getContent(),todo.getDate());
log.info("Todo Save Success");
}catch (Exception e){
log.error("TodoRepository.save() error",e);
}
//JDBC Template Save Query
}
//SaveAll batchupdate
public void saveAll(ArrayList<Todo> todoArrayList){
try{
final String sql = "INSERT INTO todo (content,date) VALUES (?,?)";
jdbcTemplate.batchUpdate(sql, todoArrayList, todoArrayList.size(), (ps, todo) -> {
ps.setString(1, todo.getContent());
// sql Date로 변환
ps.setDate(2, new Date(todo.getDate().getTime()));
});
log.info("Todo Save Success");
}catch (Exception e){
log.error("TodoRepository.save() error",e);
}
//JDBC Template Save Query
}
개선 필요
- 정형화 되지 않은 소스
- 실제 TodoResult Enum class는 MemorySave 메소드에서만 사용함(전체적 사용필요)
- Controller 분리 필요
- TodoController 분리 필요(필요한 사항인가 검토 후 분리진행)
- 미완료 TodoList 관련 데이터 분리 필요
- 현재는 완료 TodoList 목록과 24시간 경과하여 삭제된 미완료 TodoLIst 목록을 분리하지 않음
게시글에 대한 훈수 환영합니다. (성장에 밑거름이 필요해요.)
-> 과한 훈수 시 스승님이 되실 수 있으니 주의
반응형
'Project' 카테고리의 다른 글
[LogicList]Spring 타임리프 환경 페이징 구현 (0) | 2022.10.29 |
---|---|
[LogicList]TodoList 프론트 기능 (0) | 2022.10.22 |
[LogicList] Toast Ui Editor & SpringBoot AWS S3 업데이트[0] (0) | 2022.10.10 |
[LogicList] SpringBoot AWS S3 저장 (1) | 2022.09.23 |
[LogicList]Toast Ui Editor 이미지 URL 삽입방법과 문제점 (0) | 2022.09.23 |