瀏覽代碼

change caching of profile image

Paul Paffe 2 年之前
父節點
當前提交
5874fc73ff

+ 8 - 0
server/src/domain/user/user.core.ts

@@ -116,6 +116,14 @@ export class UserCore {
     return createReadStream(user.profileImagePath);
   }
 
+  async getUserProfileImageHash(user: UserEntity): Promise<string> {
+    if (!user.profileImageHash) {
+      throw new NotFoundException('User does not have a profile image');
+    }
+    return user.profileImageHash; 
+
+
+
   async getList(filter?: UserListFilter): Promise<UserEntity[]> {
     return this.userRepository.getList(filter);
   }

+ 8 - 0
server/src/domain/user/user.service.ts

@@ -120,6 +120,14 @@ export class UserService {
     return this.userCore.getUserProfileImage(user);
   }
 
+  async getUserProfileImageHash(userId: string): Promise<string> {
+    const user = await this.userCore.get(userId);
+    if (!user) {
+      throw new NotFoundException('User not found');
+    }
+    return this.userCore.getUserProfileImageHash(user);
+  }
+
   async resetAdminPassword(ask: (admin: UserResponseDto) => Promise<string | undefined>) {
     const admin = await this.userCore.getAdmin();
     if (!admin) {

+ 2 - 1
server/src/immich/controllers/user.controller.ts

@@ -98,10 +98,11 @@ export class UserController {
   }
 
   @Get('/profile-image/:userId')
-  @Header('Cache-Control', 'private, max-age=86400, no-transform')
+  @Header('Cache-Control', 'private, no-cache, no-transform')
   async getProfileImage(@Param() { userId }: UserIdDto, @Response({ passthrough: true }) res: Res): Promise<any> {
     const readableStream = await this.service.getUserProfileImage(userId);
     res.header('Content-Type', 'image/jpeg');
+    res.header('ETag', await this.service.getUserProfileImageHash(userId));
     return new StreamableFile(readableStream);
   }
 }

+ 3 - 0
server/src/infra/entities/user.entity.ts

@@ -42,6 +42,9 @@ export class UserEntity {
   @Column({ default: '' })
   profileImagePath!: string;
 
+  @Column({ default: '' })
+  profileImageHash!: string;
+
   @Column({ default: true })
   shouldChangePassword!: boolean;