change caching of profile image

This commit is contained in:
Paul Paffe
2023-07-06 14:18:58 -04:00
parent fa648b1e00
commit 5874fc73ff
4 changed files with 21 additions and 1 deletions
+8
View File
@@ -116,6 +116,14 @@ export class UserCore {
return createReadStream(user.profileImagePath); 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[]> { async getList(filter?: UserListFilter): Promise<UserEntity[]> {
return this.userRepository.getList(filter); return this.userRepository.getList(filter);
} }
+8
View File
@@ -120,6 +120,14 @@ export class UserService {
return this.userCore.getUserProfileImage(user); 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>) { async resetAdminPassword(ask: (admin: UserResponseDto) => Promise<string | undefined>) {
const admin = await this.userCore.getAdmin(); const admin = await this.userCore.getAdmin();
if (!admin) { if (!admin) {
@@ -98,10 +98,11 @@ export class UserController {
} }
@Get('/profile-image/:userId') @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> { async getProfileImage(@Param() { userId }: UserIdDto, @Response({ passthrough: true }) res: Res): Promise<any> {
const readableStream = await this.service.getUserProfileImage(userId); const readableStream = await this.service.getUserProfileImage(userId);
res.header('Content-Type', 'image/jpeg'); res.header('Content-Type', 'image/jpeg');
res.header('ETag', await this.service.getUserProfileImageHash(userId));
return new StreamableFile(readableStream); return new StreamableFile(readableStream);
} }
} }
+3
View File
@@ -42,6 +42,9 @@ export class UserEntity {
@Column({ default: '' }) @Column({ default: '' })
profileImagePath!: string; profileImagePath!: string;
@Column({ default: '' })
profileImageHash!: string;
@Column({ default: true }) @Column({ default: true })
shouldChangePassword!: boolean; shouldChangePassword!: boolean;