diff --git a/src/main/java/org/ntlab/citrusserver/repositories/AccountManager.java b/src/main/java/org/ntlab/citrusserver/repositories/AccountManager.java index 3580f3c..e2a9ca0 100644 --- a/src/main/java/org/ntlab/citrusserver/repositories/AccountManager.java +++ b/src/main/java/org/ntlab/citrusserver/repositories/AccountManager.java @@ -1,6 +1,7 @@ package org.ntlab.citrusserver.repositories; import org.ntlab.citrusserver.entities.Account; +import org.ntlab.citrusserver.entities.Book; import org.springframework.stereotype.Repository; import java.util.*; @@ -12,10 +13,17 @@ private final HashMap accountToken = new HashMap<>(); //keyがaccountId,valueがtoken + private final List iAccountListeners = new ArrayList<>(); + public AccountManager() { dummyAccount(); } + public void addListener(IAccountListener iAccountListener) + { + iAccountListeners.add(iAccountListener); + } + public void dummyAccount() { //ダミーアカウントの作成 String accountId = "fish"; String password = "abc"; @@ -67,7 +75,8 @@ // アカウント情報を全削除する(DELETE) public void deleteAccount(String accountId, String token, String password) { if(accountToken.get(accountId).equals(token)) { //token比較 - if(accounts.get(accountId).getPassword().equals(password)) { //password比較 + if(accounts.get(accountId).getPassword().equals(password)) {//password比較 + notifyDeletedListener(getAccount(accountId)); accounts.remove(accountId); } } @@ -106,4 +115,12 @@ return null; } + private void notifyDeletedListener(Account account) + { + for(IAccountListener iAccountListener : iAccountListeners) + { + iAccountListener.accountDeleted(account); + } + } + } diff --git a/src/main/java/org/ntlab/citrusserver/repositories/BookManager.java b/src/main/java/org/ntlab/citrusserver/repositories/BookManager.java index 7bbe584..a8ca3df 100644 --- a/src/main/java/org/ntlab/citrusserver/repositories/BookManager.java +++ b/src/main/java/org/ntlab/citrusserver/repositories/BookManager.java @@ -14,7 +14,7 @@ import java.util.Objects; @Repository -public class BookManager { +public class BookManager implements IAccountListener { private final HashMap> booksMap = new HashMap<>(); private final AccountManager accountManager; //仮 @@ -24,6 +24,7 @@ public BookManager(AccountManager accountManager) { this.accountManager = accountManager; + accountManager.addListener(this); createBook("fish","Aさんのダミ本","#B2A9F0", false);//ダミーの本 createBook("bird","Bさんのダミ本","#C1F8E5", false);//ダミーの本 } @@ -120,6 +121,15 @@ booksMap.get(accountId).get(bookId).setColor(color); } + @Override + public void accountDeleted(Account account) { + for(Book book : booksMap.get(account.getId()).values()){ + notifyDeletedListener(account, book); + + } + deleteAllBooks(account.getId()); + } + //--------------------------------------------------------------------------------- // private //--------------------------------------------------------------------------------- @@ -150,4 +160,6 @@ return dtf1.format(nowDate); } + + } diff --git a/src/main/java/org/ntlab/citrusserver/repositories/IAccountListener.java b/src/main/java/org/ntlab/citrusserver/repositories/IAccountListener.java new file mode 100644 index 0000000..4d0dd58 --- /dev/null +++ b/src/main/java/org/ntlab/citrusserver/repositories/IAccountListener.java @@ -0,0 +1,7 @@ +package org.ntlab.citrusserver.repositories; + +import org.ntlab.citrusserver.entities.Account; + +public interface IAccountListener { + void accountDeleted(Account account); +} diff --git a/src/main/java/org/ntlab/citrusserver/repositories/ScheduleManager.java b/src/main/java/org/ntlab/citrusserver/repositories/ScheduleManager.java index 7f6718d..d3d9330 100644 --- a/src/main/java/org/ntlab/citrusserver/repositories/ScheduleManager.java +++ b/src/main/java/org/ntlab/citrusserver/repositories/ScheduleManager.java @@ -9,16 +9,17 @@ import java.util.HashMap; @Repository -public class ScheduleManager implements IBookListener { +public class ScheduleManager implements IAccountListener, IBookListener{ private final BookManager bookManager; private final HashMap nextScheduleId = new HashMap<>(); @Autowired - public ScheduleManager(BookManager bookManager) { + public ScheduleManager(AccountManager accountManager, BookManager bookManager) { this.bookManager = bookManager; this.bookManager.addListener(this); + accountManager.addListener(this); this.addSchedule("fish", 2024, 5, 28, "cinema", "10;00", "12:00", 0); this.addSchedule("fish", 2024, 5, 28, "test", "15;00", "18:00", 1); this.addSchedule("bird", 2024, 5, 28, "cinema", "10;00", "12:00", 0); @@ -155,4 +156,9 @@ } } } + + @Override + public void accountDeleted(Account account) { + deleteSchedules(account.getId()); + } } diff --git a/src/main/java/org/ntlab/citrusserver/repositories/TodoManager.java b/src/main/java/org/ntlab/citrusserver/repositories/TodoManager.java index db1a1df..a2918e0 100644 --- a/src/main/java/org/ntlab/citrusserver/repositories/TodoManager.java +++ b/src/main/java/org/ntlab/citrusserver/repositories/TodoManager.java @@ -1,5 +1,6 @@ package org.ntlab.citrusserver.repositories; +import org.ntlab.citrusserver.entities.Account; import org.ntlab.citrusserver.entities.Todo; import org.springframework.stereotype.Repository; @@ -7,7 +8,7 @@ @Repository -public class TodoManager { +public class TodoManager implements IAccountListener { /** * todoをすべて管理します @@ -27,8 +28,9 @@ private final BookManager bookManager; - public TodoManager(BookManager bookManager) { + public TodoManager(AccountManager accountManager, BookManager bookManager) { this.bookManager = bookManager; + accountManager.addListener(this); String[][] accounts = {{"fish", "abc", "def"}, {"bird", "abc", "xyz"}}; createTodo(accounts[0][0], 1, 2024, 5, 28, "ダミーtodo1"); createTodo(accounts[1][0], 1, 2024, 5, 28, "ダミーtodo2"); @@ -358,4 +360,9 @@ todos.remove(accountId); } + @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 6da636e..df14b1b 100644 --- a/src/main/java/org/ntlab/citrusserver/resources/AccountsRest.java +++ b/src/main/java/org/ntlab/citrusserver/resources/AccountsRest.java @@ -14,19 +14,14 @@ @Path("/accounts") @Component //accountRestのインスタンスを一個作る + public class AccountsRest { private final AccountManager accountManager; //finalは書き換えられない - private final BookManager bookManager; - private final TodoManager todoManager; - private final ScheduleManager scheduleManager; private final FavoriteManager favoriteManager; @Autowired//springbootの決まり - public AccountsRest(AccountManager am, BookManager bm, TodoManager tm, ScheduleManager sm, FavoriteManager favoriteManager) { + public AccountsRest(AccountManager am, FavoriteManager favoriteManager) { accountManager = am; - bookManager = bm; - todoManager = tm; - scheduleManager = sm; this.favoriteManager = favoriteManager; } @@ -76,11 +71,8 @@ @QueryParam("token") String token, @QueryParam("password")String password) { if(accountManager.checkToken(accountId, token)) { - bookManager.deleteAllBooks(accountId); - todoManager.deleteAllTodosByAccountId(accountId); - scheduleManager.deleteSchedules(accountId); - favoriteManager.removeFavoriteById(accountId); accountManager.deleteAccount(accountId, token, password); + favoriteManager.removeFavoriteById(accountId); return; } //404 @@ -94,7 +86,6 @@ } - //指定されたIDのパスワードを変更する (PUT) @Path("/{account_id}/password") @PUT