cnpmcore 0.0.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/History.md +19 -0
  2. package/LICENSE +1 -1
  3. package/README.md +13 -4
  4. package/dist/app/common/AbstractService.d.ts +5 -0
  5. package/dist/app/{port/type/BaseController.js → common/AbstractService.js} +11 -9
  6. package/dist/app/common/FileUtil.d.ts +15 -0
  7. package/dist/app/common/FileUtil.js +77 -0
  8. package/dist/app/common/PackageUtil.d.ts +9 -0
  9. package/dist/app/common/PackageUtil.js +38 -16
  10. package/dist/app/common/SyncUtil.d.ts +2 -0
  11. package/dist/app/common/SyncUtil.js +17 -0
  12. package/dist/app/common/UserUtil.d.ts +5 -0
  13. package/dist/app/common/UserUtil.js +72 -0
  14. package/dist/app/common/adapter/BugVersionStore.d.ts +7 -0
  15. package/dist/app/common/adapter/BugVersionStore.js +28 -0
  16. package/dist/app/common/adapter/CacheAdapter.d.ts +13 -0
  17. package/dist/app/common/adapter/CacheAdapter.js +78 -0
  18. package/dist/app/common/adapter/NFSAdapter.d.ts +16 -0
  19. package/dist/app/common/adapter/NFSAdapter.js +62 -22
  20. package/dist/app/common/adapter/NPMRegistry.d.ts +78 -0
  21. package/dist/app/common/adapter/NPMRegistry.js +98 -0
  22. package/dist/app/common/adapter/QueueAdapter.d.ts +7 -0
  23. package/dist/app/common/adapter/QueueAdapter.js +37 -0
  24. package/dist/app/common/adapter/binary/AbstractBinary.d.ts +33 -0
  25. package/dist/app/common/adapter/binary/AbstractBinary.js +76 -0
  26. package/dist/app/common/adapter/binary/ApiBinary.d.ts +8 -0
  27. package/dist/app/common/adapter/binary/ApiBinary.js +31 -0
  28. package/dist/app/common/adapter/binary/BucketBinary.d.ts +5 -0
  29. package/dist/app/common/adapter/binary/BucketBinary.js +77 -0
  30. package/dist/app/common/adapter/binary/CypressBinary.d.ts +5 -0
  31. package/dist/app/common/adapter/binary/CypressBinary.js +63 -0
  32. package/dist/app/common/adapter/binary/ElectronBinary.d.ts +5 -0
  33. package/dist/app/common/adapter/binary/ElectronBinary.js +44 -0
  34. package/dist/app/common/adapter/binary/GithubBinary.d.ts +7 -0
  35. package/dist/app/common/adapter/binary/GithubBinary.js +93 -0
  36. package/dist/app/common/adapter/binary/ImageminBinary.d.ts +5 -0
  37. package/dist/app/common/adapter/binary/ImageminBinary.js +96 -0
  38. package/dist/app/common/adapter/binary/NodeBinary.d.ts +4 -0
  39. package/dist/app/common/adapter/binary/NodeBinary.js +41 -0
  40. package/dist/app/common/adapter/binary/NodePreGypBinary.d.ts +5 -0
  41. package/dist/app/common/adapter/binary/NodePreGypBinary.js +136 -0
  42. package/dist/app/common/adapter/binary/NwjsBinary.d.ts +6 -0
  43. package/dist/app/common/adapter/binary/NwjsBinary.js +47 -0
  44. package/dist/app/common/adapter/binary/PlaywrightBinary.d.ts +5 -0
  45. package/dist/app/common/adapter/binary/PlaywrightBinary.js +214 -0
  46. package/dist/app/common/adapter/binary/PuppeteerBinary.d.ts +6 -0
  47. package/dist/app/common/adapter/binary/PuppeteerBinary.js +125 -0
  48. package/dist/app/common/adapter/binary/SqlcipherBinary.d.ts +5 -0
  49. package/dist/app/common/adapter/binary/SqlcipherBinary.js +78 -0
  50. package/dist/app/common/aop/AsyncTimer.d.ts +9 -0
  51. package/dist/app/common/aop/AsyncTimer.js +36 -0
  52. package/dist/app/common/constants.d.ts +2 -0
  53. package/dist/app/common/constants.js +6 -0
  54. package/dist/app/common/dayjs.d.ts +2 -0
  55. package/dist/app/common/dayjs.js +10 -0
  56. package/dist/app/common/enum/Task.d.ts +12 -0
  57. package/dist/app/common/enum/Task.js +18 -0
  58. package/dist/app/common/enum/User.d.ts +5 -0
  59. package/dist/app/common/enum/User.js +10 -0
  60. package/dist/app/common/typing.d.ts +28 -0
  61. package/dist/app/common/typing.js +3 -0
  62. package/dist/app/core/entity/Binary.d.ts +28 -0
  63. package/dist/app/core/entity/Binary.js +29 -0
  64. package/dist/app/core/entity/BugVersion.d.ts +14 -0
  65. package/dist/app/core/entity/BugVersion.js +43 -0
  66. package/dist/app/core/entity/Change.d.ts +17 -0
  67. package/dist/app/core/entity/Change.js +20 -0
  68. package/dist/app/core/entity/Dist.d.ts +21 -0
  69. package/dist/app/core/entity/Dist.js +1 -2
  70. package/dist/app/core/entity/Entity.d.ts +11 -0
  71. package/dist/app/core/entity/Entity.js +3 -3
  72. package/dist/app/core/entity/Package.d.ts +45 -0
  73. package/dist/app/core/entity/Package.js +33 -25
  74. package/dist/app/core/entity/PackageTag.d.ts +17 -0
  75. package/dist/app/core/entity/PackageVersion.d.ts +26 -0
  76. package/dist/app/core/entity/PackageVersionBlock.d.ts +17 -0
  77. package/dist/app/core/entity/PackageVersionBlock.js +20 -0
  78. package/dist/app/core/entity/PackageVersionManifest.d.ts +17 -0
  79. package/dist/app/core/entity/PackageVersionManifest.js +20 -0
  80. package/dist/app/core/entity/Task.d.ts +43 -0
  81. package/dist/app/core/entity/Task.js +94 -0
  82. package/dist/app/core/entity/Token.d.ts +24 -0
  83. package/dist/app/core/entity/Token.js +23 -0
  84. package/dist/app/core/entity/User.d.ts +25 -0
  85. package/dist/app/core/entity/User.js +24 -0
  86. package/dist/app/core/event/BugVersionFixHandler.d.ts +6 -0
  87. package/dist/app/core/event/BugVersionFixHandler.js +42 -0
  88. package/dist/app/core/event/CacheCleaner.d.ts +38 -0
  89. package/dist/app/core/event/CacheCleaner.js +119 -0
  90. package/dist/app/core/event/ChangesStream.d.ts +32 -0
  91. package/dist/app/core/event/ChangesStream.js +106 -0
  92. package/dist/app/core/event/StoreManifest.d.ts +11 -0
  93. package/dist/app/core/event/StoreManifest.js +54 -0
  94. package/dist/app/core/event/index.d.ts +27 -0
  95. package/dist/app/core/event/index.js +11 -3
  96. package/dist/app/core/service/BinarySyncerService.d.ts +23 -0
  97. package/dist/app/core/service/BinarySyncerService.js +281 -0
  98. package/dist/app/core/service/BugVersionService.d.ts +11 -0
  99. package/dist/app/core/service/BugVersionService.js +86 -0
  100. package/dist/app/core/service/CacheService.d.ts +33 -0
  101. package/dist/app/core/service/CacheService.js +75 -0
  102. package/dist/app/core/service/ChangesStreamService.d.ts +11 -0
  103. package/dist/app/core/service/ChangesStreamService.js +186 -0
  104. package/dist/app/core/service/PackageManagerService.d.ts +83 -0
  105. package/dist/app/core/service/PackageManagerService.js +675 -78
  106. package/dist/app/core/service/PackageSyncerService.d.ts +24 -0
  107. package/dist/app/core/service/PackageSyncerService.js +667 -0
  108. package/dist/app/core/service/TaskService.d.ts +22 -0
  109. package/dist/app/core/service/TaskService.js +142 -0
  110. package/dist/app/core/service/UserService.d.ts +36 -0
  111. package/dist/app/core/service/UserService.js +120 -0
  112. package/dist/app/core/util/EntityUtil.d.ts +8 -0
  113. package/dist/app/core/util/EntityUtil.js +3 -3
  114. package/dist/app/infra/NFSClientAdapter.d.ts +18 -0
  115. package/dist/app/infra/NFSClientAdapter.js +74 -0
  116. package/dist/app/infra/package.json +6 -0
  117. package/dist/app/port/UserRoleManager.d.ts +24 -0
  118. package/dist/app/port/UserRoleManager.js +146 -0
  119. package/dist/app/port/controller/AbstractController.d.ts +32 -0
  120. package/dist/app/port/controller/AbstractController.js +112 -0
  121. package/dist/app/port/controller/BinarySyncController.d.ts +36 -0
  122. package/dist/app/port/controller/BinarySyncController.js +123 -0
  123. package/dist/app/port/controller/ChangesStreamController.d.ts +13 -0
  124. package/dist/app/port/controller/ChangesStreamController.js +53 -0
  125. package/dist/app/port/controller/DownloadController.d.ts +18 -0
  126. package/dist/app/port/controller/DownloadController.js +134 -0
  127. package/dist/app/port/controller/HomeController.d.ts +37 -0
  128. package/dist/app/port/controller/HomeController.js +72 -0
  129. package/dist/app/port/controller/PackageBlockController.d.ts +24 -0
  130. package/dist/app/port/controller/PackageBlockController.js +108 -0
  131. package/dist/app/port/controller/PackageSyncController.d.ts +35 -0
  132. package/dist/app/port/controller/PackageSyncController.js +205 -0
  133. package/dist/app/port/controller/PackageTagController.d.ts +12 -0
  134. package/dist/app/port/controller/PackageTagController.js +88 -0
  135. package/dist/app/port/controller/TokenController.d.ts +38 -0
  136. package/dist/app/port/controller/TokenController.js +125 -0
  137. package/dist/app/port/controller/UserController.d.ts +39 -0
  138. package/dist/app/port/controller/UserController.js +223 -0
  139. package/dist/app/port/controller/package/DownloadPackageVersionTar.d.ts +9 -0
  140. package/dist/app/port/controller/package/DownloadPackageVersionTar.js +82 -0
  141. package/dist/app/port/controller/package/RemovePackageVersionController.d.ts +8 -0
  142. package/dist/app/port/controller/package/RemovePackageVersionController.js +56 -0
  143. package/dist/app/port/controller/package/SavePackageVersionController.d.ts +48 -0
  144. package/dist/app/port/controller/package/SavePackageVersionController.js +221 -0
  145. package/dist/app/port/controller/package/ShowPackageController.d.ts +8 -0
  146. package/dist/app/port/controller/package/ShowPackageController.js +99 -0
  147. package/dist/app/port/controller/package/ShowPackageVersionController.d.ts +6 -0
  148. package/dist/app/port/controller/package/ShowPackageVersionController.js +55 -0
  149. package/dist/app/port/controller/package/UpdatePackageController.d.ts +17 -0
  150. package/dist/app/port/controller/package/UpdatePackageController.js +68 -0
  151. package/dist/app/port/middleware/AlwaysAuth.d.ts +2 -0
  152. package/dist/app/port/middleware/AlwaysAuth.js +17 -0
  153. package/dist/app/port/middleware/ErrorHandler.d.ts +2 -0
  154. package/dist/app/port/middleware/ErrorHandler.js +27 -5
  155. package/dist/app/port/middleware/Tracing.d.ts +2 -0
  156. package/dist/app/port/middleware/Tracing.js +22 -0
  157. package/dist/app/port/middleware/index.d.ts +2 -0
  158. package/dist/app/port/middleware/index.js +22 -0
  159. package/dist/app/port/typebox.d.ts +29 -0
  160. package/dist/app/port/typebox.js +71 -0
  161. package/dist/app/repository/AbstractRepository.d.ts +4 -0
  162. package/dist/app/repository/AbstractRepository.js +17 -0
  163. package/dist/app/repository/BinaryRepository.d.ts +7 -0
  164. package/dist/app/repository/BinaryRepository.js +45 -0
  165. package/dist/app/repository/ChangeRepository.d.ts +8 -0
  166. package/dist/app/repository/ChangeRepository.js +31 -0
  167. package/dist/app/repository/DistRepository.d.ts +15 -0
  168. package/dist/app/repository/DistRepository.js +69 -0
  169. package/dist/app/repository/PackageRepository.d.ts +39 -0
  170. package/dist/app/repository/PackageRepository.js +223 -36
  171. package/dist/app/repository/PackageVersionBlockRepository.d.ts +10 -0
  172. package/dist/app/repository/PackageVersionBlockRepository.js +51 -0
  173. package/dist/app/repository/PackageVersionDownloadRepository.d.ts +7 -0
  174. package/dist/app/repository/PackageVersionDownloadRepository.js +77 -0
  175. package/dist/app/repository/TaskRepository.d.ts +10 -0
  176. package/dist/app/repository/TaskRepository.js +82 -0
  177. package/dist/app/repository/UserRepository.d.ts +15 -0
  178. package/dist/app/repository/UserRepository.js +81 -0
  179. package/dist/app/repository/model/Binary.d.ts +13 -0
  180. package/dist/app/repository/model/Binary.js +53 -0
  181. package/dist/app/repository/model/Change.d.ts +10 -0
  182. package/dist/app/repository/model/Change.js +44 -0
  183. package/dist/app/repository/model/Dist.d.ts +12 -0
  184. package/dist/app/repository/model/Dist.js +10 -13
  185. package/dist/app/repository/model/HistoryTask.d.ts +18 -0
  186. package/dist/app/repository/model/HistoryTask.js +65 -0
  187. package/dist/app/repository/model/Maintainer.d.ts +8 -0
  188. package/dist/app/repository/model/Maintainer.js +36 -0
  189. package/dist/app/repository/model/Package.d.ts +13 -0
  190. package/dist/app/repository/model/Package.js +18 -9
  191. package/dist/app/repository/model/PackageDep.d.ts +11 -0
  192. package/dist/app/repository/model/PackageDep.js +9 -9
  193. package/dist/app/repository/model/PackageTag.d.ts +10 -0
  194. package/dist/app/repository/model/PackageTag.js +9 -9
  195. package/dist/app/repository/model/PackageVersion.d.ts +14 -0
  196. package/dist/app/repository/model/PackageVersion.js +9 -9
  197. package/dist/app/repository/model/PackageVersionBlock.d.ts +10 -0
  198. package/dist/app/repository/model/PackageVersionBlock.js +44 -0
  199. package/dist/app/repository/model/PackageVersionDownload.d.ts +40 -0
  200. package/dist/app/repository/model/PackageVersionDownload.js +132 -0
  201. package/dist/app/repository/model/PackageVersionManifest.d.ts +10 -0
  202. package/dist/app/repository/model/PackageVersionManifest.js +46 -0
  203. package/dist/app/repository/model/Task.d.ts +18 -0
  204. package/dist/app/repository/model/Task.js +65 -0
  205. package/dist/app/repository/model/Token.d.ts +13 -0
  206. package/dist/app/repository/model/Token.js +55 -0
  207. package/dist/app/repository/model/User.d.ts +14 -0
  208. package/dist/app/repository/model/User.js +56 -0
  209. package/dist/app/repository/util/EntityProperty.d.ts +1 -0
  210. package/dist/app/repository/util/ModelConvertor.d.ts +7 -0
  211. package/dist/app/repository/util/ModelConvertor.js +35 -2
  212. package/dist/app/repository/util/ModelConvertorUtil.d.ts +8 -0
  213. package/dist/app/schedule/ChangesStreamWorker.d.ts +8 -0
  214. package/dist/app/schedule/ChangesStreamWorker.js +27 -0
  215. package/dist/app/schedule/CheckRecentlyUpdatedPackages.d.ts +8 -0
  216. package/dist/app/schedule/CheckRecentlyUpdatedPackages.js +66 -0
  217. package/dist/app/schedule/CleanTempDir.d.ts +8 -0
  218. package/dist/app/schedule/CleanTempDir.js +48 -0
  219. package/dist/app/schedule/CreateSyncBinaryTask.d.ts +8 -0
  220. package/dist/app/schedule/CreateSyncBinaryTask.js +34 -0
  221. package/dist/app/schedule/SavePackageVersionDownloadCounter.d.ts +8 -0
  222. package/dist/app/schedule/SavePackageVersionDownloadCounter.js +21 -0
  223. package/dist/app/schedule/SyncBinaryWorker.d.ts +8 -0
  224. package/dist/app/schedule/SyncBinaryWorker.js +30 -0
  225. package/dist/app/schedule/SyncPackageWorker.d.ts +8 -0
  226. package/dist/app/schedule/SyncPackageWorker.js +44 -0
  227. package/dist/app/schedule/TaskTimeoutHandler.d.ts +9 -0
  228. package/dist/app/schedule/TaskTimeoutHandler.js +27 -0
  229. package/dist/app/schedule/UpdateTotalData.d.ts +9 -0
  230. package/dist/app/schedule/UpdateTotalData.js +103 -0
  231. package/dist/app.d.ts +11 -0
  232. package/dist/app.js +22 -0
  233. package/dist/config/binaries.d.ts +38 -0
  234. package/dist/config/binaries.js +810 -0
  235. package/dist/config/config.default.d.ts +3 -0
  236. package/dist/config/config.default.js +128 -9
  237. package/dist/config/config.unittest.d.ts +3 -0
  238. package/dist/config/config.unittest.js +18 -0
  239. package/dist/config/plugin.d.ts +3 -0
  240. package/dist/config/plugin.js +19 -3
  241. package/package.json +76 -21
  242. package/dist/app/common/adapter/NFSClientAdapter.js +0 -43
  243. package/dist/app/port/controller/PackageController.js +0 -273
@@ -13,69 +13,242 @@ const Package_2 = require("../core/entity/Package");
13
13
  const ModelConvertor_1 = require("./util/ModelConvertor");
14
14
  const PackageVersion_1 = require("../core/entity/PackageVersion");
15
15
  const PackageVersion_2 = require("./model/PackageVersion");
16
+ const PackageVersionManifest_1 = require("./model/PackageVersionManifest");
16
17
  const Dist_1 = require("./model/Dist");
17
18
  const Dist_2 = require("../core/entity/Dist");
18
19
  const PackageTag_1 = require("../core/entity/PackageTag");
19
20
  const PackageTag_2 = require("./model/PackageTag");
20
- let PackageRepository = class PackageRepository {
21
- async createPackage(pkgEntity) {
22
- await ModelConvertor_1.ModelConvertor.convertEntityToModel(pkgEntity, Package_1.Package);
21
+ const Maintainer_1 = require("./model/Maintainer");
22
+ const User_1 = require("./model/User");
23
+ const User_2 = require("../core/entity/User");
24
+ const AbstractRepository_1 = require("./AbstractRepository");
25
+ let PackageRepository = class PackageRepository extends AbstractRepository_1.AbstractRepository {
26
+ async findPackage(scope, name) {
27
+ const model = await Package_1.Package.findOne({ scope, name });
28
+ if (!model)
29
+ return null;
30
+ const manifestsDistModel = model.manifestsDistId ? await Dist_1.Dist.findOne({ distId: model.manifestsDistId }) : null;
31
+ const abbreviatedsDistModel = model.abbreviatedsDistId ? await Dist_1.Dist.findOne({ distId: model.abbreviatedsDistId }) : null;
32
+ const data = {
33
+ manifestsDist: manifestsDistModel && ModelConvertor_1.ModelConvertor.convertModelToEntity(manifestsDistModel, Dist_2.Dist),
34
+ abbreviatedsDist: abbreviatedsDistModel && ModelConvertor_1.ModelConvertor.convertModelToEntity(abbreviatedsDistModel, Dist_2.Dist),
35
+ };
36
+ const entity = ModelConvertor_1.ModelConvertor.convertModelToEntity(model, Package_2.Package, data);
37
+ return entity;
38
+ }
39
+ async findPackageId(scope, name) {
40
+ const model = await Package_1.Package.findOne({ scope, name }).select('packageId');
41
+ if (!model)
42
+ return null;
43
+ return model.packageId;
23
44
  }
24
45
  async savePackage(pkgEntity) {
25
46
  if (pkgEntity.id) {
26
47
  const model = await Package_1.Package.findOne({ id: pkgEntity.id });
27
48
  if (!model)
28
49
  return;
29
- model.description = pkgEntity.description;
30
- model.gmtModified = new Date();
31
- await model.save();
50
+ await ModelConvertor_1.ModelConvertor.saveEntityToModel(pkgEntity, model);
32
51
  }
33
52
  else {
34
53
  const model = await ModelConvertor_1.ModelConvertor.convertEntityToModel(pkgEntity, Package_1.Package);
35
- pkgEntity.id = model.id;
54
+ this.logger.info('[PackageRepository:savePackage:new] id: %s, packageId: %s', model.id, model.packageId);
55
+ }
56
+ }
57
+ async savePackageDist(pkgEntity, isFullManifests) {
58
+ const dist = isFullManifests ? pkgEntity.manifestsDist : pkgEntity.abbreviatedsDist;
59
+ if (!dist)
60
+ return;
61
+ if (dist.id) {
62
+ const model = await Dist_1.Dist.findOne({ id: dist.id });
63
+ if (!model)
64
+ return;
65
+ await ModelConvertor_1.ModelConvertor.saveEntityToModel(dist, model);
36
66
  }
67
+ else {
68
+ const model = await ModelConvertor_1.ModelConvertor.convertEntityToModel(dist, Dist_1.Dist);
69
+ this.logger.info('[PackageRepository:savePackageDist:new] id: %s, distId: %s, packageId: %s', model.id, model.distId, pkgEntity.packageId);
70
+ }
71
+ await this.savePackage(pkgEntity);
72
+ }
73
+ async removePackageDist(pkgEntity, isFullManifests) {
74
+ const dist = isFullManifests ? pkgEntity.manifestsDist : pkgEntity.abbreviatedsDist;
75
+ if (!dist)
76
+ return;
77
+ const model = await Dist_1.Dist.findOne({ id: dist.id });
78
+ if (!model)
79
+ return;
80
+ await model.remove();
81
+ this.logger.info('[PackageRepository:removePackageDist:remove] id: %s, distId: %s, packageId: %s', model.id, model.distId, pkgEntity.packageId);
82
+ Reflect.set(dist, 'distId', null);
83
+ await this.savePackage(pkgEntity);
84
+ }
85
+ // Package Maintainers
86
+ // return true meaning create new record
87
+ async savePackageMaintainer(packageId, userId) {
88
+ let model = await Maintainer_1.Maintainer.findOne({ packageId, userId });
89
+ if (!model) {
90
+ model = await Maintainer_1.Maintainer.create({ packageId, userId });
91
+ this.logger.info('[PackageRepository:addPackageMaintainer:new] id: %s, packageId: %s, userId: %s', model.id, model.packageId, model.userId);
92
+ return true;
93
+ }
94
+ }
95
+ async listPackageMaintainers(packageId) {
96
+ const models = await Maintainer_1.Maintainer.find({ packageId });
97
+ const userModels = await User_1.User.find({ userId: models.map(m => m.userId) });
98
+ return userModels.map(user => ModelConvertor_1.ModelConvertor.convertModelToEntity(user, User_2.User));
99
+ }
100
+ async replacePackageMaintainers(packageId, userIds) {
101
+ await Maintainer_1.Maintainer.transaction(async () => {
102
+ // delete exists
103
+ // const removeCount = await MaintainerModel.remove({ packageId }, true, { transaction });
104
+ const removeCount = await Maintainer_1.Maintainer.remove({ packageId });
105
+ this.logger.info('[PackageRepository:replacePackageMaintainers:remove] %d rows, packageId: %s', removeCount, packageId);
106
+ // add news
107
+ for (const userId of userIds) {
108
+ // const model = await MaintainerModel.create({ packageId, userId }, transaction);
109
+ const model = await Maintainer_1.Maintainer.create({ packageId, userId });
110
+ this.logger.info('[PackageRepository:replacePackageMaintainers:new] id: %s, packageId: %s, userId: %s', model.id, model.packageId, model.userId);
111
+ }
112
+ });
113
+ }
114
+ async removePackageMaintainer(packageId, userId) {
115
+ const model = await Maintainer_1.Maintainer.findOne({ packageId, userId });
116
+ if (model) {
117
+ await model.remove();
118
+ this.logger.info('[PackageRepository:removePackageMaintainer:remove] id: %s, packageId: %s, userId: %s', model.id, model.packageId, model.userId);
119
+ return true;
120
+ }
121
+ return false;
122
+ }
123
+ // TODO: support paging
124
+ async listPackagesByUserId(userId) {
125
+ const models = await Maintainer_1.Maintainer.find({ userId });
126
+ const packageModels = await Package_1.Package.find({ packageId: models.map(m => m.packageId) });
127
+ return packageModels.map(pkg => ModelConvertor_1.ModelConvertor.convertModelToEntity(pkg, Package_2.Package));
37
128
  }
38
129
  async createPackageVersion(pkgVersionEntity) {
39
130
  await PackageVersion_2.PackageVersion.transaction(async function (transaction) {
40
- const [pkgVersionModel, manifestDistModel, tarDistModel, readmeDistModel, abbreviatedDistModel,] = await Promise.all([
131
+ await Promise.all([
132
+ // FIXME: transaction is not the options
41
133
  ModelConvertor_1.ModelConvertor.convertEntityToModel(pkgVersionEntity, PackageVersion_2.PackageVersion, transaction),
42
134
  ModelConvertor_1.ModelConvertor.convertEntityToModel(pkgVersionEntity.manifestDist, Dist_1.Dist, transaction),
43
135
  ModelConvertor_1.ModelConvertor.convertEntityToModel(pkgVersionEntity.tarDist, Dist_1.Dist, transaction),
44
136
  ModelConvertor_1.ModelConvertor.convertEntityToModel(pkgVersionEntity.readmeDist, Dist_1.Dist, transaction),
45
137
  ModelConvertor_1.ModelConvertor.convertEntityToModel(pkgVersionEntity.abbreviatedDist, Dist_1.Dist, transaction),
46
138
  ]);
47
- pkgVersionEntity.id = pkgVersionModel.id;
48
- pkgVersionEntity.tarDist.id = tarDistModel.id;
49
- pkgVersionEntity.manifestDist.id = manifestDistModel.id;
50
- pkgVersionEntity.readmeDist.id = readmeDistModel.id;
51
- pkgVersionEntity.abbreviatedDist.id = abbreviatedDistModel.id;
52
139
  });
53
140
  }
54
- async findPackage(scope, name) {
55
- const model = await Package_1.Package.findOne({ scope, name });
56
- if (!model)
57
- return null;
58
- const entity = ModelConvertor_1.ModelConvertor.convertModelToEntity(model, Package_2.Package);
59
- return entity;
141
+ async savePackageVersion(pkgVersionEntity) {
142
+ // only abbreviatedDist and manifestDist allow to change, like `deprecated` message
143
+ let model = await Dist_1.Dist.findOne({ id: pkgVersionEntity.manifestDist.id });
144
+ if (model) {
145
+ await ModelConvertor_1.ModelConvertor.saveEntityToModel(pkgVersionEntity.manifestDist, model);
146
+ }
147
+ model = await Dist_1.Dist.findOne({ id: pkgVersionEntity.abbreviatedDist.id });
148
+ if (model) {
149
+ await ModelConvertor_1.ModelConvertor.saveEntityToModel(pkgVersionEntity.abbreviatedDist, model);
150
+ }
151
+ if (pkgVersionEntity.id) {
152
+ const model = await PackageVersion_2.PackageVersion.findOne({ id: pkgVersionEntity.id });
153
+ if (model) {
154
+ await ModelConvertor_1.ModelConvertor.saveEntityToModel(pkgVersionEntity, model);
155
+ }
156
+ }
60
157
  }
61
158
  async findPackageVersion(packageId, version) {
62
159
  const pkgVersionModel = await PackageVersion_2.PackageVersion.findOne({ packageId, version });
63
160
  if (!pkgVersionModel)
64
161
  return null;
162
+ return await this.fillPackageVersionEntitiyData(pkgVersionModel);
163
+ }
164
+ async listPackageVersions(packageId) {
165
+ // FIXME: read all versions will hit the memory limit
166
+ const models = await PackageVersion_2.PackageVersion.find({ packageId }).order('id desc');
167
+ const entities = [];
168
+ for (const model of models) {
169
+ entities.push(await this.fillPackageVersionEntitiyData(model));
170
+ }
171
+ return entities;
172
+ }
173
+ async listPackageVersionNames(packageId) {
174
+ const rows = await PackageVersion_2.PackageVersion.find({ packageId }).select('version').order('id desc');
175
+ return rows.map(row => row.version);
176
+ }
177
+ // only for unittest now
178
+ async removePackageVersions(packageId) {
179
+ const removeCount = await PackageVersion_2.PackageVersion.remove({ packageId });
180
+ this.logger.info('[PackageRepository:removePackageVersions:remove] %d rows, packageId: %s', removeCount, packageId);
181
+ }
182
+ async removePackageVersion(pkgVersion) {
183
+ const distRemoveCount = await Dist_1.Dist.remove({
184
+ distId: [
185
+ pkgVersion.abbreviatedDist.distId,
186
+ pkgVersion.manifestDist.distId,
187
+ pkgVersion.readmeDist.distId,
188
+ pkgVersion.tarDist.distId,
189
+ ],
190
+ });
191
+ const removeCount = await PackageVersion_2.PackageVersion.remove({ packageVersionId: pkgVersion.packageVersionId });
192
+ this.logger.info('[PackageRepository:removePackageVersion:remove] %d dist rows, %d rows, packageVersionId: %s', distRemoveCount, removeCount, pkgVersion.packageVersionId);
193
+ }
194
+ async savePackageVersionManifest(manifestEntity) {
195
+ let model = await PackageVersionManifest_1.PackageVersionManifest.findOne({ packageVersionId: manifestEntity.packageVersionId });
196
+ if (model) {
197
+ model.manifest = manifestEntity.manifest;
198
+ await model.save();
199
+ }
200
+ else {
201
+ model = await ModelConvertor_1.ModelConvertor.convertEntityToModel(manifestEntity, PackageVersionManifest_1.PackageVersionManifest);
202
+ this.logger.info('[PackageRepository:savePackageVersionManifest:new] id: %s, packageVersionId: %s', model.id, model.packageVersionId);
203
+ }
204
+ }
205
+ async findPackageVersionManifest(packageVersionId) {
206
+ const model = await PackageVersionManifest_1.PackageVersionManifest.findOne({ packageVersionId });
207
+ if (!model)
208
+ return null;
209
+ return ModelConvertor_1.ModelConvertor.convertModelToEntity(model, PackageVersionManifest_1.PackageVersionManifest);
210
+ }
211
+ async queryTotal() {
212
+ const lastPkg = await Package_1.Package.findOne().order('id', 'desc');
213
+ const lastVersion = await PackageVersion_2.PackageVersion.findOne().order('id', 'desc');
214
+ let packageCount = 0;
215
+ let packageVersionCount = 0;
216
+ let lastPackage = '';
217
+ let lastPackageVersion = '';
218
+ if (lastPkg) {
219
+ lastPackage = lastPkg.scope ? `${lastPkg.scope}/${lastPkg.name}` : lastPkg.name;
220
+ // FIXME: id will be out of range number
221
+ packageCount = Number(lastPkg.id);
222
+ }
223
+ if (lastVersion) {
224
+ const pkg = await Package_1.Package.findOne({ packageId: lastVersion.packageId });
225
+ if (pkg) {
226
+ const fullname = pkg.scope ? `${pkg.scope}/${pkg.name}` : pkg.name;
227
+ lastPackageVersion = `${fullname}@${lastVersion.version}`;
228
+ }
229
+ packageVersionCount = Number(lastVersion.id);
230
+ }
231
+ return {
232
+ packageCount,
233
+ packageVersionCount,
234
+ lastPackage,
235
+ lastPackageVersion,
236
+ };
237
+ }
238
+ async fillPackageVersionEntitiyData(model) {
65
239
  const [tarDistModel, readmeDistModel, manifestDistModel, abbreviatedDistModel,] = await Promise.all([
66
- Dist_1.Dist.findOne({ distId: pkgVersionModel.tarDistId }),
67
- Dist_1.Dist.findOne({ distId: pkgVersionModel.readmeDistId }),
68
- Dist_1.Dist.findOne({ distId: pkgVersionModel.manifestDistId }),
69
- Dist_1.Dist.findOne({ distId: pkgVersionModel.abbreviatedDistId }),
240
+ Dist_1.Dist.findOne({ distId: model.tarDistId }),
241
+ Dist_1.Dist.findOne({ distId: model.readmeDistId }),
242
+ Dist_1.Dist.findOne({ distId: model.manifestDistId }),
243
+ Dist_1.Dist.findOne({ distId: model.abbreviatedDistId }),
70
244
  ]);
71
245
  const data = {
72
- tarDist: ModelConvertor_1.ModelConvertor.convertModelToEntity(tarDistModel, Dist_2.Dist),
73
- readmeDist: ModelConvertor_1.ModelConvertor.convertModelToEntity(readmeDistModel, Dist_2.Dist),
74
- manifestDist: ModelConvertor_1.ModelConvertor.convertModelToEntity(manifestDistModel, Dist_2.Dist),
75
- abbreviatedDist: ModelConvertor_1.ModelConvertor.convertModelToEntity(abbreviatedDistModel, Dist_2.Dist),
246
+ tarDist: tarDistModel && ModelConvertor_1.ModelConvertor.convertModelToEntity(tarDistModel, Dist_2.Dist),
247
+ readmeDist: readmeDistModel && ModelConvertor_1.ModelConvertor.convertModelToEntity(readmeDistModel, Dist_2.Dist),
248
+ manifestDist: manifestDistModel && ModelConvertor_1.ModelConvertor.convertModelToEntity(manifestDistModel, Dist_2.Dist),
249
+ abbreviatedDist: abbreviatedDistModel && ModelConvertor_1.ModelConvertor.convertModelToEntity(abbreviatedDistModel, Dist_2.Dist),
76
250
  };
77
- const pkgVersionEntity = ModelConvertor_1.ModelConvertor.convertModelToEntity(pkgVersionModel, PackageVersion_1.PackageVersion, data);
78
- return pkgVersionEntity;
251
+ return ModelConvertor_1.ModelConvertor.convertModelToEntity(model, PackageVersion_1.PackageVersion, data);
79
252
  }
80
253
  async findPackageTag(packageId, tag) {
81
254
  const model = await PackageTag_2.PackageTag.findOne({ packageId, tag });
@@ -86,16 +259,30 @@ let PackageRepository = class PackageRepository {
86
259
  }
87
260
  async savePackageTag(packageTagEntity) {
88
261
  if (packageTagEntity.id) {
89
- const packageTagModel = await PackageTag_2.PackageTag.findOne({ id: packageTagEntity.id });
90
- if (!packageTagModel)
262
+ const model = await PackageTag_2.PackageTag.findOne({ id: packageTagEntity.id });
263
+ if (!model)
91
264
  return;
92
- packageTagModel.version = packageTagEntity.version;
93
- packageTagModel.gmtModified = packageTagEntity.gmtModified;
94
- await packageTagModel.save();
265
+ await ModelConvertor_1.ModelConvertor.saveEntityToModel(packageTagEntity, model);
95
266
  }
96
267
  else {
97
- await ModelConvertor_1.ModelConvertor.convertEntityToModel(packageTagEntity, PackageTag_2.PackageTag);
268
+ const model = await ModelConvertor_1.ModelConvertor.convertEntityToModel(packageTagEntity, PackageTag_2.PackageTag);
269
+ this.logger.info('[PackageRepository:savePackageTag:new] id: %s, packageTagId: %s, tags: %s => %s', model.id, model.packageTagId, model.tag, model.version);
270
+ }
271
+ }
272
+ async removePackageTag(packageTagEntity) {
273
+ const model = await PackageTag_2.PackageTag.findOne({ id: packageTagEntity.id });
274
+ if (!model)
275
+ return;
276
+ await model.remove();
277
+ this.logger.info('[PackageRepository:removePackageTag:remove] id: %s, packageTagId: %s, packageId: %s', model.id, model.packageTagId, model.packageId);
278
+ }
279
+ async listPackageTags(packageId) {
280
+ const models = await PackageTag_2.PackageTag.find({ packageId });
281
+ const entities = [];
282
+ for (const model of models) {
283
+ entities.push(ModelConvertor_1.ModelConvertor.convertModelToEntity(model, PackageTag_1.PackageTag));
98
284
  }
285
+ return entities;
99
286
  }
100
287
  };
101
288
  PackageRepository = __decorate([
@@ -104,4 +291,4 @@ PackageRepository = __decorate([
104
291
  })
105
292
  ], PackageRepository);
106
293
  exports.PackageRepository = PackageRepository;
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZVJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hcHAvcmVwb3NpdG9yeS9QYWNrYWdlUmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxzQ0FBd0Q7QUFDeEQsNkNBQTBEO0FBQzFELG9EQUFrRTtBQUNsRSwwREFBdUQ7QUFDdkQsa0VBQXVGO0FBQ3ZGLDJEQUErRTtBQUMvRSx1Q0FBaUQ7QUFDakQsOENBQXlEO0FBQ3pELDBEQUEyRTtBQUMzRSxtREFBbUU7QUFPbkUsSUFBYSxpQkFBaUIsR0FBOUIsTUFBYSxpQkFBaUI7SUFDNUIsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUF3QjtRQUMxQyxNQUFNLCtCQUFjLENBQUMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLGlCQUFZLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUF3QjtRQUN4QyxJQUFJLFNBQVMsQ0FBQyxFQUFFLEVBQUU7WUFDaEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxpQkFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPO1lBQ25CLEtBQUssQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQztZQUMxQyxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDL0IsTUFBTSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDcEI7YUFBTTtZQUNMLE1BQU0sS0FBSyxHQUFHLE1BQU0sK0JBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsaUJBQVksQ0FBQyxDQUFDO1lBQ2pGLFNBQVMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsb0JBQW9C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
294
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZVJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hcHAvcmVwb3NpdG9yeS9QYWNrYWdlUmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxzQ0FBd0Q7QUFDeEQsNkNBQTBEO0FBQzFELG9EQUFrRTtBQUNsRSwwREFBdUQ7QUFDdkQsa0VBQXVGO0FBQ3ZGLDJEQUErRTtBQUUvRSwyRUFBdUc7QUFDdkcsdUNBQWlEO0FBQ2pELDhDQUF5RDtBQUN6RCwwREFBMkU7QUFDM0UsbURBQW1FO0FBQ25FLG1EQUFtRTtBQUNuRSx1Q0FBaUQ7QUFDakQsOENBQXlEO0FBQ3pELDZEQUEwRDtBQUsxRCxJQUFhLGlCQUFpQixHQUE5QixNQUFhLGlCQUFrQixTQUFRLHVDQUFrQjtJQUN2RCxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQWEsRUFBRSxJQUFZO1FBQzNDLE1BQU0sS0FBSyxHQUFHLE1BQU0saUJBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3hCLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsTUFBTSxXQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDckgsTUFBTSxxQkFBcUIsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLE1BQU0sV0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDOUgsTUFBTSxJQUFJLEdBQUc7WUFDWCxhQUFhLEVBQUUsa0JBQWtCLElBQUksK0JBQWMs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
@@ -0,0 +1,10 @@
1
+ import { PackageVersionBlock as PackageVersionBlockModel } from './model/PackageVersionBlock';
2
+ import { PackageVersionBlock as PackageVersionBlockEntity } from '../core/entity/PackageVersionBlock';
3
+ import { AbstractRepository } from './AbstractRepository';
4
+ export declare class PackageVersionBlockRepository extends AbstractRepository {
5
+ savePackageVersionBlock(block: PackageVersionBlockEntity): Promise<void>;
6
+ findPackageBlock(packageId: string): Promise<PackageVersionBlockEntity | null>;
7
+ findPackageVersionBlock(packageId: string, version: string): Promise<PackageVersionBlockEntity | null>;
8
+ listPackageVersionBlocks(packageId: string): Promise<import("leoric").Collection<PackageVersionBlockModel>>;
9
+ removePackageVersionBlock(packageVersionBlockId: string): Promise<void>;
10
+ }
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.PackageVersionBlockRepository = void 0;
10
+ const tegg_1 = require("@eggjs/tegg");
11
+ const ModelConvertor_1 = require("./util/ModelConvertor");
12
+ const PackageVersionBlock_1 = require("./model/PackageVersionBlock");
13
+ const PackageVersionBlock_2 = require("../core/entity/PackageVersionBlock");
14
+ const AbstractRepository_1 = require("./AbstractRepository");
15
+ let PackageVersionBlockRepository = class PackageVersionBlockRepository extends AbstractRepository_1.AbstractRepository {
16
+ async savePackageVersionBlock(block) {
17
+ if (block.id) {
18
+ const model = await PackageVersionBlock_1.PackageVersionBlock.findOne({ id: block.id });
19
+ if (!model)
20
+ return;
21
+ await ModelConvertor_1.ModelConvertor.saveEntityToModel(block, model);
22
+ }
23
+ else {
24
+ const model = await ModelConvertor_1.ModelConvertor.convertEntityToModel(block, PackageVersionBlock_1.PackageVersionBlock);
25
+ this.logger.info('[PackageVersionBlockRepository:savePackageVersionBlock:new] id: %s, packageVersionBlockId: %s', model.id, model.packageVersionBlockId);
26
+ }
27
+ }
28
+ async findPackageBlock(packageId) {
29
+ return await this.findPackageVersionBlock(packageId, '*');
30
+ }
31
+ async findPackageVersionBlock(packageId, version) {
32
+ const model = await PackageVersionBlock_1.PackageVersionBlock.findOne({ packageId, version });
33
+ if (model)
34
+ return ModelConvertor_1.ModelConvertor.convertModelToEntity(model, PackageVersionBlock_2.PackageVersionBlock);
35
+ return null;
36
+ }
37
+ async listPackageVersionBlocks(packageId) {
38
+ return await PackageVersionBlock_1.PackageVersionBlock.find({ packageId });
39
+ }
40
+ async removePackageVersionBlock(packageVersionBlockId) {
41
+ const removeCount = await PackageVersionBlock_1.PackageVersionBlock.remove({ packageVersionBlockId });
42
+ this.logger.info('[PackageVersionBlockRepository:removePackageVersionBlock:remove] %d rows, packageVersionBlockId: %s', removeCount, packageVersionBlockId);
43
+ }
44
+ };
45
+ PackageVersionBlockRepository = __decorate([
46
+ (0, tegg_1.ContextProto)({
47
+ accessLevel: tegg_1.AccessLevel.PUBLIC,
48
+ })
49
+ ], PackageVersionBlockRepository);
50
+ exports.PackageVersionBlockRepository = PackageVersionBlockRepository;
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZVZlcnNpb25CbG9ja1JlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hcHAvcmVwb3NpdG9yeS9QYWNrYWdlVmVyc2lvbkJsb2NrUmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxzQ0FBd0Q7QUFDeEQsMERBQXVEO0FBQ3ZELHFFQUE4RjtBQUM5Riw0RUFBc0c7QUFDdEcsNkRBQTBEO0FBSzFELElBQWEsNkJBQTZCLEdBQTFDLE1BQWEsNkJBQThCLFNBQVEsdUNBQWtCO0lBQ25FLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxLQUFnQztRQUM1RCxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDWixNQUFNLEtBQUssR0FBRyxNQUFNLHlDQUF3QixDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPO1lBQ25CLE1BQU0sK0JBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDdEQ7YUFBTTtZQUNMLE1BQU0sS0FBSyxHQUFHLE1BQU0sK0JBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUseUNBQXdCLENBQUMsQ0FBQztZQUN6RixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywrRkFBK0YsRUFDOUcsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUMxQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsU0FBaUI7UUFDdEMsT0FBTyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxTQUFpQixFQUFFLE9BQWU7UUFDOUQsTUFBTSxLQUFLLEdBQUcsTUFBTSx5Q0FBd0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM3RSxJQUFJLEtBQUs7WUFBRSxPQUFPLCtCQUFjLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLHlDQUF5QixDQUFDLENBQUM7UUFDeEYsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxDQUFDLHdCQUF3QixDQUFDLFNBQWlCO1FBQzlDLE9BQU8sTUFBTSx5Q0FBd0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxLQUFLLENBQUMseUJBQXlCLENBQUMscUJBQTZCO1FBQzNELE1BQU0sV0FBVyxHQUFHLE1BQU0seUNBQXdCLENBQUMsTUFBTSxDQUFDLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHFHQUFxRyxFQUNwSCxXQUFXLEVBQUUscUJBQXFCLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQ0YsQ0FBQTtBQWhDWSw2QkFBNkI7SUFIekMsSUFBQSxtQkFBWSxFQUFDO1FBQ1osV0FBVyxFQUFFLGtCQUFXLENBQUMsTUFBTTtLQUNoQyxDQUFDO0dBQ1csNkJBQTZCLENBZ0N6QztBQWhDWSxzRUFBNkIifQ==
@@ -0,0 +1,7 @@
1
+ import { AbstractRepository } from './AbstractRepository';
2
+ import { PackageVersionDownload as PackageVersionDownloadModel } from './model/PackageVersionDownload';
3
+ export declare class PackageVersionDownloadRepository extends AbstractRepository {
4
+ plus(packageId: string, version: string, counter: number): Promise<void>;
5
+ query(packageId: string, start: Date, end: Date): Promise<import("leoric").Collection<PackageVersionDownloadModel>>;
6
+ saveSyncDataByMonth(packageId: string, yearMonth: number, counters: [string, number][]): Promise<void>;
7
+ }
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.PackageVersionDownloadRepository = void 0;
10
+ const tegg_1 = require("@eggjs/tegg");
11
+ const AbstractRepository_1 = require("./AbstractRepository");
12
+ const PackageVersionDownload_1 = require("./model/PackageVersionDownload");
13
+ let PackageVersionDownloadRepository = class PackageVersionDownloadRepository extends AbstractRepository_1.AbstractRepository {
14
+ async plus(packageId, version, counter) {
15
+ const now = new Date();
16
+ const yearMonth = now.getFullYear() * 100 + now.getMonth() + 1;
17
+ const date = new Date().getDate();
18
+ const field = date < 10 ? `d0${date}` : `d${date}`;
19
+ let model = await PackageVersionDownload_1.PackageVersionDownload.findOne({
20
+ packageId,
21
+ version,
22
+ yearMonth,
23
+ });
24
+ if (!model) {
25
+ // create a record
26
+ const attributes = {
27
+ packageId,
28
+ version,
29
+ yearMonth,
30
+ };
31
+ model = await PackageVersionDownload_1.PackageVersionDownload.create(attributes);
32
+ this.logger.info('[PackageVersionDownloadRepository:plus:new] id: %s, packageId: %s, version: %s, yearMonth: %s', model.id, model.packageId, model.version, model.yearMonth);
33
+ }
34
+ await PackageVersionDownload_1.PackageVersionDownload
35
+ .where({ id: model.id })
36
+ .increment(field, counter);
37
+ this.logger.info('[PackageVersionDownloadRepository:plus:increment] id: %s, packageId: %s, version: %s, field: %s%s, plus: %d', model.id, model.packageId, model.version, model.yearMonth, field, counter);
38
+ }
39
+ async query(packageId, start, end) {
40
+ const startYearMonth = start.getFullYear() * 100 + start.getMonth() + 1;
41
+ const endYearMonth = end.getFullYear() * 100 + end.getMonth() + 1;
42
+ const models = await PackageVersionDownload_1.PackageVersionDownload.find({
43
+ packageId,
44
+ yearMonth: { $gte: startYearMonth, $lte: endYearMonth },
45
+ });
46
+ return models;
47
+ }
48
+ async saveSyncDataByMonth(packageId, yearMonth, counters) {
49
+ const version = '*';
50
+ let model = await PackageVersionDownload_1.PackageVersionDownload.findOne({
51
+ packageId,
52
+ version,
53
+ yearMonth,
54
+ });
55
+ if (!model) {
56
+ // create a record
57
+ const attributes = {
58
+ packageId,
59
+ version,
60
+ yearMonth,
61
+ };
62
+ model = await PackageVersionDownload_1.PackageVersionDownload.create(attributes);
63
+ }
64
+ for (const [date, counter] of counters) {
65
+ const field = `d${date}`;
66
+ model[field] = counter;
67
+ }
68
+ await model.save();
69
+ }
70
+ };
71
+ PackageVersionDownloadRepository = __decorate([
72
+ (0, tegg_1.ContextProto)({
73
+ accessLevel: tegg_1.AccessLevel.PUBLIC,
74
+ })
75
+ ], PackageVersionDownloadRepository);
76
+ exports.PackageVersionDownloadRepository = PackageVersionDownloadRepository;
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZVZlcnNpb25Eb3dubG9hZFJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hcHAvcmVwb3NpdG9yeS9QYWNrYWdlVmVyc2lvbkRvd25sb2FkUmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxzQ0FBd0Q7QUFDeEQsNkRBQTBEO0FBQzFELDJFQUF1RztBQUt2RyxJQUFhLGdDQUFnQyxHQUE3QyxNQUFhLGdDQUFpQyxTQUFRLHVDQUFrQjtJQUN0RSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQWlCLEVBQUUsT0FBZSxFQUFFLE9BQWU7UUFDNUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDL0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ25ELElBQUksS0FBSyxHQUFHLE1BQU0sK0NBQTJCLENBQUMsT0FBTyxDQUFDO1lBQ3BELFNBQVM7WUFDVCxPQUFPO1lBQ1AsU0FBUztTQUNWLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixrQkFBa0I7WUFDbEIsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLFNBQVM7Z0JBQ1QsT0FBTztnQkFDUCxTQUFTO2FBQ1YsQ0FBQztZQUNGLEtBQUssR0FBRyxNQUFNLCtDQUEyQixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywrRkFBK0YsRUFDOUcsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsTUFBTSwrQ0FBMkI7YUFDOUIsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQzthQUN2QixTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDZHQUE2RyxFQUM1SCxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFpQixFQUFFLEtBQVcsRUFBRSxHQUFTO1FBQ25ELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4RSxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEUsTUFBTSxNQUFNLEdBQUcsTUFBTSwrQ0FBMkIsQ0FBQyxJQUFJLENBQUM7WUFDcEQsU0FBUztZQUNULFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRTtTQUN4RCxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFNBQWlCLEVBQUUsU0FBaUIsRUFBRSxRQUE0QjtRQUMxRixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDcEIsSUFBSSxLQUFLLEdBQUcsTUFBTSwrQ0FBMkIsQ0FBQyxPQUFPLENBQUM7WUFDcEQsU0FBUztZQUNULE9BQU87WUFDUCxTQUFTO1NBQ1YsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLGtCQUFrQjtZQUNsQixNQUFNLFVBQVUsR0FBRztnQkFDakIsU0FBUztnQkFDVCxPQUFPO2dCQUNQLFNBQVM7YUFDVixDQUFDO1lBQ0YsS0FBSyxHQUFHLE1BQU0sK0NBQTJCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsS0FBSyxNQUFNLENBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBRSxJQUFJLFFBQVEsRUFBRTtZQUN4QyxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3pCLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUM7U0FDeEI7UUFDRCxNQUFNLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixDQUFDO0NBQ0YsQ0FBQTtBQTdEWSxnQ0FBZ0M7SUFINUMsSUFBQSxtQkFBWSxFQUFDO1FBQ1osV0FBVyxFQUFFLGtCQUFXLENBQUMsTUFBTTtLQUNoQyxDQUFDO0dBQ1csZ0NBQWdDLENBNkQ1QztBQTdEWSw0RUFBZ0MifQ==
@@ -0,0 +1,10 @@
1
+ import { Task as TaskEntity } from '../core/entity/Task';
2
+ import { AbstractRepository } from './AbstractRepository';
3
+ import { TaskType, TaskState } from '../../app/common/enum/Task';
4
+ export declare class TaskRepository extends AbstractRepository {
5
+ saveTask(task: TaskEntity): Promise<void>;
6
+ saveTaskToHistory(task: TaskEntity): Promise<void>;
7
+ findTask(taskId: string): Promise<TaskEntity | null>;
8
+ findTaskByTargetName(targetName: string, type: TaskType, state?: TaskState): Promise<TaskEntity | null>;
9
+ findTimeoutTasks(taskState: TaskState, timeout: number): Promise<TaskEntity[]>;
10
+ }
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.TaskRepository = void 0;
10
+ const tegg_1 = require("@eggjs/tegg");
11
+ const ModelConvertor_1 = require("./util/ModelConvertor");
12
+ const Task_1 = require("./model/Task");
13
+ const HistoryTask_1 = require("./model/HistoryTask");
14
+ const Task_2 = require("../core/entity/Task");
15
+ const AbstractRepository_1 = require("./AbstractRepository");
16
+ let TaskRepository = class TaskRepository extends AbstractRepository_1.AbstractRepository {
17
+ async saveTask(task) {
18
+ if (task.id) {
19
+ const model = await Task_1.Task.findOne({ id: task.id });
20
+ if (!model)
21
+ return;
22
+ await ModelConvertor_1.ModelConvertor.saveEntityToModel(task, model);
23
+ }
24
+ else {
25
+ await ModelConvertor_1.ModelConvertor.convertEntityToModel(task, Task_1.Task);
26
+ }
27
+ }
28
+ async saveTaskToHistory(task) {
29
+ const model = await Task_1.Task.findOne({ id: task.id });
30
+ if (!model)
31
+ return;
32
+ const history = await HistoryTask_1.HistoryTask.findOne({ taskId: task.taskId });
33
+ if (history) {
34
+ await ModelConvertor_1.ModelConvertor.saveEntityToModel(task, history);
35
+ }
36
+ else {
37
+ await ModelConvertor_1.ModelConvertor.convertEntityToModel(task, HistoryTask_1.HistoryTask);
38
+ }
39
+ await model.remove();
40
+ }
41
+ async findTask(taskId) {
42
+ const task = await Task_1.Task.findOne({ taskId });
43
+ if (task) {
44
+ return ModelConvertor_1.ModelConvertor.convertModelToEntity(task, Task_2.Task);
45
+ }
46
+ // try to read from history
47
+ const history = await HistoryTask_1.HistoryTask.findOne({ taskId });
48
+ if (history) {
49
+ return ModelConvertor_1.ModelConvertor.convertModelToEntity(history, Task_2.Task);
50
+ }
51
+ return null;
52
+ }
53
+ async findTaskByTargetName(targetName, type, state) {
54
+ const where = { targetName, type };
55
+ if (state) {
56
+ where.state = state;
57
+ }
58
+ const task = await Task_1.Task.findOne(where);
59
+ if (task) {
60
+ return ModelConvertor_1.ModelConvertor.convertModelToEntity(task, Task_2.Task);
61
+ }
62
+ return null;
63
+ }
64
+ async findTimeoutTasks(taskState, timeout) {
65
+ const timeoutDate = new Date();
66
+ timeoutDate.setTime(timeoutDate.getTime() - timeout);
67
+ const models = await Task_1.Task.find({
68
+ state: taskState,
69
+ updatedAt: {
70
+ $lt: timeoutDate,
71
+ },
72
+ }).limit(1000);
73
+ return models.map(model => ModelConvertor_1.ModelConvertor.convertModelToEntity(model, Task_2.Task));
74
+ }
75
+ };
76
+ TaskRepository = __decorate([
77
+ (0, tegg_1.ContextProto)({
78
+ accessLevel: tegg_1.AccessLevel.PUBLIC,
79
+ })
80
+ ], TaskRepository);
81
+ exports.TaskRepository = TaskRepository;
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFza1JlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hcHAvcmVwb3NpdG9yeS9UYXNrUmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxzQ0FBd0Q7QUFDeEQsMERBQXVEO0FBQ3ZELHVDQUFpRDtBQUNqRCxxREFBc0U7QUFDdEUsOENBQXlEO0FBQ3pELDZEQUEwRDtBQU0xRCxJQUFhLGNBQWMsR0FBM0IsTUFBYSxjQUFlLFNBQVEsdUNBQWtCO0lBQ3BELEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBZ0I7UUFDN0IsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ1gsTUFBTSxLQUFLLEdBQUcsTUFBTSxXQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU87WUFDbkIsTUFBTSwrQkFBYyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNyRDthQUFNO1lBQ0wsTUFBTSwrQkFBYyxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxXQUFTLENBQUMsQ0FBQztTQUM1RDtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBZ0I7UUFDdEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxXQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUNuQixNQUFNLE9BQU8sR0FBRyxNQUFNLHlCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN4RSxJQUFJLE9BQU8sRUFBRTtZQUNYLE1BQU0sK0JBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDdkQ7YUFBTTtZQUNMLE1BQU0sK0JBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUseUJBQWdCLENBQUMsQ0FBQztTQUNuRTtRQUNELE1BQU0sS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQWM7UUFDM0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxXQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNqRCxJQUFJLElBQUksRUFBRTtZQUNSLE9BQU8sK0JBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsV0FBVSxDQUFDLENBQUM7U0FDOUQ7UUFDRCwyQkFBMkI7UUFDM0IsTUFBTSxPQUFPLEdBQUcsTUFBTSx5QkFBZ0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzNELElBQUksT0FBTyxFQUFFO1lBQ1gsT0FBTywrQkFBYyxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxXQUFVLENBQUMsQ0FBQztTQUNqRTtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxVQUFrQixFQUFFLElBQWMsRUFBRSxLQUFpQjtRQUM5RSxNQUFNLEtBQUssR0FBUSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN4QyxJQUFJLEtBQUssRUFBRTtZQUNULEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1NBQ3JCO1FBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxXQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLElBQUksSUFBSSxFQUFFO1lBQ1IsT0FBTywrQkFBYyxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxXQUFVLENBQUMsQ0FBQztTQUM5RDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFvQixFQUFFLE9BQWU7UUFDMUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMvQixXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUNyRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVMsQ0FBQyxJQUFJLENBQUM7WUFDbEMsS0FBSyxFQUFFLFNBQVM7WUFDaEIsU0FBUyxFQUFFO2dCQUNULEdBQUcsRUFBRSxXQUFXO2FBQ2pCO1NBQ0YsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNmLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLCtCQUFjLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLFdBQVUsQ0FBQyxDQUFDLENBQUM7SUFDckYsQ0FBQztDQUNGLENBQUE7QUEzRFksY0FBYztJQUgxQixJQUFBLG1CQUFZLEVBQUM7UUFDWixXQUFXLEVBQUUsa0JBQVcsQ0FBQyxNQUFNO0tBQ2hDLENBQUM7R0FDVyxjQUFjLENBMkQxQjtBQTNEWSx3Q0FBYyJ9
@@ -0,0 +1,15 @@
1
+ import { User as UserEntity } from '../core/entity/User';
2
+ import { Token as TokenEntity } from '../core/entity/Token';
3
+ import { AbstractRepository } from './AbstractRepository';
4
+ export declare class UserRepository extends AbstractRepository {
5
+ saveUser(user: UserEntity): Promise<void>;
6
+ findUserByName(name: string): Promise<UserEntity | null>;
7
+ findUserAndTokenByTokenKey(tokenKey: string): Promise<{
8
+ token: TokenEntity;
9
+ user: UserEntity;
10
+ } | null>;
11
+ findTokenByTokenKey(tokenKey: string): Promise<TokenEntity | null>;
12
+ saveToken(token: TokenEntity): Promise<void>;
13
+ removeToken(tokenId: string): Promise<void>;
14
+ listTokens(userId: string): Promise<TokenEntity[]>;
15
+ }