mirror of
				https://github.com/immich-app/immich.git
				synced 2025-10-31 18:47:09 -04:00 
			
		
		
		
	fix(server): Allow negative rating (for rejected images) (#15699)
Allow negative rating (for rejected images)
This commit is contained in:
		
							parent
							
								
									f44669447f
								
							
						
					
					
						commit
						fe1e09e51f
					
				| @ -701,6 +701,20 @@ describe('/asset', () => { | ||||
|       expect(status).toEqual(200); | ||||
|     }); | ||||
| 
 | ||||
|     it('should set the negative rating', async () => { | ||||
|       const { status, body } = await request(app) | ||||
|         .put(`/assets/${user1Assets[0].id}`) | ||||
|         .set('Authorization', `Bearer ${user1.accessToken}`) | ||||
|         .send({ rating: -1 }); | ||||
|       expect(body).toMatchObject({ | ||||
|         id: user1Assets[0].id, | ||||
|         exifInfo: expect.objectContaining({ | ||||
|           rating: -1, | ||||
|         }), | ||||
|       }); | ||||
|       expect(status).toEqual(200); | ||||
|     }); | ||||
| 
 | ||||
|     it('should reject invalid rating', async () => { | ||||
|       for (const test of [{ rating: 7 }, { rating: 3.5 }, { rating: null }]) { | ||||
|         const { status, body } = await request(app) | ||||
|  | ||||
| @ -67,7 +67,7 @@ class AssetBulkUpdateDto { | ||||
|   /// | ||||
|   num? longitude; | ||||
| 
 | ||||
|   /// Minimum value: 0 | ||||
|   /// Minimum value: -1 | ||||
|   /// Maximum value: 5 | ||||
|   /// | ||||
|   /// Please note: This property should have been non-nullable! Since the specification file | ||||
|  | ||||
							
								
								
									
										2
									
								
								mobile/openapi/lib/model/update_asset_dto.dart
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								mobile/openapi/lib/model/update_asset_dto.dart
									
									
									
										generated
									
									
									
								
							| @ -73,7 +73,7 @@ class UpdateAssetDto { | ||||
|   /// | ||||
|   num? longitude; | ||||
| 
 | ||||
|   /// Minimum value: 0 | ||||
|   /// Minimum value: -1 | ||||
|   /// Maximum value: 5 | ||||
|   /// | ||||
|   /// Please note: This property should have been non-nullable! Since the specification file | ||||
|  | ||||
| @ -7951,7 +7951,7 @@ | ||||
|           }, | ||||
|           "rating": { | ||||
|             "maximum": 5, | ||||
|             "minimum": 0, | ||||
|             "minimum": -1, | ||||
|             "type": "number" | ||||
|           } | ||||
|         }, | ||||
| @ -12780,7 +12780,7 @@ | ||||
|           }, | ||||
|           "rating": { | ||||
|             "maximum": 5, | ||||
|             "minimum": 0, | ||||
|             "minimum": -1, | ||||
|             "type": "number" | ||||
|           } | ||||
|         }, | ||||
|  | ||||
| @ -52,7 +52,7 @@ export class UpdateAssetBase { | ||||
|   @Optional() | ||||
|   @IsInt() | ||||
|   @Max(5) | ||||
|   @Min(0) | ||||
|   @Min(-1) | ||||
|   rating?: number; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -1162,6 +1162,17 @@ describe(MetadataService.name, () => { | ||||
|         }), | ||||
|       ); | ||||
|     }); | ||||
|     it('should handle valid negative rating value', async () => { | ||||
|       assetMock.getByIds.mockResolvedValue([assetStub.image]); | ||||
|       mockReadTags({ Rating: -1 }); | ||||
| 
 | ||||
|       await sut.handleMetadataExtraction({ id: assetStub.image.id }); | ||||
|       expect(assetMock.upsertExif).toHaveBeenCalledWith( | ||||
|         expect.objectContaining({ | ||||
|           rating: -1, | ||||
|         }), | ||||
|       ); | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   describe('handleQueueSidecar', () => { | ||||
|  | ||||
| @ -204,7 +204,7 @@ export class MetadataService extends BaseService { | ||||
|       // comments
 | ||||
|       description: String(exifTags.ImageDescription || exifTags.Description || '').trim(), | ||||
|       profileDescription: exifTags.ProfileDescription || null, | ||||
|       rating: validateRange(exifTags.Rating, 0, 5), | ||||
|       rating: validateRange(exifTags.Rating, -1, 5), | ||||
| 
 | ||||
|       // grouping
 | ||||
|       livePhotoCID: (exifTags.ContentIdentifier || exifTags.MediaGroupUUID) ?? null, | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user