diff --git a/src/main/java/org/ntlab/citrusserver/repositories/AccountManager.java b/src/main/java/org/ntlab/citrusserver/repositories/AccountManager.java index 1e76248..6341d75 100644 --- a/src/main/java/org/ntlab/citrusserver/repositories/AccountManager.java +++ b/src/main/java/org/ntlab/citrusserver/repositories/AccountManager.java @@ -2,6 +2,7 @@ import org.ntlab.citrusserver.entities.Account; import org.ntlab.citrusserver.entities.Book; +import org.ntlab.citrusserver.entities.Schedule; import org.springframework.stereotype.Repository; import java.util.*; @@ -15,6 +16,7 @@ private final List iAccountListeners = new ArrayList<>(); + public AccountManager() { dummyAccount(); } diff --git a/src/main/java/org/ntlab/citrusserver/repositories/BookManager.java b/src/main/java/org/ntlab/citrusserver/repositories/BookManager.java index 5b0012e..20cb632 100644 --- a/src/main/java/org/ntlab/citrusserver/repositories/BookManager.java +++ b/src/main/java/org/ntlab/citrusserver/repositories/BookManager.java @@ -94,7 +94,12 @@ //本の公開情報を返す public Boolean getPublicity(String accountId, Integer bookId) { - return booksMap.get(accountId).get(bookId).getPublicity(); + if(booksMap.containsKey(accountId)) { + if(booksMap.get(accountId).containsKey(bookId)) { + return booksMap.get(accountId).get(bookId).getPublicity(); + } + } + return false; } //公開情報を変更する @@ -121,6 +126,15 @@ booksMap.get(accountId).get(bookId).setColor(color); } + public void changeAccountId(String oldAccountId, String newAccountId) { + for(Book book : booksMap.get(oldAccountId).values()) { + book.setAccountId(newAccountId); + } + var books = booksMap.get(oldAccountId); + booksMap.put(newAccountId, books); + booksMap.remove(oldAccountId); + } + @Override public void accountDeleted(Account account) { if(!booksMap.containsKey(account.getId())) return; diff --git a/src/main/java/org/ntlab/citrusserver/repositories/ScheduleManager.java b/src/main/java/org/ntlab/citrusserver/repositories/ScheduleManager.java index 311a985..310befd 100644 --- a/src/main/java/org/ntlab/citrusserver/repositories/ScheduleManager.java +++ b/src/main/java/org/ntlab/citrusserver/repositories/ScheduleManager.java @@ -37,18 +37,17 @@ Schedule>>>>> schedules = new HashMap<>(); - private final //accountId + public HashMap>>> getScheduleAll(String accountId, Integer bookId) { + if (bookId != null) { + // 既存のアカウントのスケジュールを取得 + HashMap>>> accountSchedules = schedules.get(accountId); + HashMap>>> resultSchedules - = new HashMap<>(); - - public HashMap>>> getScheduleAll(String accountId, Integer bookId) { - if (bookId != null) { - // 既存のアカウントのスケジュールを取得 - HashMap>>> accountSchedules = schedules.get(accountId); + = new HashMap<>(); for (int year : accountSchedules.keySet()) { for (int month : accountSchedules.get(year).keySet()) { @@ -75,7 +74,12 @@ if (bookId != null) { // 既存のアカウントのスケジュールを取得 HashMap>>> accountSchedules = schedules.get(accountId); - + HashMap>>> resultSchedules + = new HashMap<>(); for (int month : accountSchedules.get(year).keySet()) { for (int day : accountSchedules.get(year).get(month).keySet()) { for (int scheduleId : accountSchedules.get(year).get(month).get(day).keySet()) { @@ -99,7 +103,12 @@ if (bookId != null) { // 既存のアカウントのスケジュールを取得 HashMap>>> accountSchedules = schedules.get(accountId); - + HashMap>>> resultSchedules + = new HashMap<>(); for (int day : accountSchedules.get(year).get(month).keySet()) { for (int scheduleId : accountSchedules.get(year).get(month).get(day).keySet()) { Schedule schedule = accountSchedules.get(year).get(month).get(day).get(scheduleId); @@ -121,7 +130,12 @@ if (bookId != null) { // 既存のアカウントのスケジュールを取得 HashMap>>> accountSchedules = schedules.get(accountId); - + HashMap>>> resultSchedules + = new HashMap<>(); for (int scheduleId : accountSchedules.get(year).get(month).get(day).keySet()) { Schedule schedule = accountSchedules.get(year).get(month).get(day).get(scheduleId); // bookIdが一致するスケジュールをresultSchedulesに追加 @@ -199,7 +213,12 @@ if (bookId != null) { // 既存のアカウントのスケジュールを取得 HashMap>>> accountSchedules = schedules.get(accountId); - + HashMap>>> resultSchedules + = new HashMap<>(); Schedule schedule = accountSchedules.get(year).get(month).get(day).get(scheduleId); // bookIdが一致するスケジュールをresultSchedulesに追加 if (schedule.getBookId().equals(bookId)) { @@ -277,6 +296,12 @@ } } + public void changeAccountId(String oldAccountId, String newAccountId) { + var oldSchedules = schedules.get(oldAccountId); + schedules.put(newAccountId, oldSchedules); + schedules.remove(oldAccountId); + } + @Override public void bookChanged(Account account, Book book) { diff --git a/src/main/java/org/ntlab/citrusserver/repositories/TodoManager.java b/src/main/java/org/ntlab/citrusserver/repositories/TodoManager.java index ca98622..6168896 100644 --- a/src/main/java/org/ntlab/citrusserver/repositories/TodoManager.java +++ b/src/main/java/org/ntlab/citrusserver/repositories/TodoManager.java @@ -390,6 +390,12 @@ todos.remove(accountId); } + public void changeAccountId(String oldAccountId, String newAccountId) { + var oldTodos = todos.get(oldAccountId); + todos.put(newAccountId, oldTodos); + todos.remove(oldAccountId); + } + @Override public void accountDeleted(Account account) { deleteAllTodosByAccountId(account.getId()); diff --git a/src/main/java/org/ntlab/citrusserver/resources/AccountsRest.java b/src/main/java/org/ntlab/citrusserver/resources/AccountsRest.java index fde1519..e92caf0 100644 --- a/src/main/java/org/ntlab/citrusserver/resources/AccountsRest.java +++ b/src/main/java/org/ntlab/citrusserver/resources/AccountsRest.java @@ -16,11 +16,17 @@ @Component //accountRestのインスタンスを一個作る public class AccountsRest { - private final AccountManager accountManager; //finalは書き換えられない + private final AccountManager accountManager; + private final BookManager bookManager; + private final ScheduleManager scheduleManager; + private final TodoManager todoManager;//finalは書き換えられない @Autowired//springbootの決まり - public AccountsRest(AccountManager am) { + public AccountsRest(AccountManager am, BookManager bm, ScheduleManager sm, TodoManager tm) { + bookManager = bm; + scheduleManager = sm; accountManager = am; + todoManager = tm; } // アカウントの一覧をリストとして返す(GET) @@ -97,9 +103,13 @@ var response = Response.status(Response.Status.NOT_FOUND).entity("IDが存在しません");//404 throw new WebApplicationException(response.build()); } + //成功 if(accountManager.checkToken(accountId, token)) { accountManager.changeAccountId(accountId, newAccountId,oldPassword, token); + bookManager.changeAccountId(accountId, newAccountId); + scheduleManager.changeAccountId(accountId, newAccountId); + todoManager.changeAccountId(accountId, newAccountId); return; }