prow-authority 3.6.3

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 (168) hide show
  1. package/.claude/settings.local.json +11 -0
  2. package/.dockerignore +11 -0
  3. package/.github/workflows/_deploy.yml +191 -0
  4. package/.github/workflows/deploy-dev.yml +30 -0
  5. package/.github/workflows/deploy-prod.yml +34 -0
  6. package/CLAUDE.md +114 -0
  7. package/Dockerfile +61 -0
  8. package/Dockerfile.dev +24 -0
  9. package/README.md +1 -0
  10. package/package.json +61 -0
  11. package/src/App.ts +40 -0
  12. package/src/helpers/api-error.ts +21 -0
  13. package/src/helpers/authority.ts +216 -0
  14. package/src/helpers/config.ts +4 -0
  15. package/src/helpers/holded.ts +105 -0
  16. package/src/helpers/mysql.ts +15 -0
  17. package/src/helpers/notifications.ts +55 -0
  18. package/src/helpers/random.ts +18 -0
  19. package/src/helpers/s3.ts +43 -0
  20. package/src/helpers/stripe.ts +8 -0
  21. package/src/index.ts +47 -0
  22. package/src/v1/common-types.ts +12 -0
  23. package/src/v1/controllers/admin/accounting-seat-controller.ts +148 -0
  24. package/src/v1/controllers/admin/billing-cycle-controller.ts +171 -0
  25. package/src/v1/controllers/admin/invoice-controller.ts +222 -0
  26. package/src/v1/controllers/admin/license-controller.ts +190 -0
  27. package/src/v1/controllers/admin/license-limit-controller.ts +160 -0
  28. package/src/v1/controllers/admin/notification-controller.ts +115 -0
  29. package/src/v1/controllers/admin/organization-controller.ts +210 -0
  30. package/src/v1/controllers/admin/organization-license-controller.ts +224 -0
  31. package/src/v1/controllers/admin/organization-license-limit-controller.ts +196 -0
  32. package/src/v1/controllers/admin/organization-usage-controller.ts +167 -0
  33. package/src/v1/controllers/admin/payment-method-controller.ts +173 -0
  34. package/src/v1/controllers/admin/policy-controller.ts +138 -0
  35. package/src/v1/controllers/admin/policy-version-controller.ts +143 -0
  36. package/src/v1/controllers/admin/schedule-controller.ts +181 -0
  37. package/src/v1/controllers/admin/service-controller.ts +206 -0
  38. package/src/v1/controllers/admin/service-notification-controller.ts +166 -0
  39. package/src/v1/controllers/admin/user-controller.ts +282 -0
  40. package/src/v1/controllers/admin/user-organization-controller.ts +172 -0
  41. package/src/v1/controllers/admin/user-policy-controller.ts +164 -0
  42. package/src/v1/controllers/auth/@deprecated oauth-controller.ts +191 -0
  43. package/src/v1/controllers/auth/identity-token-controller.ts +286 -0
  44. package/src/v1/controllers/auth/organization-token-controller.ts +277 -0
  45. package/src/v1/controllers/auth/temp-code-controller.ts +60 -0
  46. package/src/v1/controllers/billing/billing-controller.ts +805 -0
  47. package/src/v1/controllers/organizations/public-organization-controller.ts +1796 -0
  48. package/src/v1/controllers/policies/public-policy-controller.ts +68 -0
  49. package/src/v1/controllers/services/public-service-controller.ts +177 -0
  50. package/src/v1/controllers/services/service-controller.ts +474 -0
  51. package/src/v1/controllers/users/public-user-controller.ts +471 -0
  52. package/src/v1/daos/@deprecated auth-dao.ts +173 -0
  53. package/src/v1/daos/accounting-seat-dao.ts +111 -0
  54. package/src/v1/daos/billing-cycle-dao.ts +107 -0
  55. package/src/v1/daos/invoice-dao.ts +131 -0
  56. package/src/v1/daos/license-dao.ts +152 -0
  57. package/src/v1/daos/license-limit-dao.ts +120 -0
  58. package/src/v1/daos/organization-dao.ts +109 -0
  59. package/src/v1/daos/organization-license-dao.ts +117 -0
  60. package/src/v1/daos/organization-license-limit-dao.ts +157 -0
  61. package/src/v1/daos/organization-usage-dao.ts +115 -0
  62. package/src/v1/daos/payment-method-dao.ts +110 -0
  63. package/src/v1/daos/policy-dao.ts +105 -0
  64. package/src/v1/daos/policy-version-dao.ts +112 -0
  65. package/src/v1/daos/redis-dao.ts +38 -0
  66. package/src/v1/daos/schema.sql +462 -0
  67. package/src/v1/daos/service-dao.ts +118 -0
  68. package/src/v1/daos/service-notification-dao.ts +120 -0
  69. package/src/v1/daos/user-dao.ts +127 -0
  70. package/src/v1/daos/user-organization-dao.ts +123 -0
  71. package/src/v1/daos/user-policy-dao.ts +109 -0
  72. package/src/v1/middlewares/auth/identity-token-middleware.ts +51 -0
  73. package/src/v1/middlewares/auth/organization-token-middleware.ts +73 -0
  74. package/src/v1/middlewares/auth/service-token-middleware.ts +167 -0
  75. package/src/v1/middlewares/authority-middleware.ts +97 -0
  76. package/src/v1/middlewares/organizations/organization-middleware.ts +94 -0
  77. package/src/v1/middlewares/static/static-middleware.ts +41 -0
  78. package/src/v1/middlewares/users/user-middleware.ts +41 -0
  79. package/src/v1/routes/admin/accounting-seat-router.ts +89 -0
  80. package/src/v1/routes/admin/admin-router.ts +61 -0
  81. package/src/v1/routes/admin/billing-cycle-router.ts +89 -0
  82. package/src/v1/routes/admin/invoice-router.ts +89 -0
  83. package/src/v1/routes/admin/license-limit-router.ts +89 -0
  84. package/src/v1/routes/admin/license-router.ts +89 -0
  85. package/src/v1/routes/admin/notification-router.ts +61 -0
  86. package/src/v1/routes/admin/organization-license-limit-router.ts +89 -0
  87. package/src/v1/routes/admin/organization-license-router.ts +89 -0
  88. package/src/v1/routes/admin/organization-router.ts +89 -0
  89. package/src/v1/routes/admin/payment-method-router.ts +89 -0
  90. package/src/v1/routes/admin/policy-router.ts +89 -0
  91. package/src/v1/routes/admin/policy-version-router.ts +89 -0
  92. package/src/v1/routes/admin/schedule-router.ts +75 -0
  93. package/src/v1/routes/admin/service-notification-router.ts +98 -0
  94. package/src/v1/routes/admin/service-router.ts +89 -0
  95. package/src/v1/routes/admin/user-organization-router.ts +89 -0
  96. package/src/v1/routes/admin/user-policy-router.ts +89 -0
  97. package/src/v1/routes/admin/user-router.ts +89 -0
  98. package/src/v1/routes/auth/@deprecated auth-router.ts +199 -0
  99. package/src/v1/routes/auth/identity-token-router.ts +147 -0
  100. package/src/v1/routes/auth/organization-token-router.ts +70 -0
  101. package/src/v1/routes/billing/billing-router.ts +227 -0
  102. package/src/v1/routes/organizations/invoices-router.ts +48 -0
  103. package/src/v1/routes/organizations/payments-router.ts +104 -0
  104. package/src/v1/routes/organizations/public-organization-router.ts +319 -0
  105. package/src/v1/routes/organizations/users-router.ts +139 -0
  106. package/src/v1/routes/policies/public-policy-router.ts +50 -0
  107. package/src/v1/routes/services/public-service-router.ts +89 -0
  108. package/src/v1/routes/services/service-router.ts +197 -0
  109. package/src/v1/routes/users/public-user-router.ts +230 -0
  110. package/src/v1/routes/v1-router.ts +50 -0
  111. package/src/v1/schemas/admin/accounting-seat-schemas.ts +22 -0
  112. package/src/v1/schemas/admin/billing-cycle-schemas.ts +20 -0
  113. package/src/v1/schemas/admin/invoice-schemas.ts +41 -0
  114. package/src/v1/schemas/admin/license-limit-schemas.ts +25 -0
  115. package/src/v1/schemas/admin/license-schemas.ts +30 -0
  116. package/src/v1/schemas/admin/organization-license-limit-schemas.ts +29 -0
  117. package/src/v1/schemas/admin/organization-license-schemas.ts +43 -0
  118. package/src/v1/schemas/admin/organization-schemas.ts +67 -0
  119. package/src/v1/schemas/admin/organization-usage-schemas.ts +15 -0
  120. package/src/v1/schemas/admin/payment-method-schemas.ts +40 -0
  121. package/src/v1/schemas/admin/policy-schemas.ts +31 -0
  122. package/src/v1/schemas/admin/service-notification-schemas.ts +23 -0
  123. package/src/v1/schemas/admin/service-schemas.ts +56 -0
  124. package/src/v1/schemas/admin/user-organization-schemas.ts +24 -0
  125. package/src/v1/schemas/admin/user-policy-schemas.ts +17 -0
  126. package/src/v1/schemas/admin/user-schemas.ts +52 -0
  127. package/src/v1/schemas/auth/auth-schemas.ts +55 -0
  128. package/src/v1/schemas/billing/billing-schemas.ts +32 -0
  129. package/src/v1/schemas/organizations/public-organization-schemas.ts +77 -0
  130. package/src/v1/schemas/payments/payment-method-schemas.ts +0 -0
  131. package/src/v1/schemas/services/public-service-schemas.ts +5 -0
  132. package/src/v1/schemas/services/service-schemas.ts +27 -0
  133. package/src/v1/schemas/users/public-user-schemas.ts +73 -0
  134. package/src/v1/types/admin/accounting-seat-types.ts +16 -0
  135. package/src/v1/types/admin/billing-cycle-types.ts +14 -0
  136. package/src/v1/types/admin/invoice-types.ts +39 -0
  137. package/src/v1/types/admin/license-limit-types.ts +16 -0
  138. package/src/v1/types/admin/license-types.ts +29 -0
  139. package/src/v1/types/admin/organization-license-limit-types.ts +13 -0
  140. package/src/v1/types/admin/organization-license-types.ts +21 -0
  141. package/src/v1/types/admin/organization-types.ts +60 -0
  142. package/src/v1/types/admin/organization-usage-types.ts +17 -0
  143. package/src/v1/types/admin/payment-method-types.ts +30 -0
  144. package/src/v1/types/admin/policy-types.ts +9 -0
  145. package/src/v1/types/admin/policy-version-types.ts +12 -0
  146. package/src/v1/types/admin/service-notification-types.ts +20 -0
  147. package/src/v1/types/admin/service-types.ts +36 -0
  148. package/src/v1/types/admin/user-organization-types.ts +31 -0
  149. package/src/v1/types/admin/user-types.ts +44 -0
  150. package/src/v1/types/auth/@deprecated auth-types.ts +26 -0
  151. package/src/v1/types/auth/common-types.ts +7 -0
  152. package/src/v1/types/auth/confirmation-types.ts +5 -0
  153. package/src/v1/types/auth/identity-token-types.ts +8 -0
  154. package/src/v1/types/auth/organization-token-types.ts +23 -0
  155. package/src/v1/types/auth/otp-types.ts +12 -0
  156. package/src/v1/types/billing/billing-types.ts +37 -0
  157. package/src/v1/types/billing/ue-types.ts +29 -0
  158. package/src/v1/types/organizations/public-organization-types.ts +76 -0
  159. package/src/v1/types/policies/public-policy-types.ts +7 -0
  160. package/src/v1/types/services/public-service-types.ts +20 -0
  161. package/src/v1/types/services/service-types.ts +43 -0
  162. package/src/v1/types/users/public-user-types.ts +15 -0
  163. package/src/v1/types/users/user-policy-types.ts +11 -0
  164. package/static/error.html +55 -0
  165. package/static/grant.html +117 -0
  166. package/static/login.html +54 -0
  167. package/static/oauth-client-logo.webp +0 -0
  168. package/tsconfig.json +20 -0
@@ -0,0 +1,109 @@
1
+ import { Where } from '@beseif-solutions/utility-functions/dist/utils/sql-utils';
2
+ import mySql from '../../helpers/mysql';
3
+ import { DBRecord } from '../types/admin/organization-types';
4
+ import { Modifiers } from '../common-types';
5
+
6
+ class OrganizationDao {
7
+ public readonly get = async (params: Pick<DBRecord, `id`>): Promise<DBRecord[]> => {
8
+ try {
9
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
10
+ select: `*`,
11
+ from: `organization`,
12
+ where: params,
13
+ });
14
+ const response = await mySql.promiseQuery(q, p);
15
+ return response;
16
+ } catch (e) {
17
+ throw e;
18
+ }
19
+ };
20
+
21
+ public readonly list = async (params: Where<DBRecord>, modifiers: Modifiers = {}): Promise<DBRecord[]> => {
22
+ try {
23
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
24
+ select: `*`,
25
+ from: `organization`,
26
+ where: params,
27
+ ...modifiers.order && { order: { by: modifiers.order.by, direction: modifiers.order.direction } },
28
+ ...modifiers.limit && {
29
+ limit: {
30
+ count: parseInt(modifiers.limit.count, 10),
31
+ ...modifiers.limit.from && { from: parseInt(modifiers.limit.from, 10) },
32
+ },
33
+ },
34
+ });
35
+ const response = await mySql.promiseQuery(q, p);
36
+ return response;
37
+ } catch (e) {
38
+ throw e;
39
+ }
40
+ };
41
+
42
+ public readonly add = async (data: Omit<DBRecord, `id` | `created_date` | `modified_date`>): Promise<{ insertId: number }> => {
43
+ try {
44
+ const q = `insert into organization (uuid, properties, billing, preferences, metadata, internal, created_date, modified_date, status) values (?,?,?,?,?,?,?,?,?)`;
45
+ const p = [
46
+ data.uuid,
47
+ JSON.stringify(data.properties || {}),
48
+ JSON.stringify(data.billing || {}),
49
+ JSON.stringify(data.preferences || {}),
50
+ JSON.stringify(data.metadata || {}),
51
+ JSON.stringify(data.internal || {}),
52
+ new Date(),
53
+ new Date(),
54
+ data.status,
55
+ ];
56
+ const response = await mySql.promiseQuery(q, p);
57
+ return response;
58
+ } catch (e) {
59
+ throw e;
60
+ }
61
+ };
62
+
63
+ public readonly update = async (params: Pick<DBRecord, `id`>, data: Omit<DBRecord, `id` | `created_date` | `modified_date`>): Promise<{ affectedRows: number }> => {
64
+ try {
65
+ const q = `update organization set
66
+ uuid = ?,
67
+ properties = ?,
68
+ preferences = ?,
69
+ billing = ?,
70
+ metadata = ?,
71
+ internal = ?,
72
+ modified_date = ?,
73
+ status = ?
74
+ where id = ?`;
75
+ const p = [
76
+ data.uuid,
77
+ JSON.stringify(data.properties || {}),
78
+ JSON.stringify(data.preferences || {}),
79
+ JSON.stringify(data.billing || {}),
80
+ JSON.stringify(data.metadata || {}),
81
+ JSON.stringify(data.internal || {}),
82
+ new Date(),
83
+ data.status,
84
+ params.id,
85
+ ];
86
+ const response = await mySql.promiseQuery(q, p);
87
+ return response;
88
+ } catch (e) {
89
+ throw e;
90
+ }
91
+ };
92
+
93
+ public readonly delete = async (params: Pick<DBRecord, `id`>): Promise<{ affectedRows: number }> => {
94
+ try {
95
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
96
+ delete: null,
97
+ from: `organization`,
98
+ where: params,
99
+ });
100
+ const response = await mySql.promiseQuery(q, p);
101
+ return response;
102
+ } catch (e) {
103
+ throw e;
104
+ }
105
+ };
106
+ }
107
+
108
+ const organizationDao = new OrganizationDao();
109
+ export default organizationDao;
@@ -0,0 +1,117 @@
1
+ import { Where } from '@beseif-solutions/utility-functions/dist/utils/sql-utils';
2
+ import mySql from '../../helpers/mysql';
3
+ import { DBPrices, DBRecord } from '../types/admin/organization-license-types';
4
+ import { Modifiers } from '../common-types';
5
+
6
+ class OrganizationLicenseDao {
7
+ public readonly get = async (params: Pick<DBRecord, `id`>): Promise<DBRecord[]> => {
8
+ try {
9
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
10
+ select: `*`,
11
+ // view for enabled computed value
12
+ from: `organization_license_enabled`,
13
+ where: params,
14
+ });
15
+ const response = await mySql.promiseQuery(q, p);
16
+ return response;
17
+ } catch (e) { throw e; }
18
+ };
19
+
20
+ public readonly list = async (params: Where<DBRecord>, modifiers: Modifiers = {}): Promise<DBRecord[]> => {
21
+ try {
22
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
23
+ select: `*`,
24
+ // view for enabled computed value
25
+ from: `organization_license_enabled`,
26
+ where: params,
27
+ ...modifiers.order && { order: { by: modifiers.order.by, direction: modifiers.order.direction } },
28
+ ...modifiers.limit && {
29
+ limit: {
30
+ count: parseInt(modifiers.limit.count, 10),
31
+ ...modifiers.limit.from && { from: parseInt(modifiers.limit.from, 10) },
32
+ },
33
+ },
34
+ });
35
+ const response = await mySql.promiseQuery(q, p);
36
+ return response;
37
+ } catch (e) {
38
+ throw e;
39
+ }
40
+ };
41
+
42
+ public readonly add = async (data: Omit<DBRecord, `id` | keyof DBPrices | `enabled`>): Promise<{ insertId: number }> => {
43
+ try {
44
+ const q = `insert into organization_license (uuid, organization, service, type, associated, original, billing, properties, data, start_date, end_date, metadata, internal) values (?,?,?,?,?,?,?,?,?,?,?,?,?)`;
45
+ const p = [
46
+ data.uuid,
47
+ data.organization,
48
+ data.service,
49
+ data.type,
50
+ data.associated,
51
+ data.original,
52
+ data.billing,
53
+ JSON.stringify(data.properties || {}),
54
+ JSON.stringify(data.data || {}),
55
+ data.start_date ? new Date(data.start_date) : null,
56
+ data.end_date ? new Date(data.end_date) : null,
57
+ JSON.stringify(data.metadata || {}),
58
+ JSON.stringify(data.internal || {}),
59
+ ];
60
+ const response = await mySql.promiseQuery(q, p);
61
+ return response;
62
+ } catch (e) { throw e; }
63
+ };
64
+
65
+ public readonly update = async (params: Pick<DBRecord, `id`>, data: Omit<DBRecord, `id` | keyof DBPrices | `enabled`>): Promise<{ affectedRows: number }> => {
66
+ try {
67
+ const q = `update organization_license set
68
+ uuid = ?,
69
+ organization = ?,
70
+ service = ?,
71
+ type = ?,
72
+ associated = ?,
73
+ original = ?,
74
+ billing = ?,
75
+ properties = ?,
76
+ data = ?,
77
+ start_date = ?,
78
+ end_date = ?,
79
+ metadata = ?,
80
+ internal = ?
81
+ where id = ?`;
82
+ const p = [
83
+ data.uuid,
84
+ data.organization,
85
+ data.service,
86
+ data.type,
87
+ data.associated,
88
+ data.original,
89
+ data.billing,
90
+ JSON.stringify(data.properties || {}),
91
+ JSON.stringify(data.data || {}),
92
+ data.start_date ? new Date(data.start_date) : null,
93
+ data.end_date ? new Date(data.end_date) : null,
94
+ JSON.stringify(data.metadata || {}),
95
+ JSON.stringify(data.internal || {}),
96
+ params.id,
97
+ ];
98
+ const response = await mySql.promiseQuery(q, p);
99
+ return response;
100
+ } catch (e) { throw e; }
101
+ };
102
+
103
+ public readonly delete = async (params: Pick<DBRecord, `id`>): Promise<{ affectedRows: number }> => {
104
+ try {
105
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
106
+ delete: null,
107
+ from: `organization_license`,
108
+ where: params,
109
+ });
110
+ const response = await mySql.promiseQuery(q, p);
111
+ return response;
112
+ } catch (e) { throw e; }
113
+ };
114
+ }
115
+
116
+ const organizationLicenseDao = new OrganizationLicenseDao();
117
+ export default organizationLicenseDao;
@@ -0,0 +1,157 @@
1
+ import { MySQL, Where } from '@beseif-solutions/utility-functions/dist/utils/sql-utils';
2
+ import mySql from '../../helpers/mysql';
3
+ import { DBRecord } from '../types/admin/organization-license-limit-types';
4
+ import _ from 'lodash';
5
+ import { Modifiers } from '../common-types';
6
+
7
+ class OrganizationLicenseLimitDao {
8
+ public readonly get = async (
9
+ params: Pick<DBRecord, `id`>
10
+ ): Promise<DBRecord[]> => {
11
+ try {
12
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
13
+ select: `*`,
14
+ from: `organization_license_limit`,
15
+ where: params,
16
+ });
17
+ const response = await mySql.promiseQuery(q, p);
18
+ return response;
19
+ } catch (e) {
20
+ throw e;
21
+ }
22
+ };
23
+
24
+ public readonly list = async (params: Where<DBRecord>, modifiers: Modifiers = {}): Promise<DBRecord[]> => {
25
+ try {
26
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
27
+ select: `*`,
28
+ from: `organization_license_limit`,
29
+ where: params,
30
+ ...modifiers.order && { order: { by: modifiers.order.by, direction: modifiers.order.direction } },
31
+ ...modifiers.limit && {
32
+ limit: {
33
+ count: parseInt(modifiers.limit.count, 10),
34
+ ...modifiers.limit.from && { from: parseInt(modifiers.limit.from, 10) },
35
+ },
36
+ },
37
+ });
38
+ const response = await mySql.promiseQuery(q, p);
39
+ return response;
40
+ } catch (e) {
41
+ throw e;
42
+ }
43
+ };
44
+
45
+ public readonly count = async (params: Where<DBRecord>, group: string[] = []): Promise<({ count: number } & Record<string, any>)[]> => {
46
+ try {
47
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
48
+ select: _.compact([
49
+ ...group,
50
+ { field: `count(id)`, alias: `count` },
51
+ ]),
52
+ from: `organization_license_limit`,
53
+ where: params,
54
+ ...group.length > 0 && { group: group },
55
+ });
56
+ const response = await mySql.promiseQuery(q, p);
57
+ return response;
58
+ } catch (e) { throw e; }
59
+ };
60
+
61
+ public readonly sum = async (sum: string, params: Where<DBRecord>, group: string[] = []): Promise<({ sum: string } & Record<string, any>)[]> => {
62
+ try {
63
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
64
+ select: _.compact([
65
+ ...group,
66
+ { field: `sum(${MySQL[`getKey`](sum)})`, alias: `sum` },
67
+ ]),
68
+ from: `organization_license_limit`,
69
+ where: params,
70
+ ...group.length > 0 && { group: group },
71
+ });
72
+ const response = await mySql.promiseQuery(q, p);
73
+ return response;
74
+ } catch (e) { throw e; }
75
+ };
76
+
77
+ public readonly add = async (data: Omit<DBRecord, `id`>): Promise<{ insertId: number }> => {
78
+ try {
79
+ const q = `insert into organization_license_limit (organization, license, name, \`limit\`, period, monthly_price_abs, annual_price_abs, overconsume, overconsume_monthly_price_per_unit, overconsume_annual_price_per_unit, metadata) values (?,?,?,?,?,?,?,?,?,?,?)`;
80
+ const p = [
81
+ data.organization,
82
+ data.license,
83
+ data.name,
84
+ data.limit,
85
+ data.period,
86
+ data.monthly_price_abs,
87
+ data.annual_price_abs,
88
+ data.overconsume,
89
+ data.overconsume_monthly_price_per_unit,
90
+ data.overconsume_annual_price_per_unit,
91
+ JSON.stringify(data.metadata || {}),
92
+ ];
93
+ const response = await mySql.promiseQuery(q, p);
94
+ return response;
95
+ } catch (e) {
96
+ throw e;
97
+ }
98
+ };
99
+
100
+ public readonly update = async (
101
+ params: Pick<DBRecord, `id`>,
102
+ data: Omit<DBRecord, `id`>
103
+ ): Promise<{ affectedRows: number }> => {
104
+ try {
105
+ const q = `update organization_license_limit set
106
+ organization = ?,
107
+ license = ?,
108
+ name = ?,
109
+ \`limit\` = ?,
110
+ period = ?,
111
+ monthly_price_abs = ?,
112
+ annual_price_abs = ?,
113
+ overconsume = ?,
114
+ overconsume_monthly_price_per_unit = ?,
115
+ overconsume_annual_price_per_unit = ?,
116
+ metadata = ?
117
+ where id = ?`;
118
+ const p = [
119
+ data.organization,
120
+ data.license,
121
+ data.name,
122
+ data.limit,
123
+ data.period,
124
+ data.monthly_price_abs,
125
+ data.annual_price_abs,
126
+ data.overconsume,
127
+ data.overconsume_monthly_price_per_unit,
128
+ data.overconsume_annual_price_per_unit,
129
+ JSON.stringify(data.metadata || {}),
130
+ params.id,
131
+ ];
132
+ const response = await mySql.promiseQuery(q, p);
133
+ return response;
134
+ } catch (e) {
135
+ throw e;
136
+ }
137
+ };
138
+
139
+ public readonly delete = async (
140
+ params: Pick<DBRecord, `id`>
141
+ ): Promise<{ affectedRows: number }> => {
142
+ try {
143
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
144
+ delete: null,
145
+ from: `organization_license_limit`,
146
+ where: params,
147
+ });
148
+ const response = await mySql.promiseQuery(q, p);
149
+ return response;
150
+ } catch (e) {
151
+ throw e;
152
+ }
153
+ };
154
+ }
155
+
156
+ const organizationLicenseLimitDao = new OrganizationLicenseLimitDao();
157
+ export default organizationLicenseLimitDao;
@@ -0,0 +1,115 @@
1
+ import { Where } from '@beseif-solutions/utility-functions/dist/utils/sql-utils';
2
+ import mySql from '../../helpers/mysql';
3
+ import { Modifiers } from '../common-types';
4
+ import { DBRecord } from '../types/admin/organization-usage-types';
5
+
6
+ class OrganizationUsageDao {
7
+
8
+ public readonly get = async (params: Pick<DBRecord, `id`>): Promise<DBRecord[]> => {
9
+ try {
10
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
11
+ select: `*`,
12
+ from: `organization_usage`,
13
+ where: params,
14
+ });
15
+ const response = await mySql.promiseQuery(q, p);
16
+ return response;
17
+ } catch (e) {
18
+ throw e;
19
+ }
20
+ };
21
+
22
+ public readonly list = async (params: Where<DBRecord> | Where<DBRecord>[], modifiers: Modifiers = {}): Promise<DBRecord[]> => {
23
+ try {
24
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
25
+ select: `*`,
26
+ from: `organization_usage`,
27
+ where: params,
28
+ ...modifiers.order && { order: { by: modifiers.order.by, direction: modifiers.order.direction } },
29
+ ...modifiers.limit && {
30
+ limit: {
31
+ count: parseInt(modifiers.limit.count, 10),
32
+ ...modifiers.limit.from && { from: parseInt(modifiers.limit.from, 10) },
33
+ },
34
+ },
35
+ });
36
+
37
+ // ÑAPA: force index
38
+ const forcedIndexQuery = q.replace(`from organization_usage`, `from organization_usage force index (idx_lookup_optimized)`);
39
+
40
+ const response = await mySql.promiseQuery(forcedIndexQuery, p);
41
+ return response;
42
+ } catch (e) {
43
+ throw e;
44
+ }
45
+ };
46
+
47
+ public readonly add = async (data: Omit<DBRecord, `id` | `date`>): Promise<{ insertId: number }> => {
48
+ try {
49
+ const q = `insert into organization_usage (organization, service, name, count) values (?,?,?,?)`;
50
+ const p = [
51
+ data.organization,
52
+ data.service,
53
+ data.name,
54
+ data.count,
55
+ ];
56
+ const response = await mySql.promiseQuery(q, p);
57
+ return response;
58
+ } catch (e) {
59
+ throw e;
60
+ }
61
+ };
62
+
63
+ public readonly update = async (params: Pick<DBRecord, `id`>, data: Omit<DBRecord, `id` | `date`>): Promise<{ affectedRows: number }> => {
64
+ try {
65
+ const q = `update organization_usage set
66
+ organization = ?,
67
+ service = ?,
68
+ name = ?,
69
+ count = ?
70
+ where id = ?`;
71
+ const p = [
72
+ data.organization,
73
+ data.service,
74
+ data.name,
75
+ data.count,
76
+ params.id,
77
+ ];
78
+ const response = await mySql.promiseQuery(q, p);
79
+ return response;
80
+ } catch (e) {
81
+ throw e;
82
+ }
83
+ };
84
+
85
+ public readonly delete = async (params: Pick<DBRecord, `id`>): Promise<{ affectedRows: number }> => {
86
+ try {
87
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
88
+ delete: null,
89
+ from: `organization_usage`,
90
+ where: params,
91
+ });
92
+ const response = await mySql.promiseQuery(q, p);
93
+ return response;
94
+ } catch (e) {
95
+ throw e;
96
+ }
97
+ };
98
+
99
+ public readonly sum = async (params: Where<DBRecord>): Promise<{ total: number }[]> => {
100
+ try {
101
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
102
+ select: [{ field: `sum(count)`, alias: `total` }],
103
+ from: `organization_usage`,
104
+ where: params,
105
+ });
106
+ const response = await mySql.promiseQuery(q, p);
107
+ return response;
108
+ } catch (e) {
109
+ throw e;
110
+ }
111
+ };
112
+ }
113
+
114
+ const organizationUsageDao = new OrganizationUsageDao();
115
+ export default organizationUsageDao;
@@ -0,0 +1,110 @@
1
+ import mySql from "../../helpers/mysql";
2
+ import { Modifiers } from "../common-types";
3
+ import { DBRecord } from "../types/admin/payment-method-types";
4
+ import { Where } from "@beseif-solutions/utility-functions/dist/utils/sql-utils";
5
+
6
+ class PaymentMethodDao {
7
+
8
+ public readonly get = async (params: Pick<DBRecord, `id`>): Promise<DBRecord[]> => {
9
+ try {
10
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
11
+ select: `*`,
12
+ from: `payment_method`,
13
+ where: params,
14
+ });
15
+ const response = await mySql.promiseQuery(q, p);
16
+ return response;
17
+ } catch (e) {
18
+ throw e;
19
+ }
20
+ };
21
+
22
+ public readonly list = async (params: Where<DBRecord>, modifiers: Modifiers = {}): Promise<DBRecord[]> => {
23
+ try {
24
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
25
+ select: `*`,
26
+ from: `payment_method`,
27
+ where: params,
28
+ ...modifiers.order && { order: { by: modifiers.order.by, direction: modifiers.order.direction } },
29
+ ...modifiers.limit && {
30
+ limit: {
31
+ count: parseInt(modifiers.limit.count, 10),
32
+ ...modifiers.limit.from && { from: parseInt(modifiers.limit.from, 10) },
33
+ },
34
+ },
35
+ });
36
+ const response = await mySql.promiseQuery(q, p);
37
+ return response;
38
+ } catch (e) {
39
+ throw e;
40
+ }
41
+ };
42
+
43
+ public readonly add = async (data: Omit<DBRecord, `id` | `created_date` | `modified_date`>): Promise<{ insertId: number }> => {
44
+ try {
45
+ const q = `insert into payment_method (uuid, organization, type, properties, enabled, created_date, modified_date, metadata, internal) values (?,?,?,?,?,?,?,?,?)`;
46
+ const p = [
47
+ data.uuid,
48
+ data.organization,
49
+ data.type,
50
+ JSON.stringify(data.properties || {}),
51
+ data.enabled,
52
+ new Date(),
53
+ new Date(),
54
+ JSON.stringify(data.metadata || {}),
55
+ JSON.stringify(data.internal || {}),
56
+ ];
57
+ const response = await mySql.promiseQuery(q, p);
58
+ return response;
59
+ } catch (e) {
60
+ throw e;
61
+ }
62
+ };
63
+
64
+ public readonly update = async (params: Pick<DBRecord, `id`>, data: Omit<DBRecord, `id` | `created_date` | `modified_date`>): Promise<{ affectedRows: number }> => {
65
+ try {
66
+ const q = `update payment_method set
67
+ uuid = ?,
68
+ organization = ?,
69
+ type = ?,
70
+ properties = ?,
71
+ enabled = ?,
72
+ modified_date = ?,
73
+ metadata = ?,
74
+ internal = ?
75
+ where id = ?`;
76
+ const p = [
77
+ data.uuid,
78
+ data.organization,
79
+ data.type,
80
+ JSON.stringify(data.properties || {}),
81
+ data.enabled,
82
+ new Date(),
83
+ JSON.stringify(data.metadata || {}),
84
+ JSON.stringify(data.internal || {}),
85
+ params.id,
86
+ ];
87
+ const response = await mySql.promiseQuery(q, p);
88
+ return response;
89
+ } catch (e) {
90
+ throw e;
91
+ }
92
+ };
93
+
94
+ public readonly delete = async (params: Pick<DBRecord, `id`>): Promise<{ affectedRows: number }> => {
95
+ try {
96
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
97
+ delete: null,
98
+ from: `payment_method`,
99
+ where: params,
100
+ });
101
+ const response = await mySql.promiseQuery(q, p);
102
+ return response;
103
+ } catch (e) {
104
+ throw e;
105
+ }
106
+ };
107
+ }
108
+
109
+ const paymentMethodDao = new PaymentMethodDao();
110
+ export default paymentMethodDao;