@neuralinnovations/dataisland-sdk 0.0.1-dev2 → 0.0.1-dev21

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 (286) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +306 -1
  3. package/dist/index.d.ts +3 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +3 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/package.json +100 -0
  8. package/dist/src/appBuilder.d.ts +44 -0
  9. package/dist/src/appBuilder.d.ts.map +1 -0
  10. package/dist/src/appBuilder.js +10 -0
  11. package/dist/src/appBuilder.js.map +1 -0
  12. package/dist/src/commands/startCommandHandler.d.ts +7 -0
  13. package/dist/src/commands/startCommandHandler.d.ts.map +1 -0
  14. package/dist/src/commands/startCommandHandler.js +17 -0
  15. package/dist/src/commands/startCommandHandler.js.map +1 -0
  16. package/dist/src/context.d.ts +23 -0
  17. package/dist/src/context.d.ts.map +1 -0
  18. package/dist/src/context.js +31 -0
  19. package/dist/src/context.js.map +1 -0
  20. package/dist/src/credentials.d.ts +28 -0
  21. package/dist/src/credentials.d.ts.map +1 -0
  22. package/dist/src/credentials.js +70 -0
  23. package/dist/src/credentials.js.map +1 -0
  24. package/dist/src/dataIslandApp.d.ts +50 -0
  25. package/dist/src/dataIslandApp.d.ts.map +1 -0
  26. package/dist/src/dataIslandApp.js +10 -0
  27. package/dist/src/dataIslandApp.js.map +1 -0
  28. package/dist/src/disposable.d.ts +84 -0
  29. package/dist/src/disposable.d.ts.map +1 -0
  30. package/dist/src/disposable.js +147 -0
  31. package/dist/src/disposable.js.map +1 -0
  32. package/dist/src/dto/accessGroupResponse.d.ts +27 -0
  33. package/dist/src/dto/accessGroupResponse.d.ts.map +1 -0
  34. package/dist/src/dto/accessGroupResponse.js +3 -0
  35. package/dist/src/dto/accessGroupResponse.js.map +1 -0
  36. package/dist/src/dto/chatResponse.d.ts +78 -0
  37. package/dist/src/dto/chatResponse.d.ts.map +1 -0
  38. package/dist/src/dto/chatResponse.js +45 -0
  39. package/dist/src/dto/chatResponse.js.map +1 -0
  40. package/dist/src/dto/userInfoResponse.d.ts +42 -0
  41. package/dist/src/dto/userInfoResponse.d.ts.map +1 -0
  42. package/dist/src/dto/userInfoResponse.js +3 -0
  43. package/dist/src/dto/userInfoResponse.js.map +1 -0
  44. package/dist/src/dto/workspacesResponse.d.ts +43 -0
  45. package/dist/src/dto/workspacesResponse.d.ts.map +1 -0
  46. package/dist/src/dto/workspacesResponse.js +3 -0
  47. package/dist/src/dto/workspacesResponse.js.map +1 -0
  48. package/dist/src/events.d.ts +17 -0
  49. package/dist/src/events.d.ts.map +1 -0
  50. package/dist/src/events.js +52 -0
  51. package/dist/src/events.js.map +1 -0
  52. package/dist/src/index.d.ts +58 -0
  53. package/dist/src/index.d.ts.map +1 -0
  54. package/dist/src/index.js +91 -0
  55. package/dist/src/index.js.map +1 -0
  56. package/dist/src/internal/app.impl.d.ts +28 -0
  57. package/dist/src/internal/app.impl.d.ts.map +1 -0
  58. package/dist/src/internal/app.impl.js +151 -0
  59. package/dist/src/internal/app.impl.js.map +1 -0
  60. package/dist/src/internal/appBuilder.impl.d.ts +27 -0
  61. package/dist/src/internal/appBuilder.impl.d.ts.map +1 -0
  62. package/dist/src/internal/appBuilder.impl.js +71 -0
  63. package/dist/src/internal/appBuilder.impl.js.map +1 -0
  64. package/dist/src/internal/createApp.impl.d.ts +4 -0
  65. package/dist/src/internal/createApp.impl.d.ts.map +1 -0
  66. package/dist/src/internal/createApp.impl.js +11 -0
  67. package/dist/src/internal/createApp.impl.js.map +1 -0
  68. package/dist/src/internal/registry.d.ts +66 -0
  69. package/dist/src/internal/registry.d.ts.map +1 -0
  70. package/dist/src/internal/registry.js +114 -0
  71. package/dist/src/internal/registry.js.map +1 -0
  72. package/dist/src/middleware.d.ts +5 -0
  73. package/dist/src/middleware.d.ts.map +1 -0
  74. package/dist/src/middleware.js +3 -0
  75. package/dist/src/middleware.js.map +1 -0
  76. package/dist/src/services/commandService.d.ts +18 -0
  77. package/dist/src/services/commandService.d.ts.map +1 -0
  78. package/dist/src/services/commandService.js +40 -0
  79. package/dist/src/services/commandService.js.map +1 -0
  80. package/dist/src/services/credentialService.d.ts +9 -0
  81. package/dist/src/services/credentialService.d.ts.map +1 -0
  82. package/dist/src/services/credentialService.js +26 -0
  83. package/dist/src/services/credentialService.js.map +1 -0
  84. package/dist/src/services/middlewareService.d.ts +9 -0
  85. package/dist/src/services/middlewareService.d.ts.map +1 -0
  86. package/dist/src/services/middlewareService.js +34 -0
  87. package/dist/src/services/middlewareService.js.map +1 -0
  88. package/dist/src/services/organizationService.d.ts +10 -0
  89. package/dist/src/services/organizationService.d.ts.map +1 -0
  90. package/dist/src/services/organizationService.js +19 -0
  91. package/dist/src/services/organizationService.js.map +1 -0
  92. package/dist/src/services/requestBuilder.d.ts +17 -0
  93. package/dist/src/services/requestBuilder.d.ts.map +1 -0
  94. package/dist/src/services/requestBuilder.js +104 -0
  95. package/dist/src/services/requestBuilder.js.map +1 -0
  96. package/dist/src/services/responseUtils.d.ts +6 -0
  97. package/dist/src/services/responseUtils.d.ts.map +1 -0
  98. package/dist/src/services/responseUtils.js +32 -0
  99. package/dist/src/services/responseUtils.js.map +1 -0
  100. package/dist/src/services/rpcService.d.ts +77 -0
  101. package/dist/src/services/rpcService.d.ts.map +1 -0
  102. package/dist/src/services/rpcService.js +125 -0
  103. package/dist/src/services/rpcService.js.map +1 -0
  104. package/dist/src/services/service.d.ts +21 -0
  105. package/dist/src/services/service.d.ts.map +1 -0
  106. package/dist/src/services/service.js +41 -0
  107. package/dist/src/services/service.js.map +1 -0
  108. package/dist/src/services/userProfileService.d.ts +8 -0
  109. package/dist/src/services/userProfileService.d.ts.map +1 -0
  110. package/dist/src/services/userProfileService.js +32 -0
  111. package/dist/src/services/userProfileService.js.map +1 -0
  112. package/dist/src/storages/chats/answer.d.ts +40 -0
  113. package/dist/src/storages/chats/answer.d.ts.map +1 -0
  114. package/dist/src/storages/chats/answer.impl.d.ts +24 -0
  115. package/dist/src/storages/chats/answer.impl.d.ts.map +1 -0
  116. package/dist/src/storages/chats/answer.impl.js +130 -0
  117. package/dist/src/storages/chats/answer.impl.js.map +1 -0
  118. package/dist/src/storages/chats/answer.js +14 -0
  119. package/dist/src/storages/chats/answer.js.map +1 -0
  120. package/dist/src/storages/chats/chat.d.ts +39 -0
  121. package/dist/src/storages/chats/chat.d.ts.map +1 -0
  122. package/dist/src/storages/chats/chat.impl.d.ts +24 -0
  123. package/dist/src/storages/chats/chat.impl.d.ts.map +1 -0
  124. package/dist/src/storages/chats/chat.impl.js +98 -0
  125. package/dist/src/storages/chats/chat.impl.js.map +1 -0
  126. package/dist/src/storages/chats/chat.js +12 -0
  127. package/dist/src/storages/chats/chat.js.map +1 -0
  128. package/dist/src/storages/chats/chats.d.ts +40 -0
  129. package/dist/src/storages/chats/chats.d.ts.map +1 -0
  130. package/dist/src/storages/chats/chats.impl.d.ts +18 -0
  131. package/dist/src/storages/chats/chats.impl.d.ts.map +1 -0
  132. package/dist/src/storages/chats/chats.impl.js +102 -0
  133. package/dist/src/storages/chats/chats.impl.js.map +1 -0
  134. package/dist/src/storages/chats/chats.js +16 -0
  135. package/dist/src/storages/chats/chats.js.map +1 -0
  136. package/dist/src/storages/files/file.d.ts +31 -0
  137. package/dist/src/storages/files/file.d.ts.map +1 -0
  138. package/dist/src/storages/files/file.impl.d.ts +21 -0
  139. package/dist/src/storages/files/file.impl.d.ts.map +1 -0
  140. package/dist/src/storages/files/file.impl.js +64 -0
  141. package/dist/src/storages/files/file.impl.js.map +1 -0
  142. package/dist/src/storages/files/file.js +11 -0
  143. package/dist/src/storages/files/file.js.map +1 -0
  144. package/dist/src/storages/files/files.d.ts +34 -0
  145. package/dist/src/storages/files/files.d.ts.map +1 -0
  146. package/dist/src/storages/files/files.impl.d.ts +22 -0
  147. package/dist/src/storages/files/files.impl.d.ts.map +1 -0
  148. package/dist/src/storages/files/files.impl.js +140 -0
  149. package/dist/src/storages/files/files.impl.js.map +1 -0
  150. package/dist/src/storages/files/files.js +20 -0
  151. package/dist/src/storages/files/files.js.map +1 -0
  152. package/dist/src/storages/files/filesPage.d.ts +28 -0
  153. package/dist/src/storages/files/filesPage.d.ts.map +1 -0
  154. package/dist/src/storages/files/filesPage.impl.d.ts +15 -0
  155. package/dist/src/storages/files/filesPage.impl.d.ts.map +1 -0
  156. package/dist/src/storages/files/filesPage.impl.js +38 -0
  157. package/dist/src/storages/files/filesPage.impl.js.map +1 -0
  158. package/dist/src/storages/files/filesPage.js +10 -0
  159. package/dist/src/storages/files/filesPage.js.map +1 -0
  160. package/dist/src/storages/groups/groups.d.ts +91 -0
  161. package/dist/src/storages/groups/groups.d.ts.map +1 -0
  162. package/dist/src/storages/groups/groups.impl.d.ts +61 -0
  163. package/dist/src/storages/groups/groups.impl.d.ts.map +1 -0
  164. package/dist/src/storages/groups/groups.impl.js +293 -0
  165. package/dist/src/storages/groups/groups.impl.js.map +1 -0
  166. package/dist/src/storages/groups/groups.js +26 -0
  167. package/dist/src/storages/groups/groups.js.map +1 -0
  168. package/dist/src/storages/organizations/organization.d.ts +54 -0
  169. package/dist/src/storages/organizations/organization.d.ts.map +1 -0
  170. package/dist/src/storages/organizations/organization.impl.d.ts +32 -0
  171. package/dist/src/storages/organizations/organization.impl.d.ts.map +1 -0
  172. package/dist/src/storages/organizations/organization.impl.js +120 -0
  173. package/dist/src/storages/organizations/organization.impl.js.map +1 -0
  174. package/dist/src/storages/organizations/organization.js +18 -0
  175. package/dist/src/storages/organizations/organization.js.map +1 -0
  176. package/dist/src/storages/organizations/organizations.d.ts +46 -0
  177. package/dist/src/storages/organizations/organizations.d.ts.map +1 -0
  178. package/dist/src/storages/organizations/organizations.impl.d.ts +38 -0
  179. package/dist/src/storages/organizations/organizations.impl.d.ts.map +1 -0
  180. package/dist/src/storages/organizations/organizations.impl.js +151 -0
  181. package/dist/src/storages/organizations/organizations.impl.js.map +1 -0
  182. package/dist/src/storages/organizations/organizations.js +20 -0
  183. package/dist/src/storages/organizations/organizations.js.map +1 -0
  184. package/dist/src/storages/user/userProfile.d.ts +32 -0
  185. package/dist/src/storages/user/userProfile.d.ts.map +1 -0
  186. package/dist/src/storages/user/userProfile.impl.d.ts +13 -0
  187. package/dist/src/storages/user/userProfile.impl.d.ts.map +1 -0
  188. package/dist/src/storages/user/userProfile.impl.js +51 -0
  189. package/dist/src/storages/user/userProfile.impl.js.map +1 -0
  190. package/dist/src/storages/user/userProfile.js +12 -0
  191. package/dist/src/storages/user/userProfile.js.map +1 -0
  192. package/dist/src/storages/workspaces/workspace.d.ts +44 -0
  193. package/dist/src/storages/workspaces/workspace.d.ts.map +1 -0
  194. package/dist/src/storages/workspaces/workspace.impl.d.ts +23 -0
  195. package/dist/src/storages/workspaces/workspace.impl.d.ts.map +1 -0
  196. package/dist/src/storages/workspaces/workspace.impl.js +98 -0
  197. package/dist/src/storages/workspaces/workspace.impl.js.map +1 -0
  198. package/dist/src/storages/workspaces/workspace.js +18 -0
  199. package/dist/src/storages/workspaces/workspace.js.map +1 -0
  200. package/dist/src/storages/workspaces/workspaces.d.ts +47 -0
  201. package/dist/src/storages/workspaces/workspaces.d.ts.map +1 -0
  202. package/dist/src/storages/workspaces/workspaces.impl.d.ts +33 -0
  203. package/dist/src/storages/workspaces/workspaces.impl.d.ts.map +1 -0
  204. package/dist/src/storages/workspaces/workspaces.impl.js +157 -0
  205. package/dist/src/storages/workspaces/workspaces.impl.js.map +1 -0
  206. package/dist/src/storages/workspaces/workspaces.js +19 -0
  207. package/dist/src/storages/workspaces/workspaces.js.map +1 -0
  208. package/dist/src/unitTest.d.ts +12 -0
  209. package/dist/src/unitTest.d.ts.map +1 -0
  210. package/dist/src/unitTest.js +44 -0
  211. package/dist/src/unitTest.js.map +1 -0
  212. package/index.d.ts +1 -0
  213. package/index.js +1 -0
  214. package/package.json +43 -4
  215. package/src/appBuilder.ts +6 -6
  216. package/src/commands/startCommandHandler.ts +2 -2
  217. package/src/context.ts +5 -4
  218. package/src/credentials.ts +29 -7
  219. package/src/{appSdk.ts → dataIslandApp.ts} +7 -7
  220. package/src/disposable.ts +20 -8
  221. package/src/dto/accessGroupResponse.ts +35 -0
  222. package/src/dto/chatResponse.ts +103 -0
  223. package/src/dto/userInfoResponse.ts +15 -3
  224. package/src/dto/workspacesResponse.ts +49 -0
  225. package/src/events.ts +13 -13
  226. package/src/index.ts +41 -20
  227. package/src/internal/app.impl.ts +28 -31
  228. package/src/internal/appBuilder.impl.ts +16 -16
  229. package/src/internal/createApp.impl.ts +5 -5
  230. package/src/internal/registry.ts +54 -6
  231. package/src/services/commandService.ts +3 -3
  232. package/src/services/credentialService.ts +3 -3
  233. package/src/services/middlewareService.ts +4 -4
  234. package/src/services/organizationService.ts +18 -116
  235. package/src/services/requestBuilder.ts +40 -15
  236. package/src/services/responseUtils.ts +32 -0
  237. package/src/services/rpcService.ts +28 -11
  238. package/src/services/service.ts +10 -8
  239. package/src/services/userProfileService.ts +18 -66
  240. package/src/storages/chats/answer.impl.ts +186 -0
  241. package/src/storages/chats/answer.ts +55 -0
  242. package/src/storages/chats/chat.impl.ts +126 -0
  243. package/src/storages/chats/chat.ts +49 -0
  244. package/src/storages/chats/chats.impl.ts +142 -0
  245. package/src/storages/chats/chats.ts +47 -0
  246. package/src/storages/files/file.impl.ts +87 -0
  247. package/src/storages/files/file.ts +40 -0
  248. package/src/storages/files/files.impl.ts +191 -0
  249. package/src/storages/files/files.ts +39 -0
  250. package/src/storages/files/filesPage.impl.ts +37 -0
  251. package/src/storages/files/filesPage.ts +33 -0
  252. package/src/storages/groups/groups.impl.ts +386 -0
  253. package/src/storages/groups/groups.ts +106 -0
  254. package/src/storages/organizations/organization.impl.ts +163 -0
  255. package/src/storages/organizations/organization.ts +67 -0
  256. package/src/storages/organizations/organizations.impl.ts +197 -0
  257. package/src/storages/{organizations.ts → organizations/organizations.ts} +8 -28
  258. package/src/storages/user/userProfile.impl.ts +56 -0
  259. package/src/storages/{userProfile.ts → user/userProfile.ts} +2 -2
  260. package/src/storages/workspaces/workspace.impl.ts +129 -0
  261. package/src/storages/workspaces/workspace.ts +54 -0
  262. package/src/storages/workspaces/workspaces.impl.ts +212 -0
  263. package/src/storages/workspaces/workspaces.ts +53 -0
  264. package/src/unitTest.ts +12 -1
  265. package/.browserslistrc +0 -5
  266. package/.editorconfig +0 -22
  267. package/.eslintrc.json +0 -44
  268. package/.github/workflows/publish-npm.yml +0 -28
  269. package/.prettierignore +0 -1
  270. package/.prettierrc +0 -11
  271. package/.yarnrc +0 -2
  272. package/babel.config.js +0 -6
  273. package/jest.config.ts +0 -199
  274. package/jest.setup.ts +0 -2
  275. package/src/services/organizationImpl.ts +0 -51
  276. package/src/services/organizationsImpl.ts +0 -55
  277. package/src/types.ts +0 -86
  278. package/test/commands.test.ts +0 -24
  279. package/test/disposable.test.ts +0 -39
  280. package/test/events.test.ts +0 -151
  281. package/test/index.test.ts +0 -163
  282. package/test/registry.test.ts +0 -44
  283. package/test/services.test.ts +0 -56
  284. package/test/setup.ts +0 -2
  285. package/test/unitTest.test.ts +0 -21
  286. package/tsconfig.json +0 -31
@@ -0,0 +1,197 @@
1
+ import {
2
+ OrganizationsEvent,
3
+ OrganizationId,
4
+ Organizations
5
+ } from "./organizations"
6
+ import { OrganizationImpl } from "./organization.impl"
7
+ import { RpcService } from "../../services/rpcService"
8
+ import { OrganizationDto, UserSettings } from "../../dto/userInfoResponse"
9
+ import { Context } from "../../context"
10
+ import { Organization } from "./organization"
11
+ import { ResponseUtils } from "../../services/responseUtils"
12
+
13
+ export class OrganizationsImpl extends Organizations {
14
+ constructor(public readonly context: Context) {
15
+ super()
16
+ }
17
+
18
+ public organizations: OrganizationImpl[] = []
19
+ public currentOrganizationId?: OrganizationId
20
+
21
+ get collection(): readonly Organization[] {
22
+ return this.organizations
23
+ }
24
+
25
+ get current(): OrganizationId {
26
+ return <OrganizationId>this.currentOrganizationId
27
+ }
28
+
29
+ set current(value: OrganizationId) {
30
+ if (this.currentOrganizationId !== value) {
31
+ const org = this.tryGet(value)
32
+ if (org) {
33
+ this.currentOrganizationId = value
34
+ this.dispatch({
35
+ type: OrganizationsEvent.CURRENT_CHANGED,
36
+ data: org
37
+ })
38
+ } else {
39
+ throw new Error(`Organization ${value} is not found`)
40
+ }
41
+ }
42
+ }
43
+
44
+ get(id: OrganizationId): Organization {
45
+ return <Organization>this.tryGet(id)
46
+ }
47
+
48
+ tryGet(id: OrganizationId): Organization | undefined {
49
+ return this.organizations.find(organization => organization.id === id)
50
+ }
51
+
52
+ contains(id: OrganizationId): boolean {
53
+ return this.organizations.some(organization => organization.id === id)
54
+ }
55
+
56
+ async create(name: string, description: string): Promise<Organization> {
57
+ return this.internalCreateOrganization(name, description)
58
+ }
59
+
60
+ delete(id: string): Promise<void> {
61
+ return this.internalDeleteOrganization(id)
62
+ }
63
+
64
+ //----------------------------------------------------------------------------
65
+ // INTERNALS
66
+ //----------------------------------------------------------------------------
67
+
68
+ /**
69
+ * Delete organization.
70
+ * @param id
71
+ */
72
+ async internalDeleteOrganization(id: OrganizationId): Promise<void> {
73
+ if (id === undefined || id === null) {
74
+ throw new Error("Organization delete, id is undefined or null")
75
+ }
76
+ if (id.length === 0 || id.trim().length === 0) {
77
+ throw new Error("Organization delete, id is empty")
78
+ }
79
+ if (!this.contains(id)) {
80
+ throw new Error(`Organization delete, id: ${id} is not found`)
81
+ }
82
+ // send request to the server
83
+ const response = await this.context
84
+ .resolve(RpcService)
85
+ ?.requestBuilder("/api/v1/Organizations")
86
+ .searchParam("id", id)
87
+ .sendDelete()
88
+
89
+ // check response status
90
+ if (ResponseUtils.isFail(response)) {
91
+ await ResponseUtils.throwError(
92
+ `Organization ${id} delete, failed`,
93
+ response
94
+ )
95
+ }
96
+
97
+ // check organization in collection
98
+ const org = <OrganizationImpl>this.get(id)
99
+ const index = this.organizations.indexOf(org)
100
+ if (index < 0) {
101
+ throw new Error("Organization delete, index is not found")
102
+ }
103
+
104
+ // remove organization from collection
105
+ this.organizations.splice(index, 1)
106
+
107
+ // dispatch event, organization removed
108
+ this.dispatch({
109
+ type: OrganizationsEvent.REMOVED,
110
+ data: org
111
+ })
112
+
113
+ // dispose organization
114
+ org.dispose()
115
+ }
116
+
117
+ /**
118
+ * Create organization.
119
+ * @param name
120
+ * @param description
121
+ */
122
+ async internalCreateOrganization(
123
+ name: string,
124
+ description: string
125
+ ): Promise<OrganizationImpl> {
126
+ if (name === undefined || name === null) {
127
+ throw new Error("Organization create, name is undefined or null")
128
+ }
129
+ if (description === undefined || description === null) {
130
+ throw new Error("Organization create, description is undefined or null")
131
+ }
132
+ if (name.length === 0 || name.trim().length === 0) {
133
+ throw new Error("Organization create, name is empty")
134
+ }
135
+ const response = await this.context
136
+ .resolve(RpcService)
137
+ ?.requestBuilder("api/v1/Organizations")
138
+ .sendPostJson({
139
+ profile: {
140
+ name: name,
141
+ description: description
142
+ }
143
+ })
144
+ if (ResponseUtils.isFail(response)) {
145
+ await ResponseUtils.throwError(
146
+ `Organization create failed, name: ${name}, description: ${description}`,
147
+ response
148
+ )
149
+ }
150
+ const content = (await response!.json()).organization as OrganizationDto
151
+
152
+ // create organization and init from content
153
+ const org = await new OrganizationImpl(this.context).initFrom(content, true)
154
+
155
+ // add organization to collection
156
+ this.organizations.push(org)
157
+
158
+ // dispatch event, organization added
159
+ this.dispatch({
160
+ type: OrganizationsEvent.ADDED,
161
+ data: org
162
+ })
163
+
164
+ return org
165
+ }
166
+
167
+ /**
168
+ * Init organizations from user profile.
169
+ * @param adminInOrganization
170
+ * @param organizations
171
+ * @param settings
172
+ */
173
+ async internalInitFrom(
174
+ adminInOrganization: string[],
175
+ organizations: OrganizationDto[],
176
+ settings: UserSettings | null | undefined
177
+ ): Promise<void> {
178
+ this.currentOrganizationId = settings?.activeOrganizationId
179
+ for (const organization of organizations) {
180
+ // create organization and init from content
181
+ const org = await new OrganizationImpl(this.context).initFrom(
182
+ organization,
183
+ adminInOrganization.includes(organization.id)
184
+ )
185
+
186
+ // add organization to collection
187
+ this.organizations.push(org)
188
+
189
+ // dispatch event, organization added
190
+ this.dispatch({
191
+ type: OrganizationsEvent.ADDED,
192
+ data: org
193
+ })
194
+ }
195
+ }
196
+
197
+ }
@@ -1,46 +1,26 @@
1
- import { EventDispatcher } from '../events'
1
+ import { EventDispatcher } from "../../events"
2
+ import { Organization } from "./organization"
2
3
 
3
4
  /**
4
5
  * Organization id.
5
6
  */
6
7
  export type OrganizationId = string
7
8
 
8
- /**
9
- * Organization.
10
- */
11
- export abstract class Organization {
12
- /**
13
- * Organization id.
14
- */
15
- abstract get id(): OrganizationId
16
-
17
- /**
18
- * Organization name.
19
- */
20
- abstract get name(): string
21
-
22
- /**
23
- * Organization description.
24
- */
25
- abstract get description(): string
26
- }
27
-
28
9
  /**
29
10
  * Organization event.
30
11
  */
31
- export enum OrganizationEvent {
32
- ADDED = 'added',
33
- REMOVED = 'removed',
34
- CHANGED = 'changed',
35
- CURRENT_CHANGED = 'currentChanged'
12
+ export enum OrganizationsEvent {
13
+ ADDED = "added",
14
+ REMOVED = "removed",
15
+ CURRENT_CHANGED = "currentChanged"
36
16
  }
37
17
 
38
18
  /**
39
19
  * Organizations storage.
40
20
  */
41
21
  export abstract class Organizations extends EventDispatcher<
42
- OrganizationEvent,
43
- Organization | Organizations
22
+ OrganizationsEvent,
23
+ Organization
44
24
  > {
45
25
  /**
46
26
  * User's organizations.
@@ -0,0 +1,56 @@
1
+ import { UserEvent, UserProfile } from "./userProfile"
2
+ import { UserInfoResponse } from "../../dto/userInfoResponse"
3
+
4
+ export class UserProfileImpl extends UserProfile {
5
+ private content?: UserInfoResponse
6
+
7
+ get id(): string {
8
+ if (this.content) {
9
+ return this.content.user.id
10
+ }
11
+ throw new Error("The profile is not loaded.")
12
+ }
13
+
14
+ get name(): string {
15
+ if (this.content) {
16
+ return this.content.user.profile.name
17
+ }
18
+ throw new Error("The profile is not loaded.")
19
+ }
20
+
21
+ get email(): string {
22
+ if (this.content) {
23
+ return this.content.user.profile.email
24
+ }
25
+ throw new Error("The profile is not loaded.")
26
+ }
27
+
28
+ get isDeleted(): boolean {
29
+ if (this.content) {
30
+ return this.content.user.isDeleted
31
+ }
32
+ throw new Error("The profile is not loaded.")
33
+ }
34
+
35
+ get createdAt(): Date {
36
+ if (this.content) {
37
+ return new Date(this.content.user.created_at)
38
+ }
39
+ throw new Error("The profile is not loaded.")
40
+ }
41
+
42
+ get modifiedAt(): Date {
43
+ if (this.content) {
44
+ return new Date(this.content.user.modified_at)
45
+ }
46
+ throw new Error("The profile is not loaded.")
47
+ }
48
+
49
+ initFrom(content: UserInfoResponse) {
50
+ this.content = content
51
+ this.dispatch({
52
+ type: UserEvent.CHANGED,
53
+ data: this
54
+ })
55
+ }
56
+ }
@@ -1,9 +1,9 @@
1
- import { EventDispatcher } from '../events'
1
+ import { EventDispatcher } from "../../events"
2
2
 
3
3
  export type UserId = string
4
4
 
5
5
  export enum UserEvent {
6
- CHANGED = 'changed'
6
+ CHANGED = "changed"
7
7
  }
8
8
 
9
9
  export abstract class UserProfile extends EventDispatcher<
@@ -0,0 +1,129 @@
1
+ import { Context } from "../../context"
2
+ import { Files } from "../files/files"
3
+ import { Workspace, WorkspaceEvent } from "./workspace"
4
+ import { OrganizationImpl } from "../organizations/organization.impl"
5
+ import { WorkspaceDto } from "../../dto/workspacesResponse"
6
+ import { RpcService } from "../../services/rpcService"
7
+ import { FilesImpl } from "../files/files.impl"
8
+ import { ResponseUtils } from "../../services/responseUtils"
9
+
10
+ export class WorkspaceImpl extends Workspace {
11
+ private _isMarkAsDeleted: boolean = false
12
+ private _workspace?: WorkspaceDto
13
+
14
+ private readonly _files: FilesImpl
15
+
16
+ constructor(
17
+ public readonly organization: OrganizationImpl,
18
+ public readonly context: Context
19
+ ) {
20
+ super()
21
+ this._files = new FilesImpl(this, context)
22
+ }
23
+
24
+ get id(): string {
25
+ if (this._workspace) {
26
+ return this._workspace.id
27
+ }
28
+ throw new Error("Workspace is not loaded.")
29
+ }
30
+
31
+ get name(): string {
32
+ if (this._workspace) {
33
+ return this._workspace.profile.name
34
+ }
35
+ throw new Error("Workspace is not loaded.")
36
+ }
37
+
38
+ get description(): string {
39
+ if (this._workspace) {
40
+ return this._workspace.profile.description
41
+ }
42
+ throw new Error("Workspace is not loaded.")
43
+ }
44
+
45
+ get files(): Files {
46
+ return this._files
47
+ }
48
+
49
+ async filesCount(): Promise<number> {
50
+ // send request to the server
51
+ const response = await this.context
52
+ .resolve(RpcService)
53
+ ?.requestBuilder("api/v1/Workspaces/files/count")
54
+ .searchParam("workspaceId", this.id)
55
+ .searchParam("organizationId", this.organization.id)
56
+ .sendGet()
57
+
58
+ // check response status
59
+ if (ResponseUtils.isFail(response)) {
60
+ await ResponseUtils.throwError(
61
+ `Failed during get workspace total files count for ${this.id} of ${this.organization.id}`,
62
+ response
63
+ )
64
+ }
65
+
66
+ return (await response!.json()).count
67
+ }
68
+
69
+ async change(name: string, description: string): Promise<void> {
70
+ if (!this._workspace) {
71
+ throw new Error("Workspace is not loaded.")
72
+ }
73
+ if (this._isMarkAsDeleted) {
74
+ throw new Error("Workspace is marked as deleted.")
75
+ }
76
+ if (name === this.name && description === this.description) {
77
+ return Promise.resolve()
78
+ }
79
+ if (name === undefined || name === null || name.trim() === "") {
80
+ throw new Error("Name is required. Please provide a valid name.")
81
+ }
82
+ if (
83
+ description === undefined ||
84
+ description === null ||
85
+ description.trim() === ""
86
+ ) {
87
+ throw new Error(
88
+ "Description is required. Please provide a valid description."
89
+ )
90
+ }
91
+
92
+ const response = await this.context
93
+ .resolve(RpcService)
94
+ ?.requestBuilder("api/v1/Workspaces")
95
+ .sendPutJson({
96
+ workspaceId: this.id,
97
+ profile: {
98
+ name,
99
+ description
100
+ }
101
+ })
102
+
103
+ if (ResponseUtils.isFail(response)) {
104
+ await ResponseUtils.throwError("Failed to change workspace", response)
105
+ }
106
+
107
+ if (this._workspace) {
108
+ this._workspace.profile.name = name
109
+ this._workspace.profile.description = description
110
+ }
111
+
112
+ this.dispatch({
113
+ type: WorkspaceEvent.CHANGED,
114
+ data: this
115
+ })
116
+ }
117
+
118
+ async initFrom(workspace: WorkspaceDto) {
119
+ this._workspace = workspace
120
+ }
121
+
122
+ get isMarkAsDeleted(): boolean {
123
+ return this._isMarkAsDeleted
124
+ }
125
+
126
+ markToDelete(): void {
127
+ this._isMarkAsDeleted = true
128
+ }
129
+ }
@@ -0,0 +1,54 @@
1
+ import { EventDispatcher } from "../../events"
2
+ import { Files } from "../files/files"
3
+ import { WorkspaceId } from "./workspaces"
4
+ import { Organization } from "../organizations/organization"
5
+
6
+ /**
7
+ * Workspace event.
8
+ */
9
+ export enum WorkspaceEvent {
10
+ CHANGED = "changed"
11
+ }
12
+
13
+ /**
14
+ * Workspace.
15
+ */
16
+ export abstract class Workspace extends EventDispatcher<
17
+ WorkspaceEvent,
18
+ Workspace
19
+ > {
20
+ /**
21
+ * Organization.
22
+ */
23
+ abstract get organization(): Organization
24
+
25
+ /**
26
+ * Workspace id.
27
+ */
28
+ abstract get id(): WorkspaceId
29
+
30
+ /**
31
+ * Workspace name.
32
+ */
33
+ abstract get name(): string
34
+
35
+ /**
36
+ * Workspace description.
37
+ */
38
+ abstract get description(): string
39
+
40
+ /**
41
+ * Workspace files.
42
+ */
43
+ abstract get files(): Files
44
+
45
+ /**
46
+ * Workspace files count.
47
+ */
48
+ abstract filesCount(): Promise<number>
49
+
50
+ /**
51
+ * Change workspace name and description.
52
+ */
53
+ abstract change(name: string, description: string): Promise<void>
54
+ }