mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	fix: mapper function should be partial (#6475)
Small fix to make mapper function partial as it should be
This commit is contained in:
		
							parent
							
								
									82f4093c04
								
							
						
					
					
						commit
						1949d0134f
					
				| @ -34,16 +34,16 @@ export abstract class CRUDStore< | |||||||
| 
 | 
 | ||||||
|     protected readonly timer: (action: string) => Function; |     protected readonly timer: (action: string) => Function; | ||||||
| 
 | 
 | ||||||
|     protected toRow: (item: Partial<WriteModel>) => RowWriteModel; |     protected toRow: (item: Partial<WriteModel>) => Partial<RowWriteModel>; | ||||||
|     protected fromRow: (item: RowReadModel) => ReadModel; |     protected fromRow: (item: Partial<RowReadModel>) => Partial<ReadModel>; | ||||||
| 
 | 
 | ||||||
|     constructor( |     constructor( | ||||||
|         tableName: string, |         tableName: string, | ||||||
|         db: Db, |         db: Db, | ||||||
|         { eventBus }: CrudStoreConfig, |         { eventBus }: CrudStoreConfig, | ||||||
|         options?: Partial<{ |         options?: Partial<{ | ||||||
|             toRow: (item: WriteModel) => RowWriteModel; |             toRow: (item: Partial<WriteModel>) => Partial<RowWriteModel>; | ||||||
|             fromRow: (item: RowReadModel) => ReadModel; |             fromRow: (item: RowReadModel) => Partial<ReadModel>; | ||||||
|         }>, |         }>, | ||||||
|     ) { |     ) { | ||||||
|         this.tableName = tableName; |         this.tableName = tableName; | ||||||
| @ -64,14 +64,14 @@ export abstract class CRUDStore< | |||||||
|             allQuery = allQuery.where(this.toRow(query) as Record<string, any>); |             allQuery = allQuery.where(this.toRow(query) as Record<string, any>); | ||||||
|         } |         } | ||||||
|         const items = await allQuery; |         const items = await allQuery; | ||||||
|         return items.map(this.fromRow); |         return items.map(this.fromRow) as ReadModel[]; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     async insert(item: WriteModel): Promise<ReadModel> { |     async insert(item: WriteModel): Promise<ReadModel> { | ||||||
|         const rows = await this.db(this.tableName) |         const rows = await this.db(this.tableName) | ||||||
|             .insert(this.toRow(item)) |             .insert(this.toRow(item)) | ||||||
|             .returning('*'); |             .returning('*'); | ||||||
|         return this.fromRow(rows[0]); |         return this.fromRow(rows[0]) as ReadModel; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     async bulkInsert(items: WriteModel[]): Promise<ReadModel[]> { |     async bulkInsert(items: WriteModel[]): Promise<ReadModel[]> { | ||||||
| @ -81,7 +81,7 @@ export abstract class CRUDStore< | |||||||
|         const rows = await this.db(this.tableName) |         const rows = await this.db(this.tableName) | ||||||
|             .insert(items.map(this.toRow)) |             .insert(items.map(this.toRow)) | ||||||
|             .returning('*'); |             .returning('*'); | ||||||
|         return rows.map(this.fromRow); |         return rows.map(this.fromRow) as ReadModel[]; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     async update(id: IdType, item: Partial<WriteModel>): Promise<ReadModel> { |     async update(id: IdType, item: Partial<WriteModel>): Promise<ReadModel> { | ||||||
| @ -89,7 +89,7 @@ export abstract class CRUDStore< | |||||||
|             .where({ id }) |             .where({ id }) | ||||||
|             .update(this.toRow(item)) |             .update(this.toRow(item)) | ||||||
|             .returning('*'); |             .returning('*'); | ||||||
|         return this.fromRow(rows[0]); |         return this.fromRow(rows[0]) as ReadModel; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     async delete(id: IdType): Promise<void> { |     async delete(id: IdType): Promise<void> { | ||||||
| @ -127,6 +127,6 @@ export abstract class CRUDStore< | |||||||
|         if (!row) { |         if (!row) { | ||||||
|             throw new NotFoundError(`No item with id ${id}`); |             throw new NotFoundError(`No item with id ${id}`); | ||||||
|         } |         } | ||||||
|         return this.fromRow(row); |         return this.fromRow(row) as ReadModel; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -11,13 +11,13 @@ const snakeToCamelCase = (str: string) => | |||||||
|  * @returns a modified version of item with all fields in snake_case |  * @returns a modified version of item with all fields in snake_case | ||||||
|  */ |  */ | ||||||
| export const defaultToRow = <WriteModel, WriteRow>( | export const defaultToRow = <WriteModel, WriteRow>( | ||||||
|     item: WriteModel, |     item: Partial<WriteModel>, | ||||||
| ): WriteRow => { | ): Partial<WriteRow> => { | ||||||
|     const row: Partial<WriteRow> = {}; |     const row = {}; | ||||||
|     Object.entries(item as Record<string, any>).forEach(([key, value]) => { |     Object.entries(item as Record<string, any>).forEach(([key, value]) => { | ||||||
|         row[camelToSnakeCase(key)] = value; |         row[camelToSnakeCase(key)] = value; | ||||||
|     }); |     }); | ||||||
|     return row as WriteRow; |     return row; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
| @ -25,10 +25,12 @@ export const defaultToRow = <WriteModel, WriteRow>( | |||||||
|  * @param row is the input object |  * @param row is the input object | ||||||
|  * @returns a modified version of row with all fields in camelCase |  * @returns a modified version of row with all fields in camelCase | ||||||
|  */ |  */ | ||||||
| export const defaultFromRow = <ReadModel, ReadRow>(row: ReadRow): ReadModel => { | export const defaultFromRow = <ReadModel, ReadRow>( | ||||||
|     const model: Partial<ReadModel> = {}; |     row: Partial<ReadRow>, | ||||||
|  | ): Partial<ReadModel> => { | ||||||
|  |     const model = {}; | ||||||
|     Object.entries(row as Record<string, any>).forEach(([key, value]) => { |     Object.entries(row as Record<string, any>).forEach(([key, value]) => { | ||||||
|         model[snakeToCamelCase(key)] = value; |         model[snakeToCamelCase(key)] = value; | ||||||
|     }); |     }); | ||||||
|     return model as ReadModel; |     return model; | ||||||
| }; | }; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user