repository.d.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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 object = ModelData,
  17. IdType extends ModelId = ModelId,
  18. IdName extends string = typeof DEFAULT_PRIMARY_KEY_PROPERTY_NAME,
  19. FlatData extends ModelData = Flatten<Data>,
  20. > extends Service {
  21. // it fixes unused generic bug
  22. private _Data?: Data;
  23. private _IdType?: IdType;
  24. private _IdName?: IdName;
  25. private _FlatData?: FlatData;
  26. /**
  27. * Model name.
  28. */
  29. get modelName(): string;
  30. /**
  31. * Datasource name.
  32. */
  33. get datasourceName(): string;
  34. /**
  35. * Constructor.
  36. *
  37. * @param container
  38. * @param modelName
  39. */
  40. constructor(container: ServiceContainer, modelName: string);
  41. /**
  42. * Get adapter.
  43. */
  44. getAdapter(): Promise<Adapter>;
  45. /**
  46. * Create.
  47. *
  48. * @param data
  49. * @param filter
  50. */
  51. create(
  52. data: OptionalUnlessRequiredId<IdName, FlatData>,
  53. filter?: ItemFilterClause,
  54. ): Promise<FlatData>;
  55. /**
  56. * Replace by id.
  57. *
  58. * @param id
  59. * @param data
  60. * @param filter
  61. */
  62. replaceById(
  63. id: IdType,
  64. data: WithoutId<IdName, FlatData>,
  65. filter?: ItemFilterClause,
  66. ): Promise<FlatData>;
  67. /**
  68. * Replace or create.
  69. *
  70. * @param data
  71. * @param filter
  72. */
  73. replaceOrCreate(
  74. data: OptionalUnlessRequiredId<IdName, Data>,
  75. filter?: ItemFilterClause,
  76. ): Promise<FlatData>;
  77. /**
  78. * Patch.
  79. *
  80. * @param data
  81. * @param where
  82. */
  83. patch(
  84. data: PartialWithoutId<IdName, Data>,
  85. where?: WhereClause,
  86. ): Promise<number>;
  87. /**
  88. * Patch by id.
  89. *
  90. * @param id
  91. * @param data
  92. * @param filter
  93. */
  94. patchById(
  95. id: IdType,
  96. data: PartialWithoutId<IdName, Data>,
  97. filter?: ItemFilterClause,
  98. ): Promise<FlatData>;
  99. /**
  100. * Find.
  101. *
  102. * @param filter
  103. */
  104. find(filter?: FilterClause): Promise<FlatData[]>;
  105. /**
  106. * Find one.
  107. *
  108. * @param filter
  109. */
  110. findOne(filter?: FilterClause): Promise<FlatData | undefined>;
  111. /**
  112. * Find by id.
  113. *
  114. * @param id
  115. * @param filter
  116. */
  117. findById(id: IdType, filter?: ItemFilterClause): Promise<FlatData>;
  118. /**
  119. * Delete.
  120. *
  121. * @param where
  122. */
  123. delete(where?: WhereClause): Promise<number>;
  124. /**
  125. * Delete by id.
  126. *
  127. * @param id
  128. */
  129. deleteById(id: IdType): Promise<boolean>;
  130. /**
  131. * Exists.
  132. *
  133. * @param id
  134. */
  135. exists(id: IdType): Promise<boolean>;
  136. /**
  137. * Count.
  138. *
  139. * @param where
  140. */
  141. count(where?: WhereClause): Promise<number>;
  142. }
  143. /**
  144. * Removes id field.
  145. */
  146. type WithoutId<IdName extends string, Data extends ModelData> = Flatten<
  147. Omit<Data, IdName>
  148. >;
  149. /**
  150. * Makes fields as optional and remove id field.
  151. */
  152. type PartialWithoutId<IdName extends string, Data extends object> = Flatten<
  153. Partial<Omit<Data, IdName>>
  154. >;
  155. /**
  156. * Makes the required id field as optional.
  157. */
  158. type OptionalUnlessRequiredId<
  159. IdName extends string,
  160. Data extends object,
  161. > = Flatten<Data extends {[K in IdName]: any} ? PartialBy<Data, IdName> : Data>;