@dosgato/api 0.0.2

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 (330) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +74 -0
  3. package/dist/access/access.model.d.ts +2 -0
  4. package/dist/access/access.model.js +14 -0
  5. package/dist/access/access.model.js.map +1 -0
  6. package/dist/access/access.resolver.d.ts +15 -0
  7. package/dist/access/access.resolver.js +133 -0
  8. package/dist/access/access.resolver.js.map +1 -0
  9. package/dist/asset/asset.database.d.ts +12 -0
  10. package/dist/asset/asset.database.js +116 -0
  11. package/dist/asset/asset.database.js.map +1 -0
  12. package/dist/asset/asset.model.d.ts +81 -0
  13. package/dist/asset/asset.model.js +271 -0
  14. package/dist/asset/asset.model.js.map +1 -0
  15. package/dist/asset/asset.resolver.d.ts +32 -0
  16. package/dist/asset/asset.resolver.js +325 -0
  17. package/dist/asset/asset.resolver.js.map +1 -0
  18. package/dist/asset/asset.service.d.ts +35 -0
  19. package/dist/asset/asset.service.js +225 -0
  20. package/dist/asset/asset.service.js.map +1 -0
  21. package/dist/assetfolder/assetfolder.database.d.ts +7 -0
  22. package/dist/assetfolder/assetfolder.database.js +85 -0
  23. package/dist/assetfolder/assetfolder.database.js.map +1 -0
  24. package/dist/assetfolder/assetfolder.model.d.ts +56 -0
  25. package/dist/assetfolder/assetfolder.model.js +160 -0
  26. package/dist/assetfolder/assetfolder.model.js.map +1 -0
  27. package/dist/assetfolder/assetfolder.resolver.d.ts +25 -0
  28. package/dist/assetfolder/assetfolder.resolver.js +255 -0
  29. package/dist/assetfolder/assetfolder.resolver.js.map +1 -0
  30. package/dist/assetfolder/assetfolder.service.d.ts +39 -0
  31. package/dist/assetfolder/assetfolder.service.js +355 -0
  32. package/dist/assetfolder/assetfolder.service.js.map +1 -0
  33. package/dist/assetrule/assetrule.database.d.ts +5 -0
  34. package/dist/assetrule/assetrule.database.js +161 -0
  35. package/dist/assetrule/assetrule.database.js.map +1 -0
  36. package/dist/assetrule/assetrule.model.d.ts +71 -0
  37. package/dist/assetrule/assetrule.model.js +221 -0
  38. package/dist/assetrule/assetrule.model.js.map +1 -0
  39. package/dist/assetrule/assetrule.resolver.d.ts +12 -0
  40. package/dist/assetrule/assetrule.resolver.js +100 -0
  41. package/dist/assetrule/assetrule.resolver.js.map +1 -0
  42. package/dist/assetrule/assetrule.service.d.ts +26 -0
  43. package/dist/assetrule/assetrule.service.js +184 -0
  44. package/dist/assetrule/assetrule.service.js.map +1 -0
  45. package/dist/createdb.d.ts +2 -0
  46. package/dist/createdb.js +541 -0
  47. package/dist/createdb.js.map +1 -0
  48. package/dist/data/data.database.d.ts +7 -0
  49. package/dist/data/data.database.js +265 -0
  50. package/dist/data/data.database.js.map +1 -0
  51. package/dist/data/data.indexing.d.ts +2 -0
  52. package/dist/data/data.indexing.js +23 -0
  53. package/dist/data/data.indexing.js.map +1 -0
  54. package/dist/data/data.model.d.ts +69 -0
  55. package/dist/data/data.model.js +206 -0
  56. package/dist/data/data.model.js.map +1 -0
  57. package/dist/data/data.resolver.d.ts +36 -0
  58. package/dist/data/data.resolver.js +384 -0
  59. package/dist/data/data.resolver.js.map +1 -0
  60. package/dist/data/data.service.d.ts +41 -0
  61. package/dist/data/data.service.js +374 -0
  62. package/dist/data/data.service.js.map +1 -0
  63. package/dist/datafolder/datafolder.database.d.ts +7 -0
  64. package/dist/datafolder/datafolder.database.js +72 -0
  65. package/dist/datafolder/datafolder.database.js.map +1 -0
  66. package/dist/datafolder/datafolder.model.d.ts +48 -0
  67. package/dist/datafolder/datafolder.model.js +139 -0
  68. package/dist/datafolder/datafolder.model.js.map +1 -0
  69. package/dist/datafolder/datafolder.resolver.d.ts +24 -0
  70. package/dist/datafolder/datafolder.resolver.js +243 -0
  71. package/dist/datafolder/datafolder.resolver.js.map +1 -0
  72. package/dist/datafolder/datafolder.service.d.ts +32 -0
  73. package/dist/datafolder/datafolder.service.js +223 -0
  74. package/dist/datafolder/datafolder.service.js.map +1 -0
  75. package/dist/dataroot/dataroot.model.d.ts +19 -0
  76. package/dist/dataroot/dataroot.model.js +72 -0
  77. package/dist/dataroot/dataroot.model.js.map +1 -0
  78. package/dist/dataroot/dataroot.resolver.d.ts +11 -0
  79. package/dist/dataroot/dataroot.resolver.js +87 -0
  80. package/dist/dataroot/dataroot.resolver.js.map +1 -0
  81. package/dist/dataroot/dataroot.service.d.ts +12 -0
  82. package/dist/dataroot/dataroot.service.js +62 -0
  83. package/dist/dataroot/dataroot.service.js.map +1 -0
  84. package/dist/datarule/datarule.database.d.ts +5 -0
  85. package/dist/datarule/datarule.database.js +144 -0
  86. package/dist/datarule/datarule.database.js.map +1 -0
  87. package/dist/datarule/datarule.model.d.ts +55 -0
  88. package/dist/datarule/datarule.model.js +200 -0
  89. package/dist/datarule/datarule.model.js.map +1 -0
  90. package/dist/datarule/datarule.resolver.d.ts +13 -0
  91. package/dist/datarule/datarule.resolver.js +114 -0
  92. package/dist/datarule/datarule.resolver.js.map +1 -0
  93. package/dist/datarule/datarule.service.d.ts +27 -0
  94. package/dist/datarule/datarule.service.js +191 -0
  95. package/dist/datarule/datarule.service.js.map +1 -0
  96. package/dist/fixtures.d.ts +1 -0
  97. package/dist/fixtures.js +697 -0
  98. package/dist/fixtures.js.map +1 -0
  99. package/dist/fixturetemplates.d.ts +110 -0
  100. package/dist/fixturetemplates.js +178 -0
  101. package/dist/fixturetemplates.js.map +1 -0
  102. package/dist/globalrule/globalrule.database.d.ts +5 -0
  103. package/dist/globalrule/globalrule.database.js +65 -0
  104. package/dist/globalrule/globalrule.database.js.map +1 -0
  105. package/dist/globalrule/globalrule.model.d.ts +34 -0
  106. package/dist/globalrule/globalrule.model.js +120 -0
  107. package/dist/globalrule/globalrule.model.js.map +1 -0
  108. package/dist/globalrule/globalrule.resolver.d.ts +11 -0
  109. package/dist/globalrule/globalrule.resolver.js +85 -0
  110. package/dist/globalrule/globalrule.resolver.js.map +1 -0
  111. package/dist/globalrule/globalrule.service.d.ts +18 -0
  112. package/dist/globalrule/globalrule.service.js +111 -0
  113. package/dist/globalrule/globalrule.service.js.map +1 -0
  114. package/dist/group/group.database.d.ts +41 -0
  115. package/dist/group/group.database.js +190 -0
  116. package/dist/group/group.database.js.map +1 -0
  117. package/dist/group/group.model.d.ts +19 -0
  118. package/dist/group/group.model.js +70 -0
  119. package/dist/group/group.model.js.map +1 -0
  120. package/dist/group/group.resolver.d.ts +27 -0
  121. package/dist/group/group.resolver.js +275 -0
  122. package/dist/group/group.resolver.js.map +1 -0
  123. package/dist/group/group.service.d.ts +46 -0
  124. package/dist/group/group.service.js +384 -0
  125. package/dist/group/group.service.js.map +1 -0
  126. package/dist/index.d.ts +18 -0
  127. package/dist/index.js +109 -0
  128. package/dist/index.js.map +1 -0
  129. package/dist/internal.d.ts +88 -0
  130. package/dist/internal.js +89 -0
  131. package/dist/internal.js.map +1 -0
  132. package/dist/migrations.d.ts +2 -0
  133. package/dist/migrations.js +41 -0
  134. package/dist/migrations.js.map +1 -0
  135. package/dist/organization/organization.database.d.ts +2 -0
  136. package/dist/organization/organization.database.js +16 -0
  137. package/dist/organization/organization.database.js.map +1 -0
  138. package/dist/organization/organization.model.d.ts +5 -0
  139. package/dist/organization/organization.model.js +35 -0
  140. package/dist/organization/organization.model.js.map +1 -0
  141. package/dist/organization/organization.resolver.d.ts +6 -0
  142. package/dist/organization/organization.resolver.js +43 -0
  143. package/dist/organization/organization.resolver.js.map +1 -0
  144. package/dist/organization/organization.service.d.ts +12 -0
  145. package/dist/organization/organization.service.js +35 -0
  146. package/dist/organization/organization.service.js.map +1 -0
  147. package/dist/page/page.database.d.ts +10 -0
  148. package/dist/page/page.database.js +269 -0
  149. package/dist/page/page.database.js.map +1 -0
  150. package/dist/page/page.indexing.d.ts +3 -0
  151. package/dist/page/page.indexing.js +26 -0
  152. package/dist/page/page.indexing.js.map +1 -0
  153. package/dist/page/page.migrations.d.ts +13 -0
  154. package/dist/page/page.migrations.js +55 -0
  155. package/dist/page/page.migrations.js.map +1 -0
  156. package/dist/page/page.model.d.ts +88 -0
  157. package/dist/page/page.model.js +272 -0
  158. package/dist/page/page.model.js.map +1 -0
  159. package/dist/page/page.resolver.d.ts +48 -0
  160. package/dist/page/page.resolver.js +542 -0
  161. package/dist/page/page.resolver.js.map +1 -0
  162. package/dist/page/page.service.d.ts +59 -0
  163. package/dist/page/page.service.js +399 -0
  164. package/dist/page/page.service.js.map +1 -0
  165. package/dist/page/page.util.d.ts +3 -0
  166. package/dist/page/page.util.js +16 -0
  167. package/dist/page/page.util.js.map +1 -0
  168. package/dist/page/page.validation.d.ts +2 -0
  169. package/dist/page/page.validation.js +21 -0
  170. package/dist/page/page.validation.js.map +1 -0
  171. package/dist/pagerule/pagerule.database.d.ts +5 -0
  172. package/dist/pagerule/pagerule.database.js +212 -0
  173. package/dist/pagerule/pagerule.database.js.map +1 -0
  174. package/dist/pagerule/pagerule.model.d.ts +71 -0
  175. package/dist/pagerule/pagerule.model.js +272 -0
  176. package/dist/pagerule/pagerule.model.js.map +1 -0
  177. package/dist/pagerule/pagerule.resolver.d.ts +13 -0
  178. package/dist/pagerule/pagerule.resolver.js +114 -0
  179. package/dist/pagerule/pagerule.resolver.js.map +1 -0
  180. package/dist/pagerule/pagerule.service.d.ts +23 -0
  181. package/dist/pagerule/pagerule.service.js +180 -0
  182. package/dist/pagerule/pagerule.service.js.map +1 -0
  183. package/dist/pagetree/pagetree.database.d.ts +13 -0
  184. package/dist/pagetree/pagetree.database.js +84 -0
  185. package/dist/pagetree/pagetree.database.js.map +1 -0
  186. package/dist/pagetree/pagetree.model.d.ts +43 -0
  187. package/dist/pagetree/pagetree.model.js +146 -0
  188. package/dist/pagetree/pagetree.model.js.map +1 -0
  189. package/dist/pagetree/pagetree.resolver.d.ts +23 -0
  190. package/dist/pagetree/pagetree.resolver.js +238 -0
  191. package/dist/pagetree/pagetree.resolver.js.map +1 -0
  192. package/dist/pagetree/pagetree.service.d.ts +25 -0
  193. package/dist/pagetree/pagetree.service.js +221 -0
  194. package/dist/pagetree/pagetree.service.js.map +1 -0
  195. package/dist/role/role.database.d.ts +17 -0
  196. package/dist/role/role.database.js +74 -0
  197. package/dist/role/role.database.js.map +1 -0
  198. package/dist/role/role.model.d.ts +26 -0
  199. package/dist/role/role.model.js +84 -0
  200. package/dist/role/role.model.js.map +1 -0
  201. package/dist/role/role.resolver.d.ts +27 -0
  202. package/dist/role/role.resolver.js +294 -0
  203. package/dist/role/role.resolver.js.map +1 -0
  204. package/dist/role/role.service.d.ts +33 -0
  205. package/dist/role/role.service.js +265 -0
  206. package/dist/role/role.service.js.map +1 -0
  207. package/dist/run.d.ts +1 -0
  208. package/dist/run.js +29 -0
  209. package/dist/run.js.map +1 -0
  210. package/dist/scalars/datetime.d.ts +2 -0
  211. package/dist/scalars/datetime.js +19 -0
  212. package/dist/scalars/datetime.js.map +1 -0
  213. package/dist/scalars/index.d.ts +3 -0
  214. package/dist/scalars/index.js +4 -0
  215. package/dist/scalars/index.js.map +1 -0
  216. package/dist/scalars/jsondata.d.ts +2 -0
  217. package/dist/scalars/jsondata.js +15 -0
  218. package/dist/scalars/jsondata.js.map +1 -0
  219. package/dist/scalars/urlsafestring.d.ts +4 -0
  220. package/dist/scalars/urlsafestring.js +28 -0
  221. package/dist/scalars/urlsafestring.js.map +1 -0
  222. package/dist/site/site.database.d.ts +15 -0
  223. package/dist/site/site.database.js +164 -0
  224. package/dist/site/site.database.js.map +1 -0
  225. package/dist/site/site.model.d.ts +62 -0
  226. package/dist/site/site.model.js +197 -0
  227. package/dist/site/site.model.js.map +1 -0
  228. package/dist/site/site.resolver.d.ts +30 -0
  229. package/dist/site/site.resolver.js +326 -0
  230. package/dist/site/site.resolver.js.map +1 -0
  231. package/dist/site/site.service.d.ts +35 -0
  232. package/dist/site/site.service.js +199 -0
  233. package/dist/site/site.service.js.map +1 -0
  234. package/dist/siterule/siterule.database.d.ts +5 -0
  235. package/dist/siterule/siterule.database.js +139 -0
  236. package/dist/siterule/siterule.database.js.map +1 -0
  237. package/dist/siterule/siterule.model.d.ts +53 -0
  238. package/dist/siterule/siterule.model.js +203 -0
  239. package/dist/siterule/siterule.model.js.map +1 -0
  240. package/dist/siterule/siterule.resolver.d.ts +12 -0
  241. package/dist/siterule/siterule.resolver.js +100 -0
  242. package/dist/siterule/siterule.resolver.js.map +1 -0
  243. package/dist/siterule/siterule.service.d.ts +23 -0
  244. package/dist/siterule/siterule.service.js +148 -0
  245. package/dist/siterule/siterule.service.js.map +1 -0
  246. package/dist/template/template.database.d.ts +15 -0
  247. package/dist/template/template.database.js +61 -0
  248. package/dist/template/template.database.js.map +1 -0
  249. package/dist/template/template.model.d.ts +32 -0
  250. package/dist/template/template.model.js +124 -0
  251. package/dist/template/template.model.js.map +1 -0
  252. package/dist/template/template.resolver.d.ts +22 -0
  253. package/dist/template/template.resolver.js +216 -0
  254. package/dist/template/template.resolver.js.map +1 -0
  255. package/dist/template/template.service.d.ts +27 -0
  256. package/dist/template/template.service.js +192 -0
  257. package/dist/template/template.service.js.map +1 -0
  258. package/dist/templaterule/templaterule.database.d.ts +5 -0
  259. package/dist/templaterule/templaterule.database.js +80 -0
  260. package/dist/templaterule/templaterule.database.js.map +1 -0
  261. package/dist/templaterule/templaterule.model.d.ts +38 -0
  262. package/dist/templaterule/templaterule.model.js +136 -0
  263. package/dist/templaterule/templaterule.model.js.map +1 -0
  264. package/dist/templaterule/templaterule.resolver.d.ts +12 -0
  265. package/dist/templaterule/templaterule.resolver.js +100 -0
  266. package/dist/templaterule/templaterule.resolver.js.map +1 -0
  267. package/dist/templaterule/templaterule.service.d.ts +19 -0
  268. package/dist/templaterule/templaterule.service.js +123 -0
  269. package/dist/templaterule/templaterule.service.js.map +1 -0
  270. package/dist/user/user.database.d.ts +22 -0
  271. package/dist/user/user.database.js +116 -0
  272. package/dist/user/user.database.js.map +1 -0
  273. package/dist/user/user.model.d.ts +42 -0
  274. package/dist/user/user.model.js +122 -0
  275. package/dist/user/user.model.js.map +1 -0
  276. package/dist/user/user.resolver.d.ts +16 -0
  277. package/dist/user/user.resolver.js +140 -0
  278. package/dist/user/user.resolver.js.map +1 -0
  279. package/dist/user/user.service.d.ts +29 -0
  280. package/dist/user/user.service.js +195 -0
  281. package/dist/user/user.service.js.map +1 -0
  282. package/dist/util/authservice.d.ts +28 -0
  283. package/dist/util/authservice.js +131 -0
  284. package/dist/util/authservice.js.map +1 -0
  285. package/dist/util/dates.d.ts +2 -0
  286. package/dist/util/dates.js +4 -0
  287. package/dist/util/dates.js.map +1 -0
  288. package/dist/util/filehandler.d.ts +15 -0
  289. package/dist/util/filehandler.js +48 -0
  290. package/dist/util/filehandler.js.map +1 -0
  291. package/dist/util/index.d.ts +13 -0
  292. package/dist/util/index.js +26 -0
  293. package/dist/util/index.js.map +1 -0
  294. package/dist/util/indexing.d.ts +12 -0
  295. package/dist/util/indexing.js +74 -0
  296. package/dist/util/indexing.js.map +1 -0
  297. package/dist/util/migrations.d.ts +15 -0
  298. package/dist/util/migrations.js +2 -0
  299. package/dist/util/migrations.js.map +1 -0
  300. package/dist/util/mutationlogger.d.ts +1 -0
  301. package/dist/util/mutationlogger.js +9 -0
  302. package/dist/util/mutationlogger.js.map +1 -0
  303. package/dist/util/registry.d.ts +25 -0
  304. package/dist/util/registry.js +66 -0
  305. package/dist/util/registry.js.map +1 -0
  306. package/dist/util/rules.d.ts +6 -0
  307. package/dist/util/rules.js +31 -0
  308. package/dist/util/rules.js.map +1 -0
  309. package/dist/util/sharedtypes.d.ts +3 -0
  310. package/dist/util/sharedtypes.js +2 -0
  311. package/dist/util/sharedtypes.js.map +1 -0
  312. package/dist/util/stopwords.d.ts +1 -0
  313. package/dist/util/stopwords.js +152 -0
  314. package/dist/util/stopwords.js.map +1 -0
  315. package/dist/version/version.model.d.ts +11 -0
  316. package/dist/version/version.model.js +46 -0
  317. package/dist/version/version.model.js.map +1 -0
  318. package/dist/version/version.resolver.d.ts +6 -0
  319. package/dist/version/version.resolver.js +45 -0
  320. package/dist/version/version.resolver.js.map +1 -0
  321. package/dist/versionedservice/service.d.ts +148 -0
  322. package/dist/versionedservice/service.js +547 -0
  323. package/dist/versionedservice/service.js.map +1 -0
  324. package/dist/versionedservice/types.d.ts +87 -0
  325. package/dist/versionedservice/types.js +11 -0
  326. package/dist/versionedservice/types.js.map +1 -0
  327. package/package.json +50 -0
  328. package/readme/DosGato.mwb +0 -0
  329. package/readme/DosGato.mwb.bak +0 -0
  330. package/readme/upgradeflow2.png +0 -0
@@ -0,0 +1,374 @@
1
+ /* eslint-disable no-trailing-spaces */
2
+ import { BaseService, ValidatedResponse, MutationMessageType } from '@txstate-mws/graphql-server';
3
+ import { OneToManyLoader, PrimaryKeyLoader } from 'dataloader-factory';
4
+ import { unique, isNotNull, someAsync, eachConcurrent, mapConcurrent, intersect } from 'txstate-utils';
5
+ import { Data, getData, VersionedService, appendPath, DosGatoService, DataFolderServiceInternal, DataFolderService, SiteServiceInternal, createDataEntry, DataResponse, DataMultResponse, templateRegistry, getDataIndexes, renameDataEntry, deleteDataEntries, undeleteDataEntries, moveDataEntries, TemplateService } from '../internal.js';
6
+ const dataByInternalIdLoader = new PrimaryKeyLoader({
7
+ fetch: async (internalIds) => await getData({ internalIds }),
8
+ extractId: item => item.internalId
9
+ });
10
+ const dataByIdLoader = new PrimaryKeyLoader({
11
+ fetch: async (ids) => await getData({ ids }),
12
+ idLoader: dataByInternalIdLoader
13
+ });
14
+ dataByInternalIdLoader.addIdLoader(dataByIdLoader);
15
+ const dataByFolderInternalIdLoader = new OneToManyLoader({
16
+ fetch: async (folderInternalIds, filter) => {
17
+ return await getData({ ...filter, folderInternalIds });
18
+ },
19
+ extractKey: (item) => item.folderInternalId,
20
+ keysFromFilter: (filter) => filter?.folderInternalIds ?? [],
21
+ idLoader: [dataByInternalIdLoader, dataByIdLoader]
22
+ });
23
+ const dataBySiteIdLoader = new OneToManyLoader({
24
+ fetch: async (siteIds, filter) => {
25
+ return await getData({ ...filter, siteIds });
26
+ },
27
+ extractKey: (item) => item.siteId,
28
+ keysFromFilter: (filter) => filter?.siteIds ?? [],
29
+ idLoader: [dataByInternalIdLoader, dataByIdLoader]
30
+ });
31
+ const dataByTemplateLoader = new OneToManyLoader({
32
+ fetch: async (templateKeys, filter, ctx) => {
33
+ const idToTemplateKey = new Map();
34
+ await Promise.all(templateKeys.map(async (key) => {
35
+ const searchRule = { indexName: 'templateKey', equal: key };
36
+ const dataIds = await ctx.svc(VersionedService).find([searchRule], 'latest');
37
+ for (const dataId of dataIds)
38
+ idToTemplateKey.set(dataId, key);
39
+ }));
40
+ const data = await getData({ ...filter, ids: intersect({ skipEmpty: true }, filter?.ids, Array.from(idToTemplateKey.keys())) });
41
+ for (const item of data)
42
+ item.templateKey = idToTemplateKey.get(item.dataId);
43
+ return data;
44
+ },
45
+ extractKey: (item) => item.templateKey
46
+ });
47
+ export class DataServiceInternal extends BaseService {
48
+ async find(filter) {
49
+ filter = await this.processFilters(filter);
50
+ const data = await getData(filter);
51
+ for (const item of data) {
52
+ this.loaders.get(dataByIdLoader).prime(item.id, item);
53
+ this.loaders.get(dataByInternalIdLoader).prime(item.internalId, item);
54
+ }
55
+ return data;
56
+ }
57
+ async findByFolderInternalId(folderId, filter) {
58
+ filter = await this.processFilters(filter);
59
+ return await this.loaders.get(dataByFolderInternalIdLoader, filter).load(folderId);
60
+ }
61
+ async findById(dataId) {
62
+ return await this.loaders.get(dataByIdLoader).load(dataId);
63
+ }
64
+ async findByIds(ids) {
65
+ return await this.loaders.loadMany(dataByIdLoader, ids);
66
+ }
67
+ async findBySiteId(siteId, filter) {
68
+ filter = await this.processFilters(filter);
69
+ return await this.loaders.get(dataBySiteIdLoader, filter).load(siteId);
70
+ }
71
+ async findByTemplate(key, filter) {
72
+ return await this.loaders.get(dataByTemplateLoader, filter).load(key);
73
+ }
74
+ async findByDataRoot(dataroot, filter) {
75
+ if (dataroot.site)
76
+ return await this.findBySiteId(dataroot.site.id, { ...filter, templateKeys: [dataroot.template.key] });
77
+ else
78
+ return await this.loaders.get(dataByTemplateLoader, { ...filter, global: true }).load(dataroot.template.key);
79
+ }
80
+ async getPath(data) {
81
+ if (!data.folderInternalId)
82
+ return '/';
83
+ const folder = await this.svc(DataFolderServiceInternal).findByInternalId(data.folderInternalId);
84
+ const folderPath = await this.svc(DataFolderServiceInternal).getPath(folder);
85
+ return appendPath(folderPath, data.name);
86
+ }
87
+ async processFilters(filter) {
88
+ if (filter?.templateKeys?.length) {
89
+ const searchRule = { indexName: 'templateKey', in: filter.templateKeys };
90
+ const dataIds = await this.svc(VersionedService).find([searchRule], 'latest');
91
+ filter.ids = intersect({ skipEmpty: true }, dataIds, filter.ids);
92
+ }
93
+ return filter ?? {};
94
+ }
95
+ }
96
+ export class DataService extends DosGatoService {
97
+ constructor() {
98
+ super(...arguments);
99
+ this.raw = this.svc(DataServiceInternal);
100
+ }
101
+ async find(filter) {
102
+ return await this.removeUnauthorized(await this.raw.find(filter));
103
+ }
104
+ async findByIds(ids) {
105
+ return await this.removeUnauthorized(await this.raw.findByIds(ids));
106
+ }
107
+ async findByFolderInternalId(folderId, filter) {
108
+ return await this.removeUnauthorized(await this.raw.findByFolderInternalId(folderId, filter));
109
+ }
110
+ async findBySiteId(siteId, filter) {
111
+ return await this.removeUnauthorized(await this.raw.findBySiteId(siteId, filter));
112
+ }
113
+ async findByTemplate(key, filter) {
114
+ return await this.removeUnauthorized(await this.raw.findByTemplate(key, filter));
115
+ }
116
+ async findByDataRoot(dataroot, filter) {
117
+ return await this.removeUnauthorized(await this.raw.findByDataRoot(dataroot, filter));
118
+ }
119
+ async getPath(data) {
120
+ return await this.raw.getPath(data);
121
+ }
122
+ async create(args) {
123
+ const response = new DataResponse({});
124
+ if (args.folderId) {
125
+ const folder = await this.svc(DataFolderServiceInternal).findById(args.folderId);
126
+ if (!folder)
127
+ throw new Error('Data cannot be created in a data folder that does not exist.');
128
+ if (!(await this.svc(DataFolderService).mayCreate(folder)))
129
+ throw new Error(`Current user is not permitted to create data in folder ${String(folder.name)}`);
130
+ const template = await this.svc(TemplateService).findByKey(args.templateKey);
131
+ if (folder.templateId !== template.id) {
132
+ throw new Error('Data cannot be created in a folder using a different data template.');
133
+ }
134
+ }
135
+ else if (args.siteId) {
136
+ const site = await this.svc(SiteServiceInternal).findById(args.siteId);
137
+ if (!site)
138
+ throw new Error('Data cannot be created in a site that does not exist.');
139
+ // TODO: Does the current user have permission to create data for the site?
140
+ const data = new Data({ id: 0, siteId: args.siteId });
141
+ if (!(await this.haveDataPerm(data, 'create')))
142
+ throw new Error(`Current user is not permitted to create data in site ${String(site.name)}.`);
143
+ }
144
+ else {
145
+ // global data
146
+ if (!(await this.mayCreateGlobal()))
147
+ throw new Error('Current user is not permitted to create global data entries.');
148
+ }
149
+ try {
150
+ // validate data
151
+ const validator = templateRegistry.get(args.templateKey).validate;
152
+ const messages = await validator(args.data);
153
+ if (Object.keys(messages).length) {
154
+ for (const key of Object.keys(messages)) {
155
+ // TODO: Not sure about this. The validator can return an array of message for each field, but MutationMessage has one
156
+ // message per field.
157
+ for (const message of messages[key]) {
158
+ response.addMessage(message, key, MutationMessageType.error);
159
+ }
160
+ }
161
+ return response;
162
+ }
163
+ // passed validation, save it
164
+ const versionedService = this.svc(VersionedService);
165
+ const data = await createDataEntry(versionedService, this.login, args);
166
+ response.success = true;
167
+ response.data = data;
168
+ return response;
169
+ }
170
+ catch (err) {
171
+ console.error(err);
172
+ throw new Error('Unable to create data entry');
173
+ }
174
+ }
175
+ async update(dataId, args) {
176
+ const response = new DataResponse({});
177
+ const data = await this.raw.findById(dataId);
178
+ if (!data)
179
+ throw new Error('Data entry to be updated does not exist');
180
+ if (!(await this.mayUpdate(data)))
181
+ throw new Error('Current user is not permitted to update this data entry.');
182
+ try {
183
+ const validator = templateRegistry.get(args.data.templateKey).validate;
184
+ const messages = await validator(args.data);
185
+ if (Object.keys(messages).length) {
186
+ for (const key of Object.keys(messages)) {
187
+ for (const message of messages[key]) {
188
+ response.addMessage(message, key, MutationMessageType.error);
189
+ }
190
+ }
191
+ return response;
192
+ }
193
+ const indexes = getDataIndexes(args.data);
194
+ await this.svc(VersionedService).update(dataId, args.data, indexes, { user: this.login, comment: args.comment, version: args.dataVersion });
195
+ this.loaders.clear();
196
+ const updated = await this.raw.findById(dataId);
197
+ response.success = true;
198
+ response.data = updated;
199
+ return response;
200
+ }
201
+ catch (err) {
202
+ console.error(err);
203
+ throw new Error(`Unable to update data entry ${String(data.name)}`);
204
+ }
205
+ }
206
+ async rename(dataId, name) {
207
+ const data = await this.raw.findById(dataId);
208
+ if (!data)
209
+ throw new Error('Data entry to be renamed does not exist');
210
+ if (!(await this.mayUpdate(data)))
211
+ throw new Error('Current user is not permitted to rename this data entry.');
212
+ try {
213
+ await renameDataEntry(dataId, name);
214
+ this.loaders.clear();
215
+ const updated = await this.raw.findById(dataId);
216
+ return new DataResponse({ success: true, data: updated });
217
+ }
218
+ catch (err) {
219
+ console.error(err);
220
+ throw new Error(`Unable to rename data entry ${String(data.name)}`);
221
+ }
222
+ }
223
+ async move(dataIds, target) {
224
+ const data = (await Promise.all(dataIds.map(async (id) => await this.raw.findById(id)))).filter(isNotNull);
225
+ if (await someAsync(data, async (d) => !(await this.mayMove(d)))) {
226
+ throw new Error('Current user is not permitted to move one or more data entries');
227
+ }
228
+ const templateKeys = await mapConcurrent((data.map(d => d.dataId)), async (dataId) => {
229
+ const versioned = await this.svc(VersionedService).get(dataId);
230
+ const indexes = await this.svc(VersionedService).getIndexes(dataId, versioned.version);
231
+ const templateKeyIndex = indexes.find(i => i.name === 'templateKey');
232
+ return templateKeyIndex.values[0];
233
+ });
234
+ if (unique(templateKeys).length > 1) {
235
+ throw new Error('Data entries being moved must all have the same template');
236
+ }
237
+ const template = await this.svc(TemplateService).findByKey(templateKeys[0]);
238
+ let folder;
239
+ if (target.folderId) {
240
+ folder = await this.svc(DataFolderServiceInternal).findById(target.folderId);
241
+ if (!folder)
242
+ throw new Error('Data cannot be moved to a data folder that does not exist.');
243
+ if (!(await this.svc(DataFolderService).mayCreate(folder)))
244
+ throw new Error(`Current user is not permitted to move data to folder ${String(folder.name)}`);
245
+ if (folder.templateId !== template.id)
246
+ throw new Error('Data can only be moved to a folder using the same template.');
247
+ }
248
+ let site;
249
+ if (target.siteId) {
250
+ site = await this.svc(SiteServiceInternal).findById(target.siteId);
251
+ if (!site)
252
+ throw new Error('Data cannot be moved to a site that does not exist.');
253
+ // TODO: Does the current user have permission to move data to this site?
254
+ const tempdata = new Data({ id: 0, siteId: target.siteId });
255
+ if (!(await this.haveDataPerm(tempdata, 'move')))
256
+ throw new Error(`Current user is not permitted to move data to site ${String(site.name)}.`);
257
+ }
258
+ let aboveTarget;
259
+ if (target.aboveTarget) {
260
+ aboveTarget = await this.raw.findById(target.aboveTarget);
261
+ if (!aboveTarget)
262
+ throw new Error('Data entry cannont be moved above a data entry that does not exist');
263
+ }
264
+ // if none of these are provided, they are moving the data to global data
265
+ if (!target.folderId && !target.siteId && !target.aboveTarget && !(await this.mayCreateGlobal()))
266
+ throw new Error('Current user is not permitted to update global data entries.');
267
+ try {
268
+ const versionedService = this.svc(VersionedService);
269
+ await moveDataEntries(versionedService, data.map(d => d.dataId), templateKeys[0], target);
270
+ this.loaders.clear();
271
+ const updated = await this.raw.findByIds(data.map(d => d.dataId));
272
+ return new DataMultResponse({ success: true, data: updated });
273
+ }
274
+ catch (err) {
275
+ console.error(err);
276
+ throw new Error('Unable to move one or more data entries');
277
+ }
278
+ }
279
+ async publish(dataIds) {
280
+ let data = (await Promise.all(dataIds.map(async (id) => await this.raw.findById(id)))).filter(isNotNull);
281
+ if (await someAsync(data, async (d) => !(await this.mayPublish(d)))) {
282
+ throw new Error('Current user is not permitted to publish one or more data entries');
283
+ }
284
+ data = data.filter(d => !d.deleted);
285
+ try {
286
+ await eachConcurrent(data.map(d => d.dataId), async (dataId) => await this.svc(VersionedService).tag(dataId, 'published', undefined, this.login));
287
+ this.loaders.clear();
288
+ return new ValidatedResponse({ success: true });
289
+ }
290
+ catch (err) {
291
+ console.error(err);
292
+ throw new Error('Unable to publish one or more data entries.');
293
+ }
294
+ }
295
+ async unpublish(dataIds) {
296
+ const data = (await Promise.all(dataIds.map(async (id) => await this.raw.findById(id)))).filter(isNotNull);
297
+ if (await someAsync(data, async (d) => !(await this.mayUnpublish(d)))) {
298
+ throw new Error('Current user is not permitted to unpublish one or more data entries');
299
+ }
300
+ try {
301
+ await eachConcurrent(data.map(d => d.dataId), async (dataId) => await this.svc(VersionedService).removeTag(dataId, 'published'));
302
+ this.loaders.clear();
303
+ return new ValidatedResponse({ success: true });
304
+ }
305
+ catch (err) {
306
+ console.error(err);
307
+ throw new Error('Unable to unpublish one or more data entries');
308
+ }
309
+ }
310
+ async delete(dataIds) {
311
+ const data = (await Promise.all(dataIds.map(async (id) => await this.raw.findById(id)))).filter(isNotNull);
312
+ if (await someAsync(data, async (d) => !(await this.mayDelete(d)))) {
313
+ throw new Error('Current user is not permitted to delete one or more data entries');
314
+ }
315
+ const currentUser = await this.currentUser();
316
+ try {
317
+ await deleteDataEntries(data.map(d => d.dataId), currentUser.internalId);
318
+ this.loaders.clear();
319
+ const updated = await this.raw.findByIds(data.map(d => d.dataId));
320
+ return new DataMultResponse({ success: true, data: updated });
321
+ }
322
+ catch (err) {
323
+ console.error(err);
324
+ throw new Error('Unable to delete one or more data entries');
325
+ }
326
+ }
327
+ async undelete(dataIds) {
328
+ const data = (await Promise.all(dataIds.map(async (id) => await this.raw.findById(id)))).filter(isNotNull);
329
+ if (await someAsync(data, async (d) => !(await this.mayUndelete(d)))) {
330
+ throw new Error('Current user is not permitted to restore one or more data entries');
331
+ }
332
+ try {
333
+ await undeleteDataEntries(data.map(d => d.dataId));
334
+ this.loaders.clear();
335
+ const restored = await this.raw.findByIds(data.map(d => d.dataId));
336
+ return new DataMultResponse({ success: true, data: restored });
337
+ }
338
+ catch (err) {
339
+ console.error(err);
340
+ throw new Error('Unable to restore one or more data entries');
341
+ }
342
+ }
343
+ async mayView(data) {
344
+ return await this.haveDataPerm(data, 'view');
345
+ }
346
+ async mayViewManagerUI() {
347
+ return await this.haveGlobalPerm('manageGlobalData') || (await this.currentDataRules()).some(r => r.grants.viewForEdit);
348
+ }
349
+ async mayViewForEdit(data) {
350
+ return await this.haveDataPerm(data, 'viewForEdit');
351
+ }
352
+ async mayUpdate(data) {
353
+ return await this.haveDataPerm(data, 'update');
354
+ }
355
+ async mayMove(data) {
356
+ return await this.haveDataPerm(data, 'move');
357
+ }
358
+ async mayPublish(data) {
359
+ return await this.haveDataPerm(data, 'publish');
360
+ }
361
+ async mayUnpublish(data) {
362
+ return await this.haveDataPerm(data, 'unpublish');
363
+ }
364
+ async mayDelete(data) {
365
+ return await this.haveDataPerm(data, 'delete');
366
+ }
367
+ async mayUndelete(data) {
368
+ return await this.haveDataPerm(data, 'undelete');
369
+ }
370
+ async mayCreateGlobal() {
371
+ return await this.haveGlobalPerm('manageGlobalData');
372
+ }
373
+ }
374
+ //# sourceMappingURL=data.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.service.js","sourceRoot":"","sources":["../../src/data/data.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { DataFolder, DataFolderFilter } from '../internal.js';
2
+ export declare function getDataFolders(filter?: DataFolderFilter): Promise<DataFolder[]>;
3
+ export declare function createDataFolder(name: string, templateInternalId: number, siteId?: string): Promise<DataFolder>;
4
+ export declare function renameDataFolder(folderId: string, name: string): Promise<number>;
5
+ export declare function moveDataFolders(folderIds: string[], siteId?: string): Promise<number>;
6
+ export declare function deleteDataFolder(folderIds: string[], userInternalId: number): Promise<number>;
7
+ export declare function undeleteDataFolders(folderIds: string[]): Promise<number>;
@@ -0,0 +1,72 @@
1
+ import db from 'mysql2-async/db';
2
+ import { nanoid } from 'nanoid';
3
+ import { DataFolder, Site, DeletedFilter } from '../internal.js';
4
+ export async function getDataFolders(filter) {
5
+ const where = [];
6
+ const binds = [];
7
+ if (filter?.internalIds?.length) {
8
+ where.push(`datafolders.id IN (${db.in(binds, filter.internalIds)})`);
9
+ }
10
+ if (filter?.ids?.length) {
11
+ where.push(`datafolders.guid IN (${db.in(binds, filter.ids)})`);
12
+ }
13
+ if (filter?.templateIds?.length) {
14
+ where.push(`datafolders.templateId IN (${db.in(binds, filter.templateIds)})`);
15
+ }
16
+ if (filter?.siteIds?.length) {
17
+ where.push(`datafolders.siteId IN (${db.in(binds, filter.siteIds)})`);
18
+ }
19
+ if (filter?.global) {
20
+ where.push('datafolders.siteId IS NULL');
21
+ }
22
+ if (filter?.deleted) {
23
+ if (filter.deleted === DeletedFilter.ONLY) {
24
+ where.push('datafolders.deletedAt IS NOT NULL');
25
+ }
26
+ else if (filter.deleted === DeletedFilter.HIDE) {
27
+ where.push('datafolders.deletedAt IS NULL');
28
+ }
29
+ }
30
+ else {
31
+ where.push('datafolders.deletedAt IS NULL');
32
+ }
33
+ if (!where.length) {
34
+ throw new Error('Must include a filter');
35
+ }
36
+ const folders = await db.getall(`SELECT * FROM datafolders WHERE (${where.join(') AND (')})`, binds);
37
+ return folders.map(f => new DataFolder(f));
38
+ }
39
+ export async function createDataFolder(name, templateInternalId, siteId) {
40
+ const columns = ['name', 'guid', 'templateId'];
41
+ const binds = [name, nanoid(10), templateInternalId];
42
+ if (siteId) {
43
+ columns.push('siteId');
44
+ binds.push(siteId);
45
+ }
46
+ const newInternalId = await db.insert(`
47
+ INSERT INTO datafolders (${columns.join(', ')})
48
+ VALUES(${columns.map(c => '?').join(',')})`, binds);
49
+ return new DataFolder(await db.getrow('SELECT * FROM datafolders WHERE id=?', [newInternalId]));
50
+ }
51
+ export async function renameDataFolder(folderId, name) {
52
+ return await db.update('UPDATE datafolders SET name = ? WHERE guid = ?', [name, folderId]);
53
+ }
54
+ export async function moveDataFolders(folderIds, siteId) {
55
+ return await db.transaction(async (db) => {
56
+ const binds = [];
57
+ const dataFolders = (await db.getall(`SELECT * FROM datafolders WHERE guid IN (${db.in(binds, folderIds)})`, binds)).map((row) => new DataFolder(row));
58
+ const site = siteId ? new Site(await db.getrow('SELECT * FROM sites WHERE id = ?', [siteId])) : undefined;
59
+ const moveBinds = [];
60
+ moveBinds.push(site ? site.id : null);
61
+ return await db.update(`UPDATE datafolders SET siteId = ? WHERE guid IN (${db.in(moveBinds, dataFolders.map(f => f.id))})`, moveBinds);
62
+ });
63
+ }
64
+ export async function deleteDataFolder(folderIds, userInternalId) {
65
+ const binds = [userInternalId];
66
+ return await db.update(`UPDATE datafolders SET deletedBy = ?, deletedAt = NOW() WHERE guid IN (${db.in(binds, folderIds)})`, binds);
67
+ }
68
+ export async function undeleteDataFolders(folderIds) {
69
+ const binds = [];
70
+ return await db.update(`UPDATE datafolders SET deletedBy = null, deletedAt = null WHERE guid IN (${db.in(binds, folderIds)})`, binds);
71
+ }
72
+ //# sourceMappingURL=datafolder.database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datafolder.database.js","sourceRoot":"","sources":["../../src/datafolder/datafolder.database.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { DateTime } from 'luxon';
2
+ import { ValidatedResponse, ValidatedResponseArgs } from '@txstate-mws/graphql-server';
3
+ import { UrlSafeString, DeletedFilter } from '../internal.js';
4
+ export declare class DataFolder {
5
+ internalId: number;
6
+ id: string;
7
+ name: UrlSafeString;
8
+ deleted: boolean;
9
+ deletedAt?: DateTime;
10
+ templateId: number;
11
+ siteId?: string;
12
+ deletedBy?: number;
13
+ constructor(row: any);
14
+ }
15
+ export declare class DataFolderFilter {
16
+ internalIds?: number[];
17
+ ids?: string[];
18
+ templateKeys?: string[];
19
+ templateIds?: number[];
20
+ siteIds?: string[];
21
+ global?: boolean;
22
+ deleted?: DeletedFilter;
23
+ }
24
+ export declare class CreateDataFolderInput {
25
+ name: string;
26
+ templateKey: string;
27
+ siteId?: string;
28
+ }
29
+ export declare class DataFolderResponse extends ValidatedResponse {
30
+ dataFolder?: DataFolder;
31
+ constructor(config: ValidatedResponseArgs & {
32
+ dataFolder?: DataFolder;
33
+ });
34
+ }
35
+ export declare class DataFoldersResponse extends ValidatedResponse {
36
+ dataFolders?: DataFolder[];
37
+ constructor(config: ValidatedResponseArgs & {
38
+ dataFolders?: DataFolder[];
39
+ });
40
+ }
41
+ export declare class DataFolderPermissions {
42
+ }
43
+ export declare enum DataFolderPermission {
44
+ CREATE = "create",
45
+ UPDATE = "update",
46
+ DELETE = "delete",
47
+ UNDELETE = "undelete"
48
+ }