Skip to content

Commit fbfbd04

Browse files
Ivan-ShamlBrutus5000
authored andcommitted
fix(cache): evict clan cache after changes to entity/related entities
Closes FAForever#812
1 parent 91159bf commit fbfbd04

4 files changed

Lines changed: 55 additions & 1 deletion

File tree

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.faforever.api.data.checks.IsEntityOwner;
44
import com.faforever.api.data.checks.Prefab;
5+
import com.faforever.api.data.listeners.ClanChangeListener;
56
import com.faforever.api.data.listeners.ClanEnricherListener;
67
import com.faforever.api.data.validation.IsLeaderInClan;
78
import com.yahoo.elide.annotation.ComputedAttribute;
@@ -34,7 +35,7 @@
3435
@CreatePermission(expression = Prefab.ALL)
3536
@Setter
3637
@IsLeaderInClan
37-
@EntityListeners(ClanEnricherListener.class)
38+
@EntityListeners({ClanEnricherListener.class, ClanChangeListener.class})
3839
public class Clan extends AbstractEntity<Clan> implements OwnableEntity {
3940

4041
public static final String TYPE_NAME = "clan";

‎src/main/java/com/faforever/api/data/domain/ClanMembership.java‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package com.faforever.api.data.domain;
22

33
import com.faforever.api.data.checks.IsClanMembershipDeletable;
4+
import com.faforever.api.data.listeners.ClanMembershipChangeListener;
45
import com.yahoo.elide.annotation.DeletePermission;
56
import com.yahoo.elide.annotation.Include;
67
import com.yahoo.elide.annotation.UpdatePermission;
8+
9+
import jakarta.persistence.EntityListeners;
10+
711
import lombok.Setter;
812

913
import jakarta.persistence.Entity;
@@ -19,6 +23,7 @@
1923
@DeletePermission(expression = IsClanMembershipDeletable.EXPRESSION)
2024
@UpdatePermission(expression = IsClanMembershipDeletable.EXPRESSION)
2125
@Setter
26+
@EntityListeners(ClanMembershipChangeListener.class)
2227
public class ClanMembership extends AbstractEntity<ClanMembership> {
2328

2429
private Clan clan;
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.faforever.api.data.listeners;
2+
3+
import com.faforever.api.data.domain.Clan;
4+
5+
import jakarta.persistence.PostRemove;
6+
import jakarta.persistence.PostUpdate;
7+
8+
import lombok.extern.slf4j.Slf4j;
9+
import org.springframework.cache.annotation.CacheEvict;
10+
import org.springframework.stereotype.Component;
11+
12+
@Component
13+
@Slf4j
14+
public class ClanChangeListener {
15+
16+
@CacheEvict(cacheNames = Clan.TYPE_NAME, allEntries = true)
17+
@PostUpdate
18+
@PostRemove
19+
public void clanChanged(Clan clan) {
20+
log.debug("Clan cache evicted, due to change on Clan with id: {}", clan.getId());
21+
}
22+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.faforever.api.data.listeners;
2+
3+
import com.faforever.api.data.domain.Clan;
4+
import com.faforever.api.data.domain.ClanMembership;
5+
6+
import jakarta.persistence.PostPersist;
7+
import jakarta.persistence.PostRemove;
8+
import jakarta.persistence.PostUpdate;
9+
10+
import lombok.extern.slf4j.Slf4j;
11+
import org.springframework.cache.annotation.CacheEvict;
12+
import org.springframework.stereotype.Component;
13+
14+
@Component
15+
@Slf4j
16+
public class ClanMembershipChangeListener {
17+
18+
@CacheEvict(cacheNames = Clan.TYPE_NAME, allEntries = true)
19+
@PostUpdate
20+
@PostRemove
21+
@PostPersist
22+
public void clanMembershipChanged(ClanMembership clanMembership) {
23+
log.debug("Clan cache evicted, due to change on ClanMembership with id: {}",
24+
clanMembership.getId());
25+
}
26+
}

0 commit comments

Comments
 (0)