diff --git a/src/main/java/org/ntlab/citrusserver/repositories/TodoManager.java b/src/main/java/org/ntlab/citrusserver/repositories/TodoManager.java index 38d8fa5..76399d1 100644 --- a/src/main/java/org/ntlab/citrusserver/repositories/TodoManager.java +++ b/src/main/java/org/ntlab/citrusserver/repositories/TodoManager.java @@ -1,7 +1,9 @@ package org.ntlab.citrusserver.repositories; import org.ntlab.citrusserver.entities.Todo; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Repository; +import org.springframework.web.server.ResponseStatusException; import java.util.HashMap; @@ -17,14 +19,19 @@ HashMap>>>>> todos - = new HashMap<>(); + Todo>>>>>> todos = new HashMap<>(); /** * アカウントの本の次に与えるべきtodoのidを管理します */ private final HashMap nextTodoId = new HashMap<>(); + private final AccountManager accountManager; + + public TodoManager(AccountManager accountManager) { + this.accountManager = accountManager; + } + /** * アカウントと本を指定してそれに所属するtodoをすべて返す @@ -44,6 +51,12 @@ */ public HashMap>>> getAllTodos(String accountId, int bookId, String token){ + if(!todos.containsKey(accountId)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } + if(!todos.get(accountId).containsKey(bookId)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } return todos.get(accountId).get(bookId); } @@ -57,6 +70,18 @@ * @return そのアカウントの本に所属するtodoのうち、指定した年月のtodoを返します */ public HashMap> getTodosByMonth(String accountId, int bookId, int year, int month, String token){ + if(!todos.containsKey(accountId)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } + if(!todos.get(accountId).containsKey(bookId)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } + if(!todos.get(accountId).get(bookId).containsKey(year)){ + return new HashMap>(); + } + if(!todos.get(accountId).get(bookId).get(year).containsKey(month)){ + return new HashMap>(); + } return todos.get(accountId).get(bookId).get(year).get(month); } @@ -86,6 +111,21 @@ * @return そのアカウントの本に所属するtodoのうち、指定した年月日のtodoを返します */ public HashMap getTodosByDay(String accountId, int bookId, int year, int month, int day, String token){ + if(!todos.containsKey(accountId)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } + if(!todos.get(accountId).containsKey(bookId)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } + if(!todos.get(accountId).get(bookId).containsKey(year)){ + return new HashMap(); + } + if(!todos.get(accountId).get(bookId).get(year).containsKey(month)){ + return new HashMap(); + } + if(!todos.get(accountId).get(bookId).get(year).get(month).containsKey(day)){ + return new HashMap(); + } return todos.get(accountId).get(bookId).get(year).get(month).get(day); } @@ -118,6 +158,24 @@ * @return idを指定してtodoを返す */ public Todo getTodoById(String accountId, int bookId, int year, int month, int day, int todoId, String token){ + if(!todos.containsKey(accountId)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } + if(!todos.get(accountId).containsKey(bookId)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } + if(!todos.get(accountId).get(bookId).containsKey(year)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } + if(!todos.get(accountId).get(bookId).get(year).containsKey(month)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } + if(!todos.get(accountId).get(bookId).get(year).get(month).containsKey(day)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } + if(!todos.get(accountId).get(bookId).get(year).get(month).get(day).containsKey(todoId)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } return todos.get(accountId).get(bookId).get(year).get(month).get(day).get(todoId); } @@ -150,6 +208,7 @@ * @return 新しいtodoのid */ public int createTodo(String accountId, int bookId, int year, int month, int day, String title, String token){ + if(!todos.containsKey(accountId)){ todos.put(accountId, new HashMap<>()); } @@ -202,6 +261,24 @@ * @param todoId 削除したいtodoのid */ public void deleteTodoById(String accountId, int bookId, int year, int month, int day, int todoId, String token){ + if(!todos.containsKey(accountId)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } + if(!todos.get(accountId).containsKey(bookId)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } + if(!todos.get(accountId).get(bookId).containsKey(year)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } + if(!todos.get(accountId).get(bookId).get(year).containsKey(month)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } + if(!todos.get(accountId).get(bookId).get(year).get(month).containsKey(day)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } + if(!todos.get(accountId).get(bookId).get(year).get(month).get(day).containsKey(todoId)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } todos.get(accountId).get(bookId).get(year).get(month).get(day).remove(todoId); } @@ -230,6 +307,24 @@ * @param check 変更後の達成状態 */ public void setCheck(String accountId, int bookId, int year, int month, int day, int todoId, boolean check, String token){ + if(!todos.containsKey(accountId)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } + if(!todos.get(accountId).containsKey(bookId)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } + if(!todos.get(accountId).get(bookId).containsKey(year)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } + if(!todos.get(accountId).get(bookId).get(year).containsKey(month)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } + if(!todos.get(accountId).get(bookId).get(year).get(month).containsKey(day)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } + if(!todos.get(accountId).get(bookId).get(year).get(month).get(day).containsKey(todoId)){ + throw new ResponseStatusException(HttpStatus.NOT_FOUND); + } todos.get(accountId).get(bookId).get(year).get(month).get(day).get(todoId).setCheck(check); }