diff --git a/api/src/services/items.ts b/api/src/services/items.ts index cb28ca0607..0f94f8d1e6 100644 --- a/api/src/services/items.ts +++ b/api/src/services/items.ts @@ -6,7 +6,7 @@ import { Action, Accountability, PermissionsAction, - Item, + Item as AnyItem, Query, PrimaryKey, AbstractService, @@ -26,7 +26,7 @@ import getDefaultValue from '../utils/get-default-value'; import { InvalidPayloadException } from '../exceptions'; import { ForbiddenException } from '../exceptions'; -export class ItemsService implements AbstractService { +export class ItemsService implements AbstractService { collection: string; knex: Knex; accountability: Accountability | null; @@ -52,7 +52,7 @@ export class ItemsService implements AbstractService { const primaryKeyField = await this.schemaInspector.primary(this.collection); const columns = await this.schemaInspector.columns(this.collection); - let payloads = clone(toArray(data)); + let payloads: AnyItem[] = clone(toArray(data)); const savedPrimaryKeys = await this.knex.transaction(async (trx) => { const payloadService = new PayloadService(this.collection, { @@ -194,7 +194,7 @@ export class ItemsService implements AbstractService { return Array.isArray(data) ? savedPrimaryKeys : savedPrimaryKeys[0]; } - async readByQuery(query: Query): Promise { + async readByQuery(query: Query): Promise | Partial[]> { const authorizationService = new AuthorizationService({ accountability: this.accountability, knex: this.knex, @@ -210,20 +210,24 @@ export class ItemsService implements AbstractService { } const records = await runAST(ast, { knex: this.knex }); - return records; + return records as Partial | Partial[] | null; } readByKey( keys: PrimaryKey[], query?: Query, action?: PermissionsAction - ): Promise; - readByKey(key: PrimaryKey, query?: Query, action?: PermissionsAction): Promise; + ): Promise[]>; + readByKey( + key: PrimaryKey, + query?: Query, + action?: PermissionsAction + ): Promise>; async readByKey( key: PrimaryKey | PrimaryKey[], query: Query = {}, action: PermissionsAction = 'read' - ): Promise { + ): Promise | Partial[]> { query = clone(query); const primaryKeyField = await this.schemaInspector.primary(this.collection); const keys = toArray(key); @@ -260,7 +264,7 @@ export class ItemsService implements AbstractService { if (result === null) throw new ForbiddenException(); - return result; + return result as Partial | Partial[] | null; } update(data: Partial, keys: PrimaryKey[]): Promise; @@ -277,7 +281,7 @@ export class ItemsService implements AbstractService { if (data && key) { const keys = toArray(key); - let payload = clone(data); + let payload: Partial | Partial[] = clone(data); const customProcessed = await emitter.emitAsync( `${this.eventScope}.update.before`, @@ -550,11 +554,11 @@ export class ItemsService implements AbstractService { return await this.delete(keys); } - async readSingleton(query: Query) { + async readSingleton(query: Query): Promise> { query = clone(query); query.single = true; - const record = (await this.readByQuery(query)) as Item; + const record = (await this.readByQuery(query)) as Partial; if (!record) { const columns = await this.schemaInspector.columnInfo(this.collection); @@ -564,7 +568,7 @@ export class ItemsService implements AbstractService { defaults[column.name] = getDefaultValue(column); } - return defaults; + return defaults as Partial; } return record;