Skip to content

Commit 15599d8

Browse files
Sheikah45Brutus5000
authored andcommitted
Add lifecycle hook to remove memberships from players
1 parent bd20847 commit 15599d8

File tree

3 files changed

+30
-9
lines changed

3 files changed

+30
-9
lines changed

src/inttest/java/com/faforever/api/data/ClanElideTest.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -167,14 +167,9 @@ private String generateTransferLeadershipContent(int clanId, int newLeaderId) {
167167

168168
@Test
169169
public void canDeleteClanAsLeader() throws Exception {
170-
Clan clan = clanRepository.findOneByName("Alpha Clan")
170+
clanRepository.findOneByName("Alpha Clan")
171171
.orElseThrow(() -> new IllegalStateException("Alpha Clan could not be found"));
172172

173-
List<Player> clanMember = new ArrayList<>();
174-
clan.getMemberships().stream()
175-
.map(ClanMembership::getPlayer)
176-
.forEach(clanMember::add);
177-
178173
mockMvc.perform(
179174
delete("/data/clan/1")
180175
.with(getOAuthTokenForUserId(USERID_CLAN_LEADER)))

src/main/java/com/faforever/api/data/domain/Clan.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,16 @@
22

33
import com.faforever.api.data.checks.IsEntityOwner;
44
import com.faforever.api.data.checks.Prefab;
5+
import com.faforever.api.data.hook.ClanHook;
56
import com.faforever.api.data.listeners.ClanChangeListener;
67
import com.faforever.api.data.listeners.ClanEnricherListener;
78
import com.faforever.api.data.validation.IsLeaderInClan;
89
import com.yahoo.elide.annotation.ComputedAttribute;
910
import com.yahoo.elide.annotation.CreatePermission;
1011
import com.yahoo.elide.annotation.DeletePermission;
1112
import com.yahoo.elide.annotation.Include;
13+
import com.yahoo.elide.annotation.LifeCycleHookBinding;
1214
import com.yahoo.elide.annotation.UpdatePermission;
13-
import lombok.Setter;
14-
import org.hibernate.annotations.BatchSize;
15-
1615
import jakarta.persistence.CascadeType;
1716
import jakarta.persistence.Column;
1817
import jakarta.persistence.Entity;
@@ -26,6 +25,9 @@
2625
import jakarta.validation.constraints.NotEmpty;
2726
import jakarta.validation.constraints.NotNull;
2827
import jakarta.validation.constraints.Size;
28+
import lombok.Setter;
29+
import org.hibernate.annotations.BatchSize;
30+
2931
import java.util.Set;
3032

3133
@Entity
@@ -36,6 +38,7 @@
3638
@Setter
3739
@IsLeaderInClan
3840
@EntityListeners({ClanEnricherListener.class, ClanChangeListener.class})
41+
@LifeCycleHookBinding(operation = LifeCycleHookBinding.Operation.DELETE, phase = LifeCycleHookBinding.TransactionPhase.PREFLUSH, hook = ClanHook.class)
3942
public class Clan extends AbstractEntity<Clan> implements OwnableEntity {
4043

4144
public static final String TYPE_NAME = "clan";
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.faforever.api.data.hook;
2+
3+
import com.faforever.api.data.domain.Clan;
4+
import com.faforever.api.data.domain.ClanMembership;
5+
import com.yahoo.elide.annotation.LifeCycleHookBinding.Operation;
6+
import com.yahoo.elide.annotation.LifeCycleHookBinding.TransactionPhase;
7+
import com.yahoo.elide.core.lifecycle.LifeCycleHook;
8+
import com.yahoo.elide.core.security.ChangeSpec;
9+
import com.yahoo.elide.core.security.RequestScope;
10+
import org.springframework.stereotype.Component;
11+
12+
import java.util.Optional;
13+
14+
@Component
15+
public class ClanHook implements LifeCycleHook<Clan> {
16+
17+
@Override
18+
public void execute(Operation operation, TransactionPhase phase, Clan clan, RequestScope requestScope, Optional<ChangeSpec> changes) {
19+
if (operation == Operation.DELETE) {
20+
clan.getMemberships().stream().map(ClanMembership::getPlayer).forEach(player -> player.setClanMembership(null));
21+
}
22+
}
23+
}

0 commit comments

Comments
 (0)