diff --git a/src/main/java/com/example/cosmos_serversb/entities/Group.java b/src/main/java/com/example/cosmos_serversb/entities/Group.java index c900ac4..e774568 100644 --- a/src/main/java/com/example/cosmos_serversb/entities/Group.java +++ b/src/main/java/com/example/cosmos_serversb/entities/Group.java @@ -78,6 +78,14 @@ return members; } + public void deleteMember(User user){ + members.remove(user); + } + + public void clearAllMembersForDeleteGroup(){ + members.clear(); + } + public void addMember(String uId){ User user = Users.getInstance().getUserById(uId); if(user != null) { @@ -91,5 +99,9 @@ } } + public boolean equals(Group group) { + return this.gId.equals(group.getgId()); + } + } diff --git a/src/main/java/com/example/cosmos_serversb/entities/User.java b/src/main/java/com/example/cosmos_serversb/entities/User.java index e4f663a..7315afe 100644 --- a/src/main/java/com/example/cosmos_serversb/entities/User.java +++ b/src/main/java/com/example/cosmos_serversb/entities/User.java @@ -129,4 +129,12 @@ public void addGroups(Group group){ groups.add(group); } + + public void exitGroup(Group group){ + this.groups.remove(group); + } + + public boolean equals(User user) { + return uId.equals(user.getuId()); + } } \ No newline at end of file diff --git a/src/main/java/com/example/cosmos_serversb/models/Groups.java b/src/main/java/com/example/cosmos_serversb/models/Groups.java index c3be3e5..0691c3e 100644 --- a/src/main/java/com/example/cosmos_serversb/models/Groups.java +++ b/src/main/java/com/example/cosmos_serversb/models/Groups.java @@ -1,5 +1,6 @@ package com.example.cosmos_serversb.models; +import java.lang.reflect.Member; import java.util.*; import javax.inject.Singleton; import java.util.Date; @@ -78,10 +79,18 @@ } public static DeleteResult deleteGroup(String gId){ - Group editGroup = Groups.getInstance().getGroupByGid(gId); + Session session = SessionManager.getInstance().getSession(); + Group editGroup = session.get(Group.class, gId); if(editGroup == null){ return DeleteResult.FAILURE; } + //削除するグループに所属しているユーザーに、退会してもらう。 + for(User member : editGroup.getMembers()){ + member.exitGroup(editGroup); + } + //削除するグループが持っているユーザの情報を全て削除する。 + editGroup.clearAllMembersForDeleteGroup(); + session.delete(editGroup); return DeleteResult.SUCCESS; } @@ -108,8 +117,22 @@ return null; } - public static HashMap deleteMember(String gId, String uId){ - return null; + public static DeleteResult deleteMember(String gId, String uId){ + Session session = SessionManager.getInstance().getSession(); + Group editGroup = session.get(Group.class, gId); + User editUser = session.get(User.class, uId); + if(editGroup != null){ + if(editGroup.getMembers().contains(editUser)){ + editUser.exitGroup(editGroup); + editGroup.deleteMember(editUser); + if(editGroup.getMembers().size() == 0){ + //ユーザーが存在しないグループは削除 + session.delete(editGroup); + } + return DeleteResult.SUCCESS; + } + } + return DeleteResult.FAILURE; } /* diff --git a/src/main/resources/Group.hbm.xml b/src/main/resources/Group.hbm.xml index 41104b5..061392e 100644 --- a/src/main/resources/Group.hbm.xml +++ b/src/main/resources/Group.hbm.xml @@ -25,12 +25,11 @@ table = "GROUP_MEMBER" lazy = "true" inverse = "true" - cascade = "all"> + cascade = "persist, merge"> + column="UID"> diff --git a/src/main/resources/User.hbm.xml b/src/main/resources/User.hbm.xml index de6de5f..d4528e7 100644 --- a/src/main/resources/User.hbm.xml +++ b/src/main/resources/User.hbm.xml @@ -22,13 +22,11 @@ + cascade = "refresh"> + column="GID">