From 8e95b6ef9b8ce16a5f0accf8d3d48fc38a380024 Mon Sep 17 00:00:00 2001 From: ViacheslavKlimov Date: Fri, 15 Dec 2023 17:27:04 +0200 Subject: [PATCH] Update cache when image info is updated --- .../server/controller/ImageController.java | 16 +++++++++------- .../service/resource/DefaultTbImageService.java | 6 +++++- .../server/service/resource/TbImageService.java | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/controller/ImageController.java b/application/src/main/java/org/thingsboard/server/controller/ImageController.java index 71c0b5e5ca..4a613da2c2 100644 --- a/application/src/main/java/org/thingsboard/server/controller/ImageController.java +++ b/application/src/main/java/org/thingsboard/server/controller/ImageController.java @@ -145,10 +145,11 @@ public class ImageController extends BaseController { @PathVariable String type, @ApiParam(value = IMAGE_KEY_PARAM_DESCRIPTION, required = true) @PathVariable String key, - @RequestBody TbResourceInfo newImageInfo) throws ThingsboardException { + @RequestBody TbResourceInfo request) throws ThingsboardException { TbResourceInfo imageInfo = checkImageInfo(type, key, Operation.WRITE); - imageInfo.setTitle(newImageInfo.getTitle()); - return tbImageService.save(imageInfo, getCurrentUser()); + TbResourceInfo newImageInfo = new TbResourceInfo(imageInfo); + newImageInfo.setTitle(request.getTitle()); + return tbImageService.save(newImageInfo, imageInfo, getCurrentUser()); } @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") @@ -159,8 +160,9 @@ public class ImageController extends BaseController { @PathVariable String key, @PathVariable boolean isPublic) throws ThingsboardException { TbResourceInfo imageInfo = checkImageInfo(type, key, Operation.WRITE); - imageInfo.setPublic(isPublic); - return tbImageService.save(imageInfo, getCurrentUser()); + TbResourceInfo newImageInfo = new TbResourceInfo(imageInfo); + newImageInfo.setPublic(isPublic); + return tbImageService.save(newImageInfo, imageInfo, getCurrentUser()); } @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')") @@ -310,8 +312,8 @@ public class ImageController extends BaseController { .eTag(descriptor.getEtag()); if (!cacheKey.isPublic()) { result - .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + fileName) - .header("x-filename", fileName); + .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + fileName) + .header("x-filename", fileName); } if (systemImagesBrowserTtlInMinutes > 0 && imageInfo.getTenantId().isSysTenantId()) { result.cacheControl(CacheControl.maxAge(systemImagesBrowserTtlInMinutes, TimeUnit.MINUTES)); diff --git a/application/src/main/java/org/thingsboard/server/service/resource/DefaultTbImageService.java b/application/src/main/java/org/thingsboard/server/service/resource/DefaultTbImageService.java index 496f046713..9d8024d76f 100644 --- a/application/src/main/java/org/thingsboard/server/service/resource/DefaultTbImageService.java +++ b/application/src/main/java/org/thingsboard/server/service/resource/DefaultTbImageService.java @@ -134,12 +134,16 @@ public class DefaultTbImageService extends AbstractTbEntityService implements Tb } @Override - public TbResourceInfo save(TbResourceInfo imageInfo, User user) { + public TbResourceInfo save(TbResourceInfo imageInfo, TbResourceInfo oldImageInfo, User user) { TenantId tenantId = imageInfo.getTenantId(); TbResourceId imageId = imageInfo.getId(); try { imageInfo = imageService.saveImageInfo(imageInfo); notificationEntityService.logEntityAction(tenantId, imageId, imageInfo, ActionType.UPDATED, user); + + if (imageInfo.isPublic() != oldImageInfo.isPublic()) { + evictFromCache(tenantId, List.of(ImageCacheKey.forPublicImage(imageInfo.getPublicResourceKey()))); + } return imageInfo; } catch (Exception e) { notificationEntityService.logEntityAction(tenantId, imageId, imageInfo, ActionType.UPDATED, user, e); diff --git a/application/src/main/java/org/thingsboard/server/service/resource/TbImageService.java b/application/src/main/java/org/thingsboard/server/service/resource/TbImageService.java index 15f41d691d..d2917ece14 100644 --- a/application/src/main/java/org/thingsboard/server/service/resource/TbImageService.java +++ b/application/src/main/java/org/thingsboard/server/service/resource/TbImageService.java @@ -25,7 +25,7 @@ public interface TbImageService { TbResourceInfo save(TbResource image, User user) throws Exception; - TbResourceInfo save(TbResourceInfo imageInfo, User user); + TbResourceInfo save(TbResourceInfo imageInfo, TbResourceInfo oldImageInfo, User user); TbImageDeleteResult delete(TbResourceInfo imageInfo, User user, boolean force);