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,111 @@
1
+ import { Where } from '@beseif-solutions/utility-functions/dist/utils/sql-utils';
2
+ import mySql from '../../helpers/mysql';
3
+ import { DBRecord } from '../types/admin/accounting-seat-types';
4
+ import { Modifiers } from '../common-types';
5
+
6
+ class AccountingSeatDao {
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: `accounting_seat`,
12
+ where: params,
13
+ });
14
+ const response = await mySql.promiseQuery(q, p);
15
+ return response;
16
+ } catch (e) { throw e; }
17
+ };
18
+
19
+ public readonly list = async (params: Where<DBRecord>, modifiers: Modifiers = {}): Promise<DBRecord[]> => {
20
+ try {
21
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
22
+ select: `*`,
23
+ from: `accounting_seat`,
24
+ where: params,
25
+ ...modifiers.order && { order: { by: modifiers.order.by, direction: modifiers.order.direction } },
26
+ ...modifiers.limit && {
27
+ limit: {
28
+ count: parseInt(modifiers.limit.count, 10),
29
+ ...modifiers.limit.from && { from: parseInt(modifiers.limit.from, 10) },
30
+ },
31
+ },
32
+ });
33
+ const response = await mySql.promiseQuery(q, p);
34
+ return response;
35
+ } catch (e) { throw e; }
36
+ };
37
+
38
+ public readonly add = async (data: Omit<DBRecord, `id`>): Promise<{ insertId: number }> => {
39
+ try {
40
+ const q = `insert into accounting_seat (uuid, organization, invoice, date, amount, done, metadata, internal) values (?,?,?,?,?,?,?,?)`;
41
+ const p = [
42
+ data.uuid,
43
+ data.organization,
44
+ data.invoice,
45
+ new Date(data.date),
46
+ data.amount,
47
+ data.done ? 1 : 0,
48
+ JSON.stringify(data.metadata || {}),
49
+ JSON.stringify(data.internal || {}),
50
+ ];
51
+ const response = await mySql.promiseQuery(q, p);
52
+ return response;
53
+ } catch (e) { throw e; }
54
+ };
55
+
56
+ public readonly update = async (params: Pick<DBRecord, `id`>, data: Omit<DBRecord, `id`>): Promise<{ affectedRows: number }> => {
57
+ try {
58
+ const q = `update accounting_seat set
59
+ uuid = ?,
60
+ organization = ?,
61
+ invoice = ?,
62
+ date = ?,
63
+ amount = ?,
64
+ done = ?,
65
+ metadata = ?,
66
+ internal = ?
67
+ where id = ?`;
68
+ const p = [
69
+ data.uuid,
70
+ data.organization,
71
+ data.invoice,
72
+ new Date(data.date),
73
+ data.amount,
74
+ data.done ? 1 : 0,
75
+ JSON.stringify(data.metadata || {}),
76
+ JSON.stringify(data.internal || {}),
77
+ params.id,
78
+ ];
79
+ const response = await mySql.promiseQuery(q, p);
80
+ return response;
81
+ } catch (e) { throw e; }
82
+ };
83
+
84
+ public readonly delete = async (params: Pick<DBRecord, `id`>): Promise<{ affectedRows: number }> => {
85
+ try {
86
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
87
+ delete: null,
88
+ from: `accounting_seat`,
89
+ where: params,
90
+ });
91
+ const response = await mySql.promiseQuery(q, p);
92
+ return response;
93
+ } catch (e) { throw e; }
94
+ };
95
+
96
+ public readonly deleteIf = async (params: Where<DBRecord>): Promise<{ affectedRows: number }> => {
97
+ try {
98
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
99
+ delete: null,
100
+ from: `accounting_seat`,
101
+ where: params,
102
+ });
103
+ const response = await mySql.promiseQuery(q, p);
104
+ return response;
105
+ } catch (e) { throw e; }
106
+ };
107
+
108
+ }
109
+
110
+ const accountingSeatDao = new AccountingSeatDao();
111
+ export default accountingSeatDao;
@@ -0,0 +1,107 @@
1
+ import { Where } from '@beseif-solutions/utility-functions/dist/utils/sql-utils';
2
+ import mySql from '../../helpers/mysql';
3
+ import { DBRecord } from '../types/admin/billing-cycle-types';
4
+ import { Modifiers } from '../common-types';
5
+
6
+ class BillingCycleDao {
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: `billing_cycle`,
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: `billing_cycle`,
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 billing_cycle (uuid, organization, trial, start_date, end_date, metadata, internal) values (?,?,?,?,?,?,?)`;
46
+ const p = [
47
+ data.uuid,
48
+ data.organization,
49
+ data.trial,
50
+ new Date(data.start_date),
51
+ new Date(data.end_date),
52
+ JSON.stringify(data.metadata || {}),
53
+ JSON.stringify(data.internal || {}),
54
+ ];
55
+ const response = await mySql.promiseQuery(q, p);
56
+ return response;
57
+ } catch (e) {
58
+ throw e;
59
+ }
60
+ };
61
+
62
+ public readonly update = async (params: Pick<DBRecord, `id`>, data: Omit<DBRecord, `id` | `created_date` | `modified_date`>): Promise<{ affectedRows: number }> => {
63
+ try {
64
+ const q = `update billing_cycle set
65
+ uuid = ?,
66
+ organization = ?,
67
+ trial = ?,
68
+ start_date = ?,
69
+ end_date = ?,
70
+ metadata = ?,
71
+ internal = ?
72
+ where id = ?`;
73
+ const p = [
74
+ data.uuid,
75
+ data.organization,
76
+ data.trial,
77
+ new Date(data.start_date),
78
+ new Date(data.end_date),
79
+ JSON.stringify(data.metadata || {}),
80
+ JSON.stringify(data.internal || {}),
81
+ params.id,
82
+ ];
83
+ const response = await mySql.promiseQuery(q, p);
84
+ return response;
85
+ } catch (e) {
86
+ throw e;
87
+ }
88
+ };
89
+
90
+ public readonly delete = async (params: Pick<DBRecord, `id`>): Promise<{ affectedRows: number }> => {
91
+ try {
92
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
93
+ delete: null,
94
+ from: `billing_cycle`,
95
+ where: params,
96
+ });
97
+ const response = await mySql.promiseQuery(q, p);
98
+ return response;
99
+ } catch (e) {
100
+ throw e;
101
+ }
102
+ };
103
+
104
+ }
105
+
106
+ const billingCycleDao = new BillingCycleDao();
107
+ export default billingCycleDao;
@@ -0,0 +1,131 @@
1
+ import { Where } from '@beseif-solutions/utility-functions/dist/utils/sql-utils';
2
+ import mySql from '../../helpers/mysql';
3
+ import { DBRecord } from '../types/admin/invoice-types';
4
+ import { Modifiers } from '../common-types';
5
+
6
+ class InvoiceDao {
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: `invoice`,
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: `invoice`,
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`>): Promise<{ insertId: number }> => {
44
+ try {
45
+ const q = `insert into invoice (uuid, organization, date, method, amount, tax_code, tax_percentage, concepts, billing, status, invoice, number, payment, metadata, internal) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`;
46
+ const p = [
47
+ data.uuid,
48
+ data.organization,
49
+ new Date(data.date),
50
+ data.method,
51
+ data.amount,
52
+ data.tax_code,
53
+ data.tax_percentage,
54
+ JSON.stringify(data.concepts || []),
55
+ JSON.stringify(data.billing || {}),
56
+ data.status,
57
+ data.invoice,
58
+ data.number || null,
59
+ data.payment,
60
+ JSON.stringify(data.metadata || {}),
61
+ JSON.stringify(data.internal || {}),
62
+ ];
63
+ const response = await mySql.promiseQuery(q, p);
64
+ return response;
65
+ } catch (e) {
66
+ throw e;
67
+ }
68
+ };
69
+
70
+ public readonly update = async (params: Pick<DBRecord, `id`>, data: Omit<DBRecord, `id`>): Promise<{ affectedRows: number }> => {
71
+ try {
72
+ const q = `update invoice set
73
+ uuid = ?,
74
+ organization = ?,
75
+ date = ?,
76
+ method = ?,
77
+ amount = ?,
78
+ tax_code = ?,
79
+ tax_percentage = ?,
80
+ concepts = ?,
81
+ billing = ?,
82
+ status = ?,
83
+ invoice = ?,
84
+ number = ?,
85
+ payment = ?,
86
+ metadata = ?,
87
+ internal = ?
88
+ where id = ?`;
89
+ const p = [
90
+ data.uuid,
91
+ data.organization,
92
+ new Date(data.date),
93
+ data.method,
94
+ data.amount,
95
+ data.tax_code,
96
+ data.tax_percentage,
97
+ JSON.stringify(data.concepts || []),
98
+ JSON.stringify(data.billing || {}),
99
+ data.status,
100
+ data.invoice,
101
+ data.number || null,
102
+ data.payment,
103
+ JSON.stringify(data.metadata || {}),
104
+ JSON.stringify(data.internal || {}),
105
+ params.id,
106
+ ];
107
+ const response = await mySql.promiseQuery(q, p);
108
+ return response;
109
+ } catch (e) {
110
+ throw e;
111
+ }
112
+ };
113
+
114
+ public readonly delete = async (params: Pick<DBRecord, `id`>): Promise<{ affectedRows: number }> => {
115
+ try {
116
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
117
+ delete: null,
118
+ from: `invoice`,
119
+ where: params,
120
+ });
121
+ const response = await mySql.promiseQuery(q, p);
122
+ return response;
123
+ } catch (e) {
124
+ throw e;
125
+ }
126
+ };
127
+
128
+ }
129
+
130
+ const invoiceDao = new InvoiceDao();
131
+ export default invoiceDao;
@@ -0,0 +1,152 @@
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/license-types';
4
+ import { DBRecord as LicenseLimit } from '../types/admin/license-limit-types';
5
+ import { Modifiers } from '../common-types';
6
+
7
+ class LicenseDao {
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: `license_prices`,
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: `license_prices`,
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` | keyof DBPrices | `created_date` | `modified_date`>): Promise<{ insertId: number }> => {
44
+ try {
45
+ const q = `insert into license (uuid, service, type, associated, properties, data, created_date, modified_date, public, enabled, metadata) values (?,?,?,?,?,?,?,?,?,?,?)`;
46
+ const p = [
47
+ data.uuid,
48
+ data.service,
49
+ data.type,
50
+ data.associated,
51
+ JSON.stringify(data.properties || {}),
52
+ JSON.stringify(data.data || {}),
53
+ new Date(),
54
+ new Date(),
55
+ data.public,
56
+ data.enabled,
57
+ JSON.stringify(data.metadata || {}),
58
+ ];
59
+ const response = await mySql.promiseQuery(q, p);
60
+ return response;
61
+ } catch (e) {
62
+ throw e;
63
+ }
64
+ };
65
+
66
+ public readonly update = async (params: Pick<DBRecord, `id`>, data: Omit<DBRecord, `id` | keyof DBPrices | `created_date` | `modified_date`>): Promise<{ affectedRows: number }> => {
67
+ try {
68
+ const q = `update license set
69
+ uuid = ?,
70
+ service = ?,
71
+ type = ?,
72
+ associated = ?,
73
+ properties = ?,
74
+ data = ?,
75
+ modified_date = ?,
76
+ public = ?,
77
+ enabled = ?,
78
+ metadata = ?
79
+ where id = ?`;
80
+ const p = [
81
+ data.uuid,
82
+ data.service,
83
+ data.type,
84
+ data.associated,
85
+ JSON.stringify(data.properties || {}),
86
+ JSON.stringify(data.data || {}),
87
+ new Date(),
88
+ data.public,
89
+ data.enabled,
90
+ JSON.stringify(data.metadata || {}),
91
+ params.id,
92
+ ];
93
+ const response = await mySql.promiseQuery(q, p);
94
+ return response;
95
+ } catch (e) {
96
+ throw e;
97
+ }
98
+ };
99
+
100
+ public readonly delete = async (params: Pick<DBRecord, `id`>): Promise<{ affectedRows: number }> => {
101
+ try {
102
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
103
+ delete: null,
104
+ from: `license`,
105
+ where: params,
106
+ });
107
+ const response = await mySql.promiseQuery(q, p);
108
+ return response;
109
+ } catch (e) {
110
+ throw e;
111
+ }
112
+ };
113
+
114
+ public readonly prices = async (
115
+ params: Pick<DBRecord, `id`>
116
+ ): Promise<DBPrices[]> => {
117
+ try {
118
+ const { query: q, params: p } = await mySql.queryConstructor<{ l: DBRecord, ll: LicenseLimit }>({
119
+ select: [
120
+ { field: `sum(ll.monthly_price_abs)`, alias: `monthly_price` },
121
+ { field: `sum(ll.annual_price_abs)`, alias: `annual_price` },
122
+ ],
123
+ from: {
124
+ table: `license`,
125
+ alias: `l`,
126
+ join: [
127
+ {
128
+ type: `inner`,
129
+ table: `license_limit`,
130
+ alias: `ll`,
131
+ on: [
132
+ {
133
+ origin: `id`,
134
+ rel: `=`,
135
+ destiny: `license`,
136
+ },
137
+ ],
138
+ },
139
+ ],
140
+ },
141
+ where: { l: params },
142
+ });
143
+ const response = await mySql.promiseQuery(q, p);
144
+ return response;
145
+ } catch (e) {
146
+ throw e;
147
+ }
148
+ };
149
+ }
150
+
151
+ const licenseDao = new LicenseDao();
152
+ export default licenseDao;
@@ -0,0 +1,120 @@
1
+ import { Where } from '@beseif-solutions/utility-functions/dist/utils/sql-utils';
2
+ import mySql from '../../helpers/mysql';
3
+ import { DBRecord } from '../types/admin/license-limit-types';
4
+ import { Modifiers } from '../common-types';
5
+
6
+ class LicenseLimitDao {
7
+ public readonly get = async (
8
+ params: Pick<DBRecord, `id`>
9
+ ): Promise<DBRecord[]> => {
10
+ try {
11
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
12
+ select: `*`,
13
+ from: `license_limit`,
14
+ where: params,
15
+ });
16
+ const response = await mySql.promiseQuery(q, p);
17
+ return response;
18
+ } catch (e) {
19
+ throw e;
20
+ }
21
+ };
22
+
23
+ public readonly list = async (params: Where<DBRecord>, modifiers: Modifiers = {}): Promise<DBRecord[]> => {
24
+ try {
25
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
26
+ select: `*`,
27
+ from: `license_limit`,
28
+ where: params,
29
+ ...modifiers.order && { order: { by: modifiers.order.by, direction: modifiers.order.direction } },
30
+ ...modifiers.limit && {
31
+ limit: {
32
+ count: parseInt(modifiers.limit.count, 10),
33
+ ...modifiers.limit.from && { from: parseInt(modifiers.limit.from, 10) },
34
+ },
35
+ },
36
+ });
37
+ const response = await mySql.promiseQuery(q, p);
38
+ return response;
39
+ } catch (e) {
40
+ throw e;
41
+ }
42
+ };
43
+
44
+ public readonly add = async (
45
+ data: Omit<DBRecord, `id` | `created_date` | `modified_date`>
46
+ ): Promise<{ insertId: number }> => {
47
+ try {
48
+ const q = `insert into license_limit (license, name, \`limit\`, period, monthly_price_abs, annual_price_abs, overconsume_monthly_price_per_unit, overconsume_annual_price_per_unit, metadata) values (?,?,?,?,?,?,?,?,?)`;
49
+ const p = [
50
+ data.license,
51
+ data.name,
52
+ data.limit,
53
+ data.period,
54
+ data.monthly_price_abs,
55
+ data.annual_price_abs,
56
+ data.overconsume_monthly_price_per_unit,
57
+ data.overconsume_annual_price_per_unit,
58
+ JSON.stringify(data.metadata || {}),
59
+ ];
60
+ const response = await mySql.promiseQuery(q, p);
61
+ return response;
62
+ } catch (e) {
63
+ throw e;
64
+ }
65
+ };
66
+
67
+ public readonly update = async (
68
+ params: Pick<DBRecord, `id`>,
69
+ data: Omit<DBRecord, `id` | `created_date` | `modified_date`>
70
+ ): Promise<{ affectedRows: number }> => {
71
+ try {
72
+ const q = `update license_limit set
73
+ license = ?,
74
+ name = ?,
75
+ \`limit\` = ?,
76
+ period = ?,
77
+ monthly_price_abs = ?,
78
+ annual_price_abs = ?,
79
+ overconsume_monthly_price_per_unit = ?,
80
+ overconsume_annual_price_per_unit = ?,
81
+ metadata = ?
82
+ where id = ?`;
83
+ const p = [
84
+ data.license,
85
+ data.name,
86
+ data.limit,
87
+ data.period,
88
+ data.monthly_price_abs,
89
+ data.annual_price_abs,
90
+ data.overconsume_monthly_price_per_unit,
91
+ data.overconsume_annual_price_per_unit,
92
+ JSON.stringify(data.metadata || {}),
93
+ params.id,
94
+ ];
95
+ const response = await mySql.promiseQuery(q, p);
96
+ return response;
97
+ } catch (e) {
98
+ throw e;
99
+ }
100
+ };
101
+
102
+ public readonly delete = async (
103
+ params: Pick<DBRecord, `id`>
104
+ ): Promise<{ affectedRows: number }> => {
105
+ try {
106
+ const { query: q, params: p } = await mySql.queryConstructor<DBRecord>({
107
+ delete: null,
108
+ from: `license_limit`,
109
+ where: params,
110
+ });
111
+ const response = await mySql.promiseQuery(q, p);
112
+ return response;
113
+ } catch (e) {
114
+ throw e;
115
+ }
116
+ };
117
+ }
118
+
119
+ const licenseLimitDao = new LicenseLimitDao();
120
+ export default licenseLimitDao;