@memberjunction/codegen-lib 0.9.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.
- package/dist/angular_client_codegen.d.ts +2 -0
- package/dist/angular_client_codegen.js +360 -0
- package/dist/angular_client_codegen.js.map +1 -0
- package/dist/config.d.ts +101 -0
- package/dist/config.js +55 -0
- package/dist/config.js.map +1 -0
- package/dist/db.d.ts +3 -0
- package/dist/db.js +19 -0
- package/dist/db.js.map +1 -0
- package/dist/dbSchema.d.ts +3 -0
- package/dist/dbSchema.js +143 -0
- package/dist/dbSchema.js.map +1 -0
- package/dist/entity_subclasses_codegen.d.ts +4 -0
- package/dist/entity_subclasses_codegen.js +84 -0
- package/dist/entity_subclasses_codegen.js.map +1 -0
- package/dist/graphql_client_codegen.d.ts +4 -0
- package/dist/graphql_client_codegen.js +161 -0
- package/dist/graphql_client_codegen.js.map +1 -0
- package/dist/graphql_server_codegen.d.ts +5 -0
- package/dist/graphql_server_codegen.js +509 -0
- package/dist/graphql_server_codegen.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/logging.d.ts +2 -0
- package/dist/logging.js +36 -0
- package/dist/logging.js.map +1 -0
- package/dist/manageMetadata.d.ts +9 -0
- package/dist/manageMetadata.js +603 -0
- package/dist/manageMetadata.js.map +1 -0
- package/dist/react_client_codegen.d.ts +4 -0
- package/dist/react_client_codegen.js +147 -0
- package/dist/react_client_codegen.js.map +1 -0
- package/dist/runCodeGen.d.ts +1 -0
- package/dist/runCodeGen.js +213 -0
- package/dist/runCodeGen.js.map +1 -0
- package/dist/runCommand.d.ts +9 -0
- package/dist/runCommand.js +111 -0
- package/dist/runCommand.js.map +1 -0
- package/dist/sql.d.ts +6 -0
- package/dist/sql.js +78 -0
- package/dist/sql.js.map +1 -0
- package/dist/sql_codegen.d.ts +11 -0
- package/dist/sql_codegen.js +753 -0
- package/dist/sql_codegen.js.map +1 -0
- package/dist/util.d.ts +4 -0
- package/dist/util.js +36 -0
- package/dist/util.js.map +1 -0
- package/package.json +28 -0
- package/readme.md +3 -0
|
@@ -0,0 +1,603 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Steps in this process are:
|
|
3
|
+
1) Create New Entity Records from new tables
|
|
4
|
+
2)
|
|
5
|
+
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.updateEntityFieldRelatedEntityNameFieldMap = exports.manageEntityFields = exports.manageManyToManyEntityRelationships = exports.manageOneToManyEntityRelationships = exports.manageEntityRelationships = exports.manageMetadata = exports.newEntityList = void 0;
|
|
9
|
+
const config_1 = require("./config");
|
|
10
|
+
const core_1 = require("@memberjunction/core");
|
|
11
|
+
const logging_1 = require("./logging");
|
|
12
|
+
const sql_1 = require("./sql");
|
|
13
|
+
exports.newEntityList = [];
|
|
14
|
+
async function manageMetadata(ds) {
|
|
15
|
+
const md = new core_1.Metadata();
|
|
16
|
+
let bSuccess = true;
|
|
17
|
+
if (!await createNewEntities(ds)) {
|
|
18
|
+
(0, logging_1.logError)('Error creating new entities');
|
|
19
|
+
bSuccess = false;
|
|
20
|
+
}
|
|
21
|
+
if (!await (0, sql_1.recompileAllBaseViews)(ds)) {
|
|
22
|
+
(0, logging_1.logError)('Error recompiling base views');
|
|
23
|
+
// many times the former versions of base views will NOT succesfully recompile, so don't consider that scenario to be a
|
|
24
|
+
// failure for this entire function
|
|
25
|
+
// bSuccess = false;
|
|
26
|
+
}
|
|
27
|
+
if (!await manageEntityFields(ds)) {
|
|
28
|
+
(0, logging_1.logError)('Error managing entity fields');
|
|
29
|
+
bSuccess = false;
|
|
30
|
+
}
|
|
31
|
+
if (!await manageEntityRelationships(ds, md)) {
|
|
32
|
+
(0, logging_1.logError)('Error managing entity relationships');
|
|
33
|
+
bSuccess = false;
|
|
34
|
+
}
|
|
35
|
+
// if (! await manageVirtualEntities(ds)) {
|
|
36
|
+
// logError('Error managing virtual entities');
|
|
37
|
+
// bSuccess = false;
|
|
38
|
+
// }
|
|
39
|
+
// now - we need to tell our metadata object to refresh itself
|
|
40
|
+
await md.Refresh();
|
|
41
|
+
return bSuccess;
|
|
42
|
+
}
|
|
43
|
+
exports.manageMetadata = manageMetadata;
|
|
44
|
+
// COMMENTED OUT FOR NOW - FUTURE FUNCTIONALITY...
|
|
45
|
+
// ------------------------------------------------
|
|
46
|
+
// export async function manageVirtualEntities(ds: DataSource): Promise<boolean> {
|
|
47
|
+
// let bSuccess = true;
|
|
48
|
+
// // virtual entities are records defined in the entity metadata and do NOT define a distinct base table
|
|
49
|
+
// // but they do specify a base view. We DO NOT generate a base view for a virtual entity, we simply use it to figure
|
|
50
|
+
// // out the fields that should be in the entity definition and add/update/delete the entity definition to match what's in the view when this runs
|
|
51
|
+
// const sql = 'SELECT * FROM vwEntities WHERE VirtualEntity = 1';
|
|
52
|
+
// const virtualEntities = await ds.query(sql);
|
|
53
|
+
// if (virtualEntities && virtualEntities.length > 0) {
|
|
54
|
+
// // we have 1+ virtual entities, now loop through them and process each one
|
|
55
|
+
// for (const ve of virtualEntities) {
|
|
56
|
+
// if (! await manageSingleVirtualEntity(ds, ve)) {
|
|
57
|
+
// logError(`Error managing virtual entity ${ve.Name}`);
|
|
58
|
+
// bSuccess = false;
|
|
59
|
+
// }
|
|
60
|
+
// }
|
|
61
|
+
// }
|
|
62
|
+
// return bSuccess;
|
|
63
|
+
// }
|
|
64
|
+
// async function manageSingleVirtualEntity(ds: DataSource, ve: any): Promise<boolean> {
|
|
65
|
+
// try {
|
|
66
|
+
// // for a given virtual entity, we need to loop through the fields that exist in the current SQL definition for the view
|
|
67
|
+
// // and add/update/delete the entity fields to match what's in the view
|
|
68
|
+
// let bSuccess = true;
|
|
69
|
+
// const sql = `SELECT * FROM vwSQLColumnsAndEntityFields WHERE EntityID = ${ve.ID}`;
|
|
70
|
+
// const veFields = await ds.query(sql);
|
|
71
|
+
// if (veFields && veFields.length > 0) {
|
|
72
|
+
// // we have 1+ fields, now loop through them and process each one
|
|
73
|
+
// // first though, remove any fields that are no longer in the view
|
|
74
|
+
// const md = new Metadata();
|
|
75
|
+
// const entity = md.Entities.find(e => e.Name === ve.Name);
|
|
76
|
+
// if (entity) {
|
|
77
|
+
// const removeList = [];
|
|
78
|
+
// const fieldsToRemove = entity.Fields.filter(f => !veFields.find(vf => vf.FieldName === f.Name));
|
|
79
|
+
// for (const f of fieldsToRemove) {
|
|
80
|
+
// removeList.push(f.ID);
|
|
81
|
+
// }
|
|
82
|
+
// const sqlRemove = `DELETE FROM [${mj_core_schema()}].EntityField WHERE ID IN (${removeList.join(',')})`;
|
|
83
|
+
// await ds.query(sqlRemove); // this removes the fields that shouldn't be there anymore
|
|
84
|
+
// }
|
|
85
|
+
// for (const vef of veFields) {
|
|
86
|
+
// if (! await manageSingleVirtualEntityField(ds, ve, vef)) {
|
|
87
|
+
// logError(`Error managing virtual entity field ${vef.FieldName} for virtual entity ${ve.Name}`);
|
|
88
|
+
// bSuccess = false;
|
|
89
|
+
// }
|
|
90
|
+
// }
|
|
91
|
+
// }
|
|
92
|
+
// // finally make sure we update the UpdatedAt field for the entity
|
|
93
|
+
// const sqlUpdate = `UPDATE [${mj_core_schema()}].Entity SET UpdatedAt=GETDATE() WHERE ID = ${ve.ID}`;
|
|
94
|
+
// await ds.query(sqlUpdate);
|
|
95
|
+
// return true;
|
|
96
|
+
// }
|
|
97
|
+
// catch (e) {
|
|
98
|
+
// logError(e);
|
|
99
|
+
// return false;
|
|
100
|
+
// }
|
|
101
|
+
// }
|
|
102
|
+
// async function manageSingleVirtualEntityField(ds: DataSource, ve: any, veField: any): Promise<boolean> {
|
|
103
|
+
// // this function checks to see if the field exists in the entity definition, and if not, adds it
|
|
104
|
+
// // if it exist it updates the entity field to match the view's data type and nullability attributes
|
|
105
|
+
// // first, get the entity definition
|
|
106
|
+
// const md = new Metadata();
|
|
107
|
+
// const entity = md.Entities.find(e => e.Name === ve.Name);
|
|
108
|
+
// if (entity) {
|
|
109
|
+
// const field = entity.Fields.find(f => f.Name === veField.FieldName);
|
|
110
|
+
// if (field) {
|
|
111
|
+
// // have a match, so the field exists in the entity definition, now check to see if it needs to be updated
|
|
112
|
+
// if (field.Type !== veField.Type || field.AllowsNull !== veField.AllowsNull) {
|
|
113
|
+
// // the field needs to be updated, so update it
|
|
114
|
+
// const sqlUpdate = `UPDATE [${mj_core_schema()}].EntityField SET Type='${veField.Type}', AllowsNull=${veField.AllowsNull ? 1 : 0}, UpdatedAt=GETDATE() WHERE ID = ${field.ID}`;
|
|
115
|
+
// await ds.query(sqlUpdate);
|
|
116
|
+
// }
|
|
117
|
+
// }
|
|
118
|
+
// }
|
|
119
|
+
// return true;
|
|
120
|
+
// }
|
|
121
|
+
async function manageEntityRelationships(ds, md) {
|
|
122
|
+
let bResult = true;
|
|
123
|
+
bResult = bResult && await manageManyToManyEntityRelationships(ds);
|
|
124
|
+
bResult = bResult && await manageOneToManyEntityRelationships(ds, md);
|
|
125
|
+
return bResult;
|
|
126
|
+
}
|
|
127
|
+
exports.manageEntityRelationships = manageEntityRelationships;
|
|
128
|
+
async function manageOneToManyEntityRelationships(ds, md) {
|
|
129
|
+
// the way this works is that we look for entities in our catalog and we look for
|
|
130
|
+
// foreign keys in those entities. For example, if we saw an entity called Persons and that entity
|
|
131
|
+
// had a foreign key linking to an entity called Organizations via a field called OrganizationID, then we would create a relationship
|
|
132
|
+
// record in the EntityRelationship table for that relationships. In that example we would create the
|
|
133
|
+
// relationship record with the following values:
|
|
134
|
+
// EntityID = ID of Organizations entity
|
|
135
|
+
// RelatedEntityID = ID of Persons entity
|
|
136
|
+
// RelatedEntityJoinField = OrganizationID
|
|
137
|
+
// Type = "One To Many"
|
|
138
|
+
// BundleInAPI = 1
|
|
139
|
+
// DisplayInForm = 1
|
|
140
|
+
// DisplayName = Persons (name of the entity)
|
|
141
|
+
try {
|
|
142
|
+
// STEP 1 - search for all foreign keys in the vwEntityFields view, we use the RelatedEntityID field to determine our FKs
|
|
143
|
+
const sSQL = "SELECT * FROM vwEntityFields WHERE RelatedEntityID IS NOT NULL AND IsVirtual = 0 ORDER BY RelatedEntityID";
|
|
144
|
+
const entityFields = await ds.query(sSQL);
|
|
145
|
+
// now loop through all of our fkey fields
|
|
146
|
+
for (const f of entityFields) {
|
|
147
|
+
// for each field determine if an existing relationship exists, if not, create it
|
|
148
|
+
const sSQLRelationship = `SELECT * FROM ${(0, config_1.mj_core_schema)()}.EntityRelationship WHERE EntityID = ${f.RelatedEntityID} AND RelatedEntityID = ${f.EntityID}`;
|
|
149
|
+
const relationships = await ds.query(sSQLRelationship);
|
|
150
|
+
if (relationships && relationships.length === 0) {
|
|
151
|
+
// no relationship exists, so create it
|
|
152
|
+
const e = md.Entities.find(e => e.ID === f.EntityID);
|
|
153
|
+
const sSQLInsert = `INSERT INTO ${(0, config_1.mj_core_schema)()}.EntityRelationship (EntityID, RelatedEntityID, RelatedEntityJoinField, Type, BundleInAPI, DisplayInForm, DisplayName)
|
|
154
|
+
VALUES (${f.RelatedEntityID}, ${f.EntityID}, '${f.Name}', 'One To Many', 1, 1, '${e.Name}')`;
|
|
155
|
+
await ds.query(sSQLInsert);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
catch (e) {
|
|
161
|
+
(0, logging_1.logError)(e);
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
exports.manageOneToManyEntityRelationships = manageOneToManyEntityRelationships;
|
|
166
|
+
async function manageManyToManyEntityRelationships(ds) {
|
|
167
|
+
return true; // not implemented for now
|
|
168
|
+
}
|
|
169
|
+
exports.manageManyToManyEntityRelationships = manageManyToManyEntityRelationships;
|
|
170
|
+
async function manageEntityFields(ds) {
|
|
171
|
+
let bSuccess = true;
|
|
172
|
+
const startTime = new Date();
|
|
173
|
+
if (!await deleteUnneededEntityFields(ds)) {
|
|
174
|
+
(0, logging_1.logError)('Error deleting unneeded entity fields');
|
|
175
|
+
bSuccess = false;
|
|
176
|
+
}
|
|
177
|
+
console.log(` Deleted unneeded entity fields in ${(new Date().getTime() - startTime.getTime()) / 1000} seconds`);
|
|
178
|
+
const step2StartTime = new Date();
|
|
179
|
+
if (!await updateExistingEntityFieldsFromSchema(ds)) {
|
|
180
|
+
(0, logging_1.logError)('Error updating existing entity fields from schema');
|
|
181
|
+
bSuccess = false;
|
|
182
|
+
}
|
|
183
|
+
console.log(` Updated existing entity fields from schema in ${(new Date().getTime() - step2StartTime.getTime()) / 1000} seconds`);
|
|
184
|
+
const step3StartTime = new Date();
|
|
185
|
+
if (!await createNewEntityFieldsFromSchema(ds)) {
|
|
186
|
+
(0, logging_1.logError)('Error creating new entity fields from schema');
|
|
187
|
+
bSuccess = false;
|
|
188
|
+
}
|
|
189
|
+
console.log(` Created new entity fields from schema in ${(new Date().getTime() - step3StartTime.getTime()) / 1000} seconds`);
|
|
190
|
+
const step4StartTime = new Date();
|
|
191
|
+
if (!await setDefaultColumnWidthWhereNeeded(ds)) {
|
|
192
|
+
(0, logging_1.logError)('Error setting default column width where needed');
|
|
193
|
+
bSuccess = false;
|
|
194
|
+
}
|
|
195
|
+
console.log(` Set default column width where needed in ${(new Date().getTime() - step4StartTime.getTime()) / 1000} seconds`);
|
|
196
|
+
const step5StartTime = new Date();
|
|
197
|
+
if (!await updateEntityFieldDisplayNameWhereNull(ds)) {
|
|
198
|
+
(0, logging_1.logError)('Error updating entity field display name where null');
|
|
199
|
+
bSuccess = false;
|
|
200
|
+
}
|
|
201
|
+
console.log(` Updated entity field display name where null in ${(new Date().getTime() - step5StartTime.getTime()) / 1000} seconds`);
|
|
202
|
+
console.log(` Total time to manage entity fields: ${(new Date().getTime() - startTime.getTime()) / 1000} seconds`);
|
|
203
|
+
return bSuccess;
|
|
204
|
+
}
|
|
205
|
+
exports.manageEntityFields = manageEntityFields;
|
|
206
|
+
async function updateEntityFieldDisplayNameWhereNull(ds) {
|
|
207
|
+
try {
|
|
208
|
+
const fields = await ds.query('SELECT ID, Name FROM vwEntityFields WHERE DisplayName IS NULL AND Name <> \'ID\'');
|
|
209
|
+
if (fields && fields.length > 0)
|
|
210
|
+
for (const field of fields) {
|
|
211
|
+
const sDisplayName = stripTrailingChars(convertCamelCaseToHaveSpaces(field.Name), 'ID', true).trim();
|
|
212
|
+
if (sDisplayName.length > 0 && sDisplayName.toLowerCase().trim() !== field.Name.toLowerCase().trim()) {
|
|
213
|
+
const sSQL = `UPDATE [${(0, config_1.mj_core_schema)()}].EntityField SET UpdatedAt=GETDATE(), DisplayName = '${sDisplayName}' WHERE ID = ${field.ID}`;
|
|
214
|
+
await ds.query(sSQL);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return true;
|
|
218
|
+
}
|
|
219
|
+
catch (e) {
|
|
220
|
+
(0, logging_1.logError)(e);
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
async function setDefaultColumnWidthWhereNeeded(ds) {
|
|
225
|
+
try {
|
|
226
|
+
await ds.query('EXEC spSetDefaultColumnWidthWhereNeeded');
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
catch (e) {
|
|
230
|
+
(0, logging_1.logError)(e);
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
function getPendingEntityFieldsSELECTSQL() {
|
|
235
|
+
const sSQL = `WITH NumberedRows AS (
|
|
236
|
+
SELECT
|
|
237
|
+
sf.EntityID,
|
|
238
|
+
sf.Sequence,
|
|
239
|
+
sf.FieldName,
|
|
240
|
+
sf.Type,
|
|
241
|
+
sf.Length,
|
|
242
|
+
sf.Precision,
|
|
243
|
+
sf.Scale,
|
|
244
|
+
sf.AllowsNull,
|
|
245
|
+
sf.DefaultValue,
|
|
246
|
+
sf.AutoIncrement,
|
|
247
|
+
IIF(sf.IsVirtual = 1, 0, IIF(sf.FieldName = 'CreatedAt' OR sf.FieldName = 'UpdatedAt' OR sf.FieldName = 'ID', 0, 1)) AllowUpdateAPI,
|
|
248
|
+
sf.IsVirtual,
|
|
249
|
+
re.ID RelatedEntityID,
|
|
250
|
+
fk.referenced_column RelatedEntityFieldName,
|
|
251
|
+
IIF(sf.FieldName = 'Name', 1, 0) IsNameField,
|
|
252
|
+
ROW_NUMBER() OVER (PARTITION BY sf.EntityID, sf.FieldName ORDER BY (SELECT NULL)) AS rn
|
|
253
|
+
FROM
|
|
254
|
+
vwSQLColumnsAndEntityFields sf
|
|
255
|
+
LEFT OUTER JOIN
|
|
256
|
+
[${(0, config_1.mj_core_schema)()}].Entity e
|
|
257
|
+
ON
|
|
258
|
+
sf.EntityID = e.ID
|
|
259
|
+
LEFT OUTER JOIN
|
|
260
|
+
vwForeignKeys fk
|
|
261
|
+
ON
|
|
262
|
+
sf.FieldName = fk.[column] AND
|
|
263
|
+
e.BaseTable = fk.[table] AND
|
|
264
|
+
e.SchemaName = fk.[schema_name]
|
|
265
|
+
LEFT OUTER JOIN
|
|
266
|
+
[${(0, config_1.mj_core_schema)()}].Entity re -- Related Entity
|
|
267
|
+
ON
|
|
268
|
+
re.BaseTable = fk.referenced_table AND
|
|
269
|
+
re.SchemaName = fk.[schema_name]
|
|
270
|
+
WHERE
|
|
271
|
+
EntityFieldID IS NULL -- only where we have NOT YET CREATED EntityField records\n${createExcludeTablesAndSchemasFilter('sf.')}
|
|
272
|
+
)
|
|
273
|
+
SELECT
|
|
274
|
+
*
|
|
275
|
+
FROM
|
|
276
|
+
NumberedRows WHERE rn = 1 -- if someone has two foreign keys with same to/from table and field name this makes sure we only get the field info ONCE
|
|
277
|
+
ORDER BY EntityID, Sequence`;
|
|
278
|
+
return sSQL;
|
|
279
|
+
}
|
|
280
|
+
function getPendingEntityFieldINSERTSQL(n) {
|
|
281
|
+
const bDefaultInView = (n.FieldName?.trim().toLowerCase() === 'id' ||
|
|
282
|
+
n.FieldName?.trim().toLowerCase() === 'name' ||
|
|
283
|
+
n.Sequence <= config_1.configInfo.newEntityDefaults?.IncludeFirstNFieldsAsDefaultInView ||
|
|
284
|
+
n.IsNameField ? true : false);
|
|
285
|
+
return `
|
|
286
|
+
INSERT INTO [${(0, config_1.mj_core_schema)()}].EntityField
|
|
287
|
+
(
|
|
288
|
+
EntityID,
|
|
289
|
+
Sequence,
|
|
290
|
+
Name,
|
|
291
|
+
DisplayName,
|
|
292
|
+
Type,
|
|
293
|
+
Length,
|
|
294
|
+
Precision,
|
|
295
|
+
Scale,
|
|
296
|
+
AllowsNull,
|
|
297
|
+
DefaultValue,
|
|
298
|
+
AutoIncrement,
|
|
299
|
+
AllowUpdateAPI,
|
|
300
|
+
IsVirtual,
|
|
301
|
+
RelatedEntityID,
|
|
302
|
+
RelatedEntityFieldName,
|
|
303
|
+
IsNameField,
|
|
304
|
+
IncludeInUserSearchAPI,
|
|
305
|
+
IncludeRelatedEntityNameFieldInBaseView,
|
|
306
|
+
DefaultInView
|
|
307
|
+
)
|
|
308
|
+
VALUES
|
|
309
|
+
(
|
|
310
|
+
${n.EntityID},
|
|
311
|
+
${n.Sequence},
|
|
312
|
+
'${n.FieldName}',
|
|
313
|
+
'${convertCamelCaseToHaveSpaces(n.FieldName).trim()}',
|
|
314
|
+
'${n.Type}',
|
|
315
|
+
${n.Length},
|
|
316
|
+
${n.Precision},
|
|
317
|
+
${n.Scale},
|
|
318
|
+
${n.AllowsNull ? 1 : 0},
|
|
319
|
+
'${parseDefaultValue(n.DefaultValue)}',
|
|
320
|
+
${n.AutoIncrement ? 1 : 0},
|
|
321
|
+
${n.AllowUpdateAPI ? 1 : 0},
|
|
322
|
+
${n.IsVirtual ? 1 : 0},
|
|
323
|
+
${n.RelatedEntityID},
|
|
324
|
+
${n.RelatedEntityFieldName && n.RelatedEntityFieldName.length > 0 ? `'${n.RelatedEntityFieldName}'` : 'NULL'},
|
|
325
|
+
${n.IsNameField !== null ? n.IsNameField : 0},
|
|
326
|
+
${n.FieldName === 'ID' || n.IsNameField ? 1 : 0},
|
|
327
|
+
${n.RelatedEntityID && n.RelatedEntityID > 0 && n.Type.trim().toLowerCase() === 'int' ? 1 : 0},
|
|
328
|
+
${bDefaultInView ? 1 : 0}
|
|
329
|
+
)`;
|
|
330
|
+
}
|
|
331
|
+
function parseDefaultValue(sqlDefaultValue) {
|
|
332
|
+
let sResult = null;
|
|
333
|
+
if (sqlDefaultValue !== null && sqlDefaultValue !== undefined) {
|
|
334
|
+
if (sqlDefaultValue.startsWith('(') && sqlDefaultValue.endsWith(')'))
|
|
335
|
+
sResult = sqlDefaultValue.substring(1, sqlDefaultValue.length - 1);
|
|
336
|
+
else
|
|
337
|
+
sResult = sqlDefaultValue;
|
|
338
|
+
if (sResult.toUpperCase().startsWith('N\'') && sResult.endsWith('\''))
|
|
339
|
+
sResult = sResult.substring(2, sResult.length - 1);
|
|
340
|
+
if (sResult.startsWith('\'') && sResult.endsWith('\''))
|
|
341
|
+
sResult = sResult.substring(1, sResult.length - 1);
|
|
342
|
+
}
|
|
343
|
+
return sResult;
|
|
344
|
+
}
|
|
345
|
+
async function createNewEntityFieldsFromSchema(ds) {
|
|
346
|
+
try {
|
|
347
|
+
const sSQL = getPendingEntityFieldsSELECTSQL();
|
|
348
|
+
const newEntityFields = await ds.query(sSQL);
|
|
349
|
+
await ds.transaction(async () => {
|
|
350
|
+
// wrap in a transaction so we get all of it or none of it
|
|
351
|
+
for (let i = 0; i < newEntityFields.length; ++i) {
|
|
352
|
+
const n = newEntityFields[i];
|
|
353
|
+
const sSQLInsert = getPendingEntityFieldINSERTSQL(n);
|
|
354
|
+
await ds.query(sSQLInsert);
|
|
355
|
+
// if we get here, we're okay, otherwise we have an exception, which we want as it blows up transaction
|
|
356
|
+
}
|
|
357
|
+
});
|
|
358
|
+
return true;
|
|
359
|
+
}
|
|
360
|
+
catch (e) {
|
|
361
|
+
(0, logging_1.logError)(e);
|
|
362
|
+
return false;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
async function updateEntityFieldRelatedEntityNameFieldMap(ds, entityFieldID, relatedEntityNameFieldMap) {
|
|
366
|
+
try {
|
|
367
|
+
const sSQL = `EXEC spUpdateEntityFieldRelatedEntityNameFieldMap
|
|
368
|
+
@EntityFieldID=${entityFieldID} ,
|
|
369
|
+
@RelatedEntityNameFieldMap='${relatedEntityNameFieldMap}'`;
|
|
370
|
+
await ds.query(sSQL);
|
|
371
|
+
return true;
|
|
372
|
+
}
|
|
373
|
+
catch (e) {
|
|
374
|
+
(0, logging_1.logError)(e);
|
|
375
|
+
return false;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
exports.updateEntityFieldRelatedEntityNameFieldMap = updateEntityFieldRelatedEntityNameFieldMap;
|
|
379
|
+
async function updateExistingEntityFieldsFromSchema(ds) {
|
|
380
|
+
try {
|
|
381
|
+
await ds.query('EXEC spUpdateExistingEntityFieldsFromSchema');
|
|
382
|
+
return true;
|
|
383
|
+
}
|
|
384
|
+
catch (e) {
|
|
385
|
+
(0, logging_1.logError)(e);
|
|
386
|
+
return false;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
async function deleteUnneededEntityFields(ds) {
|
|
390
|
+
try {
|
|
391
|
+
await ds.query('EXEC spDeleteUnneededEntityFields');
|
|
392
|
+
return true;
|
|
393
|
+
}
|
|
394
|
+
catch (e) {
|
|
395
|
+
(0, logging_1.logError)(e);
|
|
396
|
+
return false;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
function createExcludeTablesAndSchemasFilter(fieldPrefix) {
|
|
400
|
+
let sExcludeTables = '';
|
|
401
|
+
let sExcludeSchemas = '';
|
|
402
|
+
if (config_1.configInfo.excludeTables) {
|
|
403
|
+
for (let i = 0; i < config_1.configInfo.excludeTables.length; ++i) {
|
|
404
|
+
const t = config_1.configInfo.excludeTables[i];
|
|
405
|
+
sExcludeTables += (sExcludeTables.length > 0 ? ' AND ' : '') +
|
|
406
|
+
(t.schema.indexOf('%') > -1 ? ` NOT ( ${fieldPrefix}SchemaName LIKE '${t.schema}'` :
|
|
407
|
+
` NOT ( ${fieldPrefix}SchemaName = '${t.schema}'`);
|
|
408
|
+
sExcludeTables += (t.table.indexOf('%') > -1 ? ` AND ${fieldPrefix}TableName LIKE '${t.table}') ` :
|
|
409
|
+
` AND ${fieldPrefix}TableName = '${t.table}') `);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
if (config_1.configInfo.excludeSchemas) {
|
|
413
|
+
for (let i = 0; i < config_1.configInfo.excludeSchemas.length; ++i) {
|
|
414
|
+
const s = config_1.configInfo.excludeSchemas[i];
|
|
415
|
+
sExcludeSchemas += (sExcludeSchemas.length > 0 ? ' AND ' : '') +
|
|
416
|
+
(s.indexOf('%') > -1 ? `${fieldPrefix}SchemaName NOT LIKE '${s}'` : `${fieldPrefix}SchemaName <> '${s}'`);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
const sWhere = (sExcludeTables.length > 0 || sExcludeSchemas.length > 0 ? ` AND ` : '') +
|
|
420
|
+
(sExcludeTables.length > 0 ? `(${sExcludeTables})` : '') +
|
|
421
|
+
(sExcludeSchemas.length > 0 ? (sExcludeTables.length > 0 ? ` AND ` : ``) + '(' + sExcludeSchemas + ')' : '');
|
|
422
|
+
return sWhere;
|
|
423
|
+
}
|
|
424
|
+
async function createNewEntities(ds) {
|
|
425
|
+
try {
|
|
426
|
+
const sSQL = `SELECT * FROM vwSQLTablesAndEntities WHERE EntityID IS NULL ` + createExcludeTablesAndSchemasFilter('');
|
|
427
|
+
const newEntities = await ds.query(sSQL);
|
|
428
|
+
if (newEntities && newEntities.length > 0) {
|
|
429
|
+
const md = new core_1.Metadata();
|
|
430
|
+
await ds.transaction(async () => {
|
|
431
|
+
// wrap in a transaction so we get all of it or none of it
|
|
432
|
+
for (let i = 0; i < newEntities.length; ++i) {
|
|
433
|
+
// process each of the new entities
|
|
434
|
+
await createNewEntity(ds, newEntities[i], md);
|
|
435
|
+
}
|
|
436
|
+
});
|
|
437
|
+
(0, core_1.LogStatus)(` Done creating entities, refreshing metadata to reflect new entities...`);
|
|
438
|
+
await md.Refresh(); // refresh now since we've added some new entities
|
|
439
|
+
}
|
|
440
|
+
return true; // if we get here, we succeeded
|
|
441
|
+
}
|
|
442
|
+
catch (e) {
|
|
443
|
+
(0, core_1.LogError)(e);
|
|
444
|
+
return false;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
async function createNewEntity(ds, newEntity, md) {
|
|
448
|
+
// process a single new entity
|
|
449
|
+
let newEntityName = convertCamelCaseToHaveSpaces(generatePluralName(newEntity.TableName));
|
|
450
|
+
let suffix = '';
|
|
451
|
+
const existingEntity = md.Entities.find(e => e.Name === newEntityName);
|
|
452
|
+
if (existingEntity) {
|
|
453
|
+
// the generated name is already in place, so we need another name
|
|
454
|
+
// use Entity Name __ SchemaName instead of just the table name as basis
|
|
455
|
+
suffix = '__' + newEntity.SchemaName;
|
|
456
|
+
newEntityName = newEntityName + suffix;
|
|
457
|
+
(0, core_1.LogError)(` >>>> WARNING: Entity name already exists, so using ${newEntityName} instead. If you did not intend for this, please rename the ${newEntity.SchemaName}.${newEntity.TableName} table in the database.`);
|
|
458
|
+
}
|
|
459
|
+
// get the next entity ID
|
|
460
|
+
const params = [newEntity.SchemaName];
|
|
461
|
+
const sSQLNewEntityID = `EXEC spGetNextEntityID @SchemaName=@0`;
|
|
462
|
+
const newEntityIDRaw = await ds.query(sSQLNewEntityID, params);
|
|
463
|
+
const newEntityID = newEntityIDRaw && newEntityIDRaw.length > 0 ? newEntityIDRaw[0].NextID : null;
|
|
464
|
+
if (newEntityID && newEntityID > 0) {
|
|
465
|
+
const isNewSchema = await isSchemaNew(ds, newEntity.SchemaName);
|
|
466
|
+
const sSQLInsert = createNewEntityInsertSQL(newEntityID, newEntityName, newEntity, suffix);
|
|
467
|
+
await ds.query(sSQLInsert);
|
|
468
|
+
// if we get here we created a new entity safely, otherwise we get exception
|
|
469
|
+
// add it to the new entity list
|
|
470
|
+
exports.newEntityList.push(newEntityName);
|
|
471
|
+
// next, check if this entity is in a schema that is new (e.g. no other entities have been added to this schema yet), if so and if
|
|
472
|
+
// our config option is set to create new applications from new schemas, then create a new application for this schema
|
|
473
|
+
if (isNewSchema && config_1.configInfo.newSchemaDefaults.CreateNewApplicationWithSchemaName) {
|
|
474
|
+
// new schema and config option is to create a new application from the schema name so do that
|
|
475
|
+
if (!await applicationExists(ds, newEntity.SchemaName))
|
|
476
|
+
await createNewApplication(ds, newEntity.SchemaName);
|
|
477
|
+
}
|
|
478
|
+
else {
|
|
479
|
+
// not a new schema, attempt to look up the application for this schema
|
|
480
|
+
await getApplicationIDForSchema(ds, newEntity.SchemaName);
|
|
481
|
+
}
|
|
482
|
+
// now we have an application ID, but make sure that we are configured to add this new entity to an application at all
|
|
483
|
+
if (config_1.configInfo.newEntityDefaults.AddToApplicationWithSchemaName) {
|
|
484
|
+
// we should add this entity to the application
|
|
485
|
+
const sSQLInsertApplicationEntity = `INSERT INTO ${(0, config_1.mj_core_schema)()}.ApplicationEntity
|
|
486
|
+
(ApplicationName, EntityID, Sequence) VALUES
|
|
487
|
+
('${newEntity.SchemaName}', ${newEntityID}, (SELECT ISNULL(MAX(Sequence),0)+1 FROM ${(0, config_1.mj_core_schema)()}.ApplicationEntity WHERE ApplicationName = '${newEntity.SchemaName}'))`;
|
|
488
|
+
await ds.query(sSQLInsertApplicationEntity);
|
|
489
|
+
}
|
|
490
|
+
// next up, we need to check if we're configured to add permissions for new entities, and if so, add them
|
|
491
|
+
if (config_1.configInfo.newEntityDefaults.PermissionDefaults && config_1.configInfo.newEntityDefaults.PermissionDefaults.AutoAddPermissionsForNewEntities) {
|
|
492
|
+
// we are asked to add permissions for new entities, so do that by looping through the permissions and adding them
|
|
493
|
+
const permissions = config_1.configInfo.newEntityDefaults.PermissionDefaults.Permissions;
|
|
494
|
+
for (const p of permissions) {
|
|
495
|
+
const sSQLInsertPermission = `INSERT INTO ${(0, config_1.mj_core_schema)()}.EntityPermission
|
|
496
|
+
(EntityID, RoleName, CanRead, CanCreate, CanUpdate, CanDelete) VALUES
|
|
497
|
+
(${newEntityID}, '${p.RoleName}', ${p.CanRead ? 1 : 0}, ${p.CanCreate ? 1 : 0}, ${p.CanUpdate ? 1 : 0}, ${p.CanDelete ? 1 : 0})`;
|
|
498
|
+
await ds.query(sSQLInsertPermission);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
(0, core_1.LogStatus)(` Created new entity ${newEntityName} for table ${newEntity.SchemaName}.${newEntity.TableName}`);
|
|
502
|
+
}
|
|
503
|
+
else {
|
|
504
|
+
(0, core_1.LogError)(`ERROR: Unable to get next entity ID for ${newEntity.SchemaName}.${newEntity.TableName} - it is possible that the schema has reached its MAX Id,
|
|
505
|
+
check the Schema Info entity for this schema to see if all ID values have been allocated.`);
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
async function isSchemaNew(ds, schemaName) {
|
|
509
|
+
// check to see if there are any entities in the db with this schema name
|
|
510
|
+
const sSQL = `SELECT COUNT(*) AS Count FROM ${(0, config_1.mj_core_schema)()}.Entity WHERE SchemaName = '${schemaName}'`;
|
|
511
|
+
const result = await ds.query(sSQL);
|
|
512
|
+
return result && result.length > 0 ? result[0].Count === 0 : true;
|
|
513
|
+
}
|
|
514
|
+
async function createNewApplication(ds, appName) {
|
|
515
|
+
const sSQL = "INSERT INTO " + (0, config_1.mj_core_schema)() + ".Application (Name, Description) VALUES ('" + appName + "', 'Generated for Schema'); SELECT @@IDENTITY AS ID";
|
|
516
|
+
const result = await ds.query(sSQL);
|
|
517
|
+
return result && result.length > 0 ? result[0].ID : null;
|
|
518
|
+
}
|
|
519
|
+
async function applicationExists(ds, applicationName) {
|
|
520
|
+
const sSQL = `SELECT ID FROM ${(0, config_1.mj_core_schema)()}.Application WHERE Name = '${applicationName}'`;
|
|
521
|
+
const result = await ds.query(sSQL);
|
|
522
|
+
return result && result.length > 0 ? result[0].ID > 0 : false;
|
|
523
|
+
}
|
|
524
|
+
async function getApplicationIDForSchema(ds, schemaName) {
|
|
525
|
+
const sSQL = `SELECT ID FROM ${(0, config_1.mj_core_schema)()}.Application WHERE Name = '${schemaName}'`;
|
|
526
|
+
const result = await ds.query(sSQL);
|
|
527
|
+
return result && result.length > 0 ? result[0].ID : null;
|
|
528
|
+
}
|
|
529
|
+
function createNewEntityInsertSQL(newEntityID, newEntityName, newEntity, newEntitySuffix) {
|
|
530
|
+
const newEntityDefaults = config_1.configInfo.newEntityDefaults;
|
|
531
|
+
const sSQLInsert = `INSERT INTO ${(0, config_1.mj_core_schema)()}.Entity (
|
|
532
|
+
ID,
|
|
533
|
+
Name,
|
|
534
|
+
NameSuffix,
|
|
535
|
+
BaseTable,
|
|
536
|
+
BaseView,
|
|
537
|
+
SchemaName,
|
|
538
|
+
IncludeInAPI,
|
|
539
|
+
AllowUserSearchAPI
|
|
540
|
+
${newEntityDefaults.TrackRecordChanges === undefined ? '' : ', TrackRecordChanges'}
|
|
541
|
+
${newEntityDefaults.AuditRecordAccess === undefined ? '' : ', AuditRecordAccess'}
|
|
542
|
+
${newEntityDefaults.AuditViewRuns === undefined ? '' : ', AuditViewRuns'}
|
|
543
|
+
${newEntityDefaults.AllowAllRowsAPI === undefined ? '' : ', AllowAllRowsAPI'}
|
|
544
|
+
${newEntityDefaults.AllowCreateAPI === undefined ? '' : ', AllowCreateAPI'}
|
|
545
|
+
${newEntityDefaults.AllowUpdateAPI === undefined ? '' : ', AllowUpdateAPI'}
|
|
546
|
+
${newEntityDefaults.AllowDeleteAPI === undefined ? '' : ', AllowDeleteAPI'}
|
|
547
|
+
${newEntityDefaults.UserViewMaxRows === undefined ? '' : ', UserViewMaxRows'}
|
|
548
|
+
)
|
|
549
|
+
VALUES (
|
|
550
|
+
${newEntityID},
|
|
551
|
+
'${newEntityName}',
|
|
552
|
+
${newEntitySuffix && newEntitySuffix.length > 0 ? `'${newEntitySuffix}'` : 'NULL'},
|
|
553
|
+
'${newEntity.TableName}',
|
|
554
|
+
'vw${generatePluralName(newEntity.TableName) + (newEntitySuffix && newEntitySuffix.length > 0 ? newEntitySuffix : '')}',
|
|
555
|
+
'${newEntity.SchemaName}',
|
|
556
|
+
1,
|
|
557
|
+
${newEntityDefaults.AllowUserSearchAPI === undefined ? 1 : newEntityDefaults.AllowUserSearchAPI ? 1 : 0}
|
|
558
|
+
${newEntityDefaults.TrackRecordChanges === undefined ? '' : ', ' + (newEntityDefaults.TrackRecordChanges ? '1' : '0')}
|
|
559
|
+
${newEntityDefaults.AuditRecordAccess === undefined ? '' : ', ' + (newEntityDefaults.AuditRecordAccess ? '1' : '0')}
|
|
560
|
+
${newEntityDefaults.AuditViewRuns === undefined ? '' : ', ' + (newEntityDefaults.AuditViewRuns ? '1' : '0')}
|
|
561
|
+
${newEntityDefaults.AllowAllRowsAPI === undefined ? '' : ', ' + (newEntityDefaults.AllowAllRowsAPI ? '1' : '0')}
|
|
562
|
+
${newEntityDefaults.AllowCreateAPI === undefined ? '' : ', ' + (newEntityDefaults.AllowCreateAPI ? '1' : '0')}
|
|
563
|
+
${newEntityDefaults.AllowUpdateAPI === undefined ? '' : ', ' + (newEntityDefaults.AllowUpdateAPI ? '1' : '0')}
|
|
564
|
+
${newEntityDefaults.AllowDeleteAPI === undefined ? '' : ', ' + (newEntityDefaults.AllowDeleteAPI ? '1' : '0')}
|
|
565
|
+
${newEntityDefaults.UserViewMaxRows === undefined ? '' : ', ' + (newEntityDefaults.UserViewMaxRows)}
|
|
566
|
+
)`;
|
|
567
|
+
return sSQLInsert;
|
|
568
|
+
}
|
|
569
|
+
function stripTrailingChars(s, charsToStrip, skipIfExactMatch) {
|
|
570
|
+
if (s && charsToStrip) {
|
|
571
|
+
if (s.endsWith(charsToStrip) && (skipIfExactMatch ? s !== charsToStrip : true))
|
|
572
|
+
return s.substring(0, s.length - charsToStrip.length);
|
|
573
|
+
else
|
|
574
|
+
return s;
|
|
575
|
+
}
|
|
576
|
+
else
|
|
577
|
+
return s;
|
|
578
|
+
}
|
|
579
|
+
function convertCamelCaseToHaveSpaces(s) {
|
|
580
|
+
let result = '';
|
|
581
|
+
for (let i = 0; i < s.length; ++i) {
|
|
582
|
+
if (s[i] === s[i].toUpperCase() && // current character is upper case
|
|
583
|
+
i > 0 && // not first character
|
|
584
|
+
(s[i - 1] !== s[i - 1].toUpperCase()) // previous character is not upper case handles not putting space between I and D in ID as an example of consecutive upper case
|
|
585
|
+
) {
|
|
586
|
+
result += ' ';
|
|
587
|
+
}
|
|
588
|
+
result += s[i];
|
|
589
|
+
}
|
|
590
|
+
return result;
|
|
591
|
+
}
|
|
592
|
+
function generatePluralName(singularName) {
|
|
593
|
+
if (singularName.endsWith('y')) {
|
|
594
|
+
return singularName.substring(0, singularName.length - 1) + 'ies';
|
|
595
|
+
}
|
|
596
|
+
else if (singularName.endsWith('s')) {
|
|
597
|
+
return singularName + 'es';
|
|
598
|
+
}
|
|
599
|
+
else {
|
|
600
|
+
return singularName + 's';
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
//# sourceMappingURL=manageMetadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manageMetadata.js","sourceRoot":"","sources":["../src/manageMetadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { EntityInfo } from '@memberjunction/core';
|
|
2
|
+
export declare function generateReactCode(entities: EntityInfo[], directory: string): boolean;
|
|
3
|
+
export declare function generateSingleEntityReactFile(entity: EntityInfo): string;
|
|
4
|
+
export declare function generateReactEntityPagesFile(entities: EntityInfo[]): string;
|