UNPKG

@thisisagile/easy

Version:

Straightforward library for building domain-driven microservice architectures

1 lines 3.71 kB
{"version":3,"sources":["../../src/sql/TableGateway.ts"],"sourcesContent":["import { Table } from './Table';\nimport { PageList, PageOptions, toPageList } from '../types/PageList';\nimport { QueryProvider } from '../data/QueryProvider';\nimport { Gateway } from '../types/Gateway';\nimport { Json } from '../types/Json';\nimport { Id } from '../types/Id';\nimport { Optional } from '../types/Types';\nimport { ifDefined } from '../utils/If';\nimport { isDefined } from '../types/Is';\nimport { when } from '../validation/When';\n\nexport type TableOptions = PageOptions & { provider?: QueryProvider };\n\nexport class TableGateway<T extends Table> extends Gateway<PageOptions> {\n constructor(\n readonly table: T,\n readonly provider = table.db.provide<QueryProvider>()\n ) {\n super();\n }\n\n protected provide = ({ provider }: TableOptions = {}): QueryProvider => provider ?? this.provider;\n\n all(options?: TableOptions): Promise<PageList<Json>> {\n return this.provide(options)\n .query(this.table.select())\n .then(js =>\n toPageList(\n js.map(j => this.table.in(j)),\n options\n )\n );\n }\n\n byId(id: Id, options?: TableOptions): Promise<Optional<Json>> {\n return this.provide(options)\n .query(this.table.select().where(this.table.id.is(id)))\n .then(js => js.first())\n .then(j => ifDefined(j, this.table.in(j)));\n }\n\n exists(id: Id, options?: TableOptions): Promise<boolean> {\n return this.byId(id).then(j => isDefined(j));\n }\n\n add(item: Json, options?: TableOptions): Promise<Json> {\n return this.provide(options)\n .query(this.table.insert(item))\n .then(js => when(js.first()).not.isDefined.reject(`Could not add items with id ${item.id}`))\n .then(j => this.table.in(j));\n }\n\n remove(id: Id, options?: TableOptions): Promise<boolean> {\n return this.provide(options)\n .command(this.table.delete().where(this.table.id.is(id)))\n .then(() => true);\n }\n\n update(item: Json, options?: TableOptions): Promise<Json> {\n return this.provide(options)\n .query(this.table.update(item).where(this.table.id.is(item.id)))\n .then(js => when(js.first()).not.isDefined.reject(`Could not update item with id ${item.id}`))\n .then(j => this.table.in(j));\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaO,IAAM,eAAN,cAA4C,QAAqB;AAAA,EACtE,YACW,OACA,WAAW,MAAM,GAAG,QAAuB,GACpD;AACA,UAAM;AAHG;AACA;AAAA,EAGX;AAAA,EAEU,UAAU,CAAC,EAAE,SAAS,IAAkB,CAAC,MAAqB,YAAY,KAAK;AAAA,EAEzF,IAAI,SAAiD;AACnD,WAAO,KAAK,QAAQ,OAAO,EACxB,MAAM,KAAK,MAAM,OAAO,CAAC,EACzB;AAAA,MAAK,QACJ;AAAA,QACE,GAAG,IAAI,OAAK,KAAK,MAAM,GAAG,CAAC,CAAC;AAAA,QAC5B;AAAA,MACF;AAAA,IACF;AAAA,EACJ;AAAA,EAEA,KAAK,IAAQ,SAAiD;AAC5D,WAAO,KAAK,QAAQ,OAAO,EACxB,MAAM,KAAK,MAAM,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,EACrD,KAAK,QAAM,GAAG,MAAM,CAAC,EACrB,KAAK,OAAK,UAAU,GAAG,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC;AAAA,EAC7C;AAAA,EAEA,OAAO,IAAQ,SAA0C;AACvD,WAAO,KAAK,KAAK,EAAE,EAAE,KAAK,OAAK,UAAU,CAAC,CAAC;AAAA,EAC7C;AAAA,EAEA,IAAI,MAAY,SAAuC;AACrD,WAAO,KAAK,QAAQ,OAAO,EACxB,MAAM,KAAK,MAAM,OAAO,IAAI,CAAC,EAC7B,KAAK,QAAM,KAAK,GAAG,MAAM,CAAC,EAAE,IAAI,UAAU,OAAO,+BAA+B,KAAK,EAAE,EAAE,CAAC,EAC1F,KAAK,OAAK,KAAK,MAAM,GAAG,CAAC,CAAC;AAAA,EAC/B;AAAA,EAEA,OAAO,IAAQ,SAA0C;AACvD,WAAO,KAAK,QAAQ,OAAO,EACxB,QAAQ,KAAK,MAAM,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,EACvD,KAAK,MAAM,IAAI;AAAA,EACpB;AAAA,EAEA,OAAO,MAAY,SAAuC;AACxD,WAAO,KAAK,QAAQ,OAAO,EACxB,MAAM,KAAK,MAAM,OAAO,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,EAC9D,KAAK,QAAM,KAAK,GAAG,MAAM,CAAC,EAAE,IAAI,UAAU,OAAO,iCAAiC,KAAK,EAAE,EAAE,CAAC,EAC5F,KAAK,OAAK,KAAK,MAAM,GAAG,CAAC,CAAC;AAAA,EAC/B;AACF;","names":[]}