repository.d.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. import {ModelId} from '../types.js';
  2. import {Flatten} from '../types.js';
  3. import {ModelData} from '../types.js';
  4. import {PartialBy} from '../types.js';
  5. import {Service} from '@e22m4u/js-service';
  6. import {Adapter} from '../adapter/index.js';
  7. import {WhereClause} from '../filter/index.js';
  8. import {FilterClause} from '../filter/index.js';
  9. import {ItemFilterClause} from '../filter/index.js';
  10. import {ServiceContainer} from '@e22m4u/js-service';
  11. import {DEFAULT_PRIMARY_KEY_PROPERTY_NAME} from '../definition/index.js';
  12. /**
  13. * Repository.
  14. */
  15. export declare class Repository<
  16. Data extends ModelData = ModelData,
  17. IdType extends ModelId = ModelId,
  18. IdName extends string = DEFAULT_PRIMARY_KEY_PROPERTY_NAME,
  19. FlatData extends ModelData = Flatten<Data>,
  20. > extends Service {
  21. /**
  22. * Model name.
  23. */
  24. get modelName(): string;
  25. /**
  26. * Datasource name.
  27. */
  28. get datasourceName(): string;
  29. /**
  30. * Constructor.
  31. *
  32. * @param container
  33. * @param modelName
  34. */
  35. constructor(container: ServiceContainer, modelName: string);
  36. /**
  37. * Get adapter.
  38. */
  39. getAdapter(): Promise<Adapter>;
  40. /**
  41. * Create.
  42. *
  43. * @param data
  44. * @param filter
  45. */
  46. create(
  47. data: OptionalUnlessRequiredId<IdName, FlatData>,
  48. filter?: ItemFilterClause,
  49. ): Promise<FlatData>;
  50. /**
  51. * Replace by id.
  52. *
  53. * @param id
  54. * @param data
  55. * @param filter
  56. */
  57. replaceById(
  58. id: IdType,
  59. data: WithoutId<IdName, FlatData>,
  60. filter?: ItemFilterClause,
  61. ): Promise<FlatData>;
  62. /**
  63. * Replace or create.
  64. *
  65. * @param data
  66. * @param filter
  67. */
  68. replaceOrCreate(
  69. data: OptionalUnlessRequiredId<IdName, Data>,
  70. filter?: ItemFilterClause,
  71. ): Promise<FlatData>;
  72. /**
  73. * Patch by id.
  74. *
  75. * @param id
  76. * @param data
  77. * @param filter
  78. */
  79. patchById(
  80. id: IdType,
  81. data: PartialWithoutId<IdName, Data>,
  82. filter?: ItemFilterClause,
  83. ): Promise<FlatData>;
  84. /**
  85. * Find.
  86. *
  87. * @param filter
  88. */
  89. find(filter?: FilterClause): Promise<FlatData[]>;
  90. /**
  91. * Find one.
  92. *
  93. * @param filter
  94. */
  95. findOne(filter?: FilterClause): Promise<FlatData | undefined>;
  96. /**
  97. * Find by id.
  98. *
  99. * @param id
  100. * @param filter
  101. */
  102. findById(id: IdType, filter?: ItemFilterClause): Promise<FlatData>;
  103. /**
  104. * Delete.
  105. *
  106. * @param where
  107. */
  108. delete(where?: WhereClause): Promise<number>;
  109. /**
  110. * Delete by id.
  111. *
  112. * @param id
  113. */
  114. deleteById(id: IdType): Promise<boolean>;
  115. /**
  116. * Exists.
  117. *
  118. * @param id
  119. */
  120. exists(id: IdType): Promise<boolean>;
  121. /**
  122. * Count.
  123. *
  124. * @param where
  125. */
  126. count(where?: WhereClause): Promise<number>;
  127. }
  128. /**
  129. * Removes id field.
  130. */
  131. type WithoutId<IdName extends string, Data extends ModelData> = Flatten<
  132. Omit<Data, IdName>
  133. >;
  134. /**
  135. * Makes fields as optional and remove id field.
  136. */
  137. type PartialWithoutId<IdName extends string, Data extends ModelData> = Flatten<
  138. Partial<Omit<Data, IdName>>
  139. >;
  140. /**
  141. * Makes the required id field as optional.
  142. */
  143. type OptionalUnlessRequiredId<
  144. IdName extends string,
  145. Data extends ModelData,
  146. > = Flatten<Data extends {[K in IdName]: any} ? PartialBy<Data, IdName> : Data>;