added tenantcode to dashboard statistics cacahe key

This commit is contained in:
Diamantis Tziotzios 2024-04-05 10:07:38 +03:00
parent 0ded82e5cb
commit 76a355891f
2 changed files with 31 additions and 6 deletions

View File

@ -4,6 +4,7 @@ import eu.eudat.authorization.AuthorizationFlags;
import eu.eudat.authorization.OwnedResource; import eu.eudat.authorization.OwnedResource;
import eu.eudat.authorization.Permission; import eu.eudat.authorization.Permission;
import eu.eudat.commons.enums.*; import eu.eudat.commons.enums.*;
import eu.eudat.commons.scope.tenant.TenantScope;
import eu.eudat.commons.scope.user.UserScope; import eu.eudat.commons.scope.user.UserScope;
import eu.eudat.commons.types.dashborad.RecentActivityItemEntity; import eu.eudat.commons.types.dashborad.RecentActivityItemEntity;
import eu.eudat.convention.ConventionService; import eu.eudat.convention.ConventionService;
@ -41,7 +42,8 @@ public class DashboardServiceImpl implements DashboardService {
private final BuilderFactory builderFactory; private final BuilderFactory builderFactory;
private final QueryFactory queryFactory; private final QueryFactory queryFactory;
private final UserScope userScope; private final UserScope userScope;
private final DashboardServiceProperties config; private final TenantScope tenantScope;
private final DashboardServiceProperties config;
private final ElasticQueryHelperService elasticQueryHelperService; private final ElasticQueryHelperService elasticQueryHelperService;
private final DashboardStatisticsCacheService dashboardStatisticsCacheService; private final DashboardStatisticsCacheService dashboardStatisticsCacheService;
@Autowired @Autowired
@ -49,13 +51,15 @@ public class DashboardServiceImpl implements DashboardService {
ConventionService conventionService, AuthorizationService authorizationService, ConventionService conventionService, AuthorizationService authorizationService,
BuilderFactory builderFactory, BuilderFactory builderFactory,
QueryFactory queryFactory, QueryFactory queryFactory,
UserScope userScope, UserScope userScope,
TenantScope tenantScope,
DashboardServiceProperties config, ElasticQueryHelperService elasticQueryHelperService, DashboardStatisticsCacheService dashboardStatisticsCacheService) { DashboardServiceProperties config, ElasticQueryHelperService elasticQueryHelperService, DashboardStatisticsCacheService dashboardStatisticsCacheService) {
this.conventionService = conventionService; this.conventionService = conventionService;
this.authorizationService = authorizationService; this.authorizationService = authorizationService;
this.builderFactory = builderFactory; this.builderFactory = builderFactory;
this.queryFactory = queryFactory; this.queryFactory = queryFactory;
this.userScope = userScope; this.userScope = userScope;
this.tenantScope = tenantScope;
this.config = config; this.config = config;
this.elasticQueryHelperService = elasticQueryHelperService; this.elasticQueryHelperService = elasticQueryHelperService;
this.dashboardStatisticsCacheService = dashboardStatisticsCacheService; this.dashboardStatisticsCacheService = dashboardStatisticsCacheService;
@ -138,7 +142,7 @@ public class DashboardServiceImpl implements DashboardService {
public DashboardStatistics getMyDashboardStatistics() throws InvalidApplicationException { public DashboardStatistics getMyDashboardStatistics() throws InvalidApplicationException {
this.authorizationService.authorizeAtLeastOneForce(this.userScope.getUserIdSafe() != null ? List.of(new OwnedResource(this.userScope.getUserIdSafe())) : null); this.authorizationService.authorizeAtLeastOneForce(this.userScope.getUserIdSafe() != null ? List.of(new OwnedResource(this.userScope.getUserIdSafe())) : null);
DashboardStatisticsCacheService.DashboardStatisticsCacheValue cacheValue = this.dashboardStatisticsCacheService.lookup(this.dashboardStatisticsCacheService.buildKey(this.userScope.getUserId().toString().toLowerCase(Locale.ROOT))); DashboardStatisticsCacheService.DashboardStatisticsCacheValue cacheValue = this.dashboardStatisticsCacheService.lookup(this.dashboardStatisticsCacheService.buildKey(this.dashboardStatisticsCacheService.generateUserTenantCacheKey(this.userScope.getUserId(), this.tenantScope.getTenantCode())));
if (cacheValue == null || cacheValue.getDashboardStatistics() == null) { if (cacheValue == null || cacheValue.getDashboardStatistics() == null) {
DmpUserQuery dmpUserLookup = this.queryFactory.query(DmpUserQuery.class); DmpUserQuery dmpUserLookup = this.queryFactory.query(DmpUserQuery.class);
dmpUserLookup.userIds(this.userScope.getUserId()); dmpUserLookup.userIds(this.userScope.getUserId());
@ -161,7 +165,7 @@ public class DashboardServiceImpl implements DashboardService {
statistics.getReferenceTypeStatistics().add(referenceTypeStatistics); statistics.getReferenceTypeStatistics().add(referenceTypeStatistics);
} }
} }
cacheValue = new DashboardStatisticsCacheService.DashboardStatisticsCacheValue(this.userScope.getUserId()); cacheValue = new DashboardStatisticsCacheService.DashboardStatisticsCacheValue(this.userScope.getUserId(), this.tenantScope.getTenantCode());
cacheValue.setPublic(false); cacheValue.setPublic(false);
cacheValue.setDashboardStatistics(statistics); cacheValue.setDashboardStatistics(statistics);
this.dashboardStatisticsCacheService.put(cacheValue); this.dashboardStatisticsCacheService.put(cacheValue);

View File

@ -1,5 +1,6 @@
package eu.eudat.service.dashborad; package eu.eudat.service.dashborad;
import eu.eudat.commons.scope.user.UserScope;
import eu.eudat.model.DashboardStatistics; import eu.eudat.model.DashboardStatistics;
import gr.cite.tools.cache.CacheService; import gr.cite.tools.cache.CacheService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -19,12 +20,14 @@ public class DashboardStatisticsCacheService extends CacheService<DashboardStati
this.isPublic = true; this.isPublic = true;
} }
public DashboardStatisticsCacheValue(UUID userId) { public DashboardStatisticsCacheValue(UUID userId, String tenantCode) {
this.userId = userId; this.userId = userId;
this.tenantCode = tenantCode;
this.isPublic = false; this.isPublic = false;
} }
private UUID userId; private UUID userId;
private String tenantCode;
private boolean isPublic; private boolean isPublic;
private DashboardStatistics dashboardStatistics; private DashboardStatistics dashboardStatistics;
@ -37,6 +40,14 @@ public class DashboardStatisticsCacheService extends CacheService<DashboardStati
this.userId = userId; this.userId = userId;
} }
public String getTenantCode() {
return tenantCode;
}
public void setTenantCode(String tenantCode) {
this.tenantCode = tenantCode;
}
public DashboardStatistics getDashboardStatistics() { public DashboardStatistics getDashboardStatistics() {
return dashboardStatistics; return dashboardStatistics;
} }
@ -71,7 +82,7 @@ public class DashboardStatisticsCacheService extends CacheService<DashboardStati
if (value.isPublic) return this.buildKey(publicKey); if (value.isPublic) return this.buildKey(publicKey);
else throw new IllegalArgumentException("Key not set"); else throw new IllegalArgumentException("Key not set");
} else { } else {
return this.buildKey(value.userId.toString().toLowerCase(Locale.ROOT)); return this.buildKey(this.generateUserTenantCacheKey(value.userId, value.tenantCode));
} }
} }
@ -80,4 +91,14 @@ public class DashboardStatisticsCacheService extends CacheService<DashboardStati
keyParts.put("$key$", key); keyParts.put("$key$", key);
return this.generateKey(keyParts); return this.generateKey(keyParts);
} }
public String generateUserTenantCacheKey(UUID userId, String tenantCode) {
StringBuilder builder = new StringBuilder();
builder.append(userId.toString().toLowerCase(Locale.ROOT));
if (tenantCode != null) {
builder.append("_");
builder.append(tenantCode.toLowerCase(Locale.ROOT));
}
return builder.toString();
}
} }