meadow-endpoints 3.0.7 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/Dockerfile_LUXURYCode +1 -1
  2. package/README.md +48 -14
  3. package/debug/Animal.json +62 -0
  4. package/debug/Harness-Configuration.json +31 -0
  5. package/debug/Harness.js +7 -108
  6. package/debug/KillHarness.sh +10 -0
  7. package/dist/meadowendpoints.js +4402 -0
  8. package/dist/meadowendpoints.min.js +92 -0
  9. package/dist/meadowendpoints.min.js.map +1 -0
  10. package/gulpfile.js +83 -0
  11. package/package.json +27 -15
  12. package/source/Meadow-Endpoints-Browser-Shim.js +14 -0
  13. package/source/Meadow-Endpoints.js +176 -565
  14. package/source/controller/Meadow-Endpoints-Controller-Base.js +161 -0
  15. package/source/controller/components/Meadow-Endpoints-Controller-BehaviorInjection.js +125 -0
  16. package/source/controller/components/Meadow-Endpoints-Controller-Error-StatusCodes.txt +189 -0
  17. package/source/controller/components/Meadow-Endpoints-Controller-Error.js +118 -0
  18. package/source/controller/components/Meadow-Endpoints-Controller-Log.js +103 -0
  19. package/source/controller/utility/Meadow-Endpoints-Filter-Parser.js +225 -0
  20. package/source/controller/utility/Meadow-Endpoints-Session-Marshaler.js +48 -0
  21. package/source/controller/utility/Meadow-Endpoints-Stream-RecordArray.js +66 -0
  22. package/source/endpoints/count/Meadow-Endpoint-Count.js +49 -0
  23. package/source/endpoints/count/Meadow-Endpoint-CountBy.js +40 -0
  24. package/source/endpoints/create/Meadow-Endpoint-BulkCreate.js +53 -0
  25. package/source/endpoints/create/Meadow-Endpoint-Create.js +58 -0
  26. package/source/endpoints/create/Meadow-Operation-Create.js +83 -0
  27. package/source/endpoints/delete/Meadow-Endpoint-Delete.js +93 -0
  28. package/source/endpoints/delete/Meadow-Endpoint-Undelete.js +108 -0
  29. package/source/endpoints/read/Meadow-Endpoint-Read.js +72 -0
  30. package/source/endpoints/read/Meadow-Endpoint-ReadDistinctList.js +92 -0
  31. package/source/endpoints/read/Meadow-Endpoint-ReadLiteList.js +85 -0
  32. package/source/endpoints/read/Meadow-Endpoint-ReadMax.js +55 -0
  33. package/source/endpoints/read/Meadow-Endpoint-ReadSelectList.js +89 -0
  34. package/source/endpoints/read/Meadow-Endpoint-Reads.js +75 -0
  35. package/source/endpoints/read/Meadow-Endpoint-ReadsBy.js +100 -0
  36. package/source/{crud → endpoints/read}/Meadow-Marshal-DistinctList.js +4 -13
  37. package/source/{crud → endpoints/read}/Meadow-Marshal-LiteList.js +5 -14
  38. package/source/endpoints/schema/Meadow-Endpoint-New.js +36 -0
  39. package/source/endpoints/schema/Meadow-Endpoint-Schema.js +36 -0
  40. package/source/endpoints/schema/Meadow-Endpoint-Validate.js +41 -0
  41. package/source/endpoints/update/Meadow-Endpoint-BulkUpdate.js +50 -0
  42. package/source/endpoints/update/Meadow-Endpoint-Update.js +58 -0
  43. package/source/endpoints/update/Meadow-Operation-Update.js +115 -0
  44. package/source/endpoints/upsert/Meadow-Endpoint-BulkUpsert.js +52 -0
  45. package/source/endpoints/upsert/Meadow-Endpoint-Upsert.js +57 -0
  46. package/source/endpoints/upsert/Meadow-Operation-Upsert.js +137 -0
  47. package/test/MeadowEndpoints_basic_tests.js +50 -2408
  48. package/test_support/bookstore-api-endpoint-exercises.paw +0 -0
  49. package/test_support/bookstore-configuration.json +28 -0
  50. package/test_support/bookstore-import-books-run.js +1 -0
  51. package/test_support/bookstore-import-books.js +215 -0
  52. package/test_support/bookstore-serve-meadow-endpoint-apis-IPC.js +138 -0
  53. package/test_support/bookstore-serve-meadow-endpoint-apis-run.js +6 -0
  54. package/test_support/bookstore-serve-meadow-endpoint-apis.js +129 -0
  55. package/test_support/data/books.csv +10001 -0
  56. package/test_support/model/ddl/BookStore.ddl +66 -0
  57. package/test_support/model/generated_diagram/README.md +1 -0
  58. package/test_support/model/generated_diagram/Stricture_Output.dot +13 -0
  59. package/test_support/model/generated_diagram/Stricture_Output.png +0 -0
  60. package/test_support/model/generated_documentation/Dictionary.md +18 -0
  61. package/test_support/model/generated_documentation/Model-Author.md +20 -0
  62. package/test_support/model/generated_documentation/Model-Book.md +26 -0
  63. package/test_support/model/generated_documentation/Model-BookAuthorJoin.md +14 -0
  64. package/test_support/model/generated_documentation/Model-BookPrice.md +25 -0
  65. package/test_support/model/generated_documentation/Model-Review.md +22 -0
  66. package/test_support/model/generated_documentation/ModelChangeTracking.md +17 -0
  67. package/test_support/model/generated_documentation/README.md +1 -0
  68. package/test_support/model/manual_scripts/DropTables.sql +5 -0
  69. package/test_support/model/manual_scripts/README.md +2 -0
  70. package/test_support/model/sql_create/BookStore-CreateDatabase.mysql.sql +116 -0
  71. package/test_support/model/sql_create/README.md +1 -0
  72. package/test_support/test_old/Tests.js +3243 -0
  73. package/test_support/test_old/untitled.js +88 -0
  74. package/source/Meadow-Authenticator.js +0 -31
  75. package/source/Meadow-Authorizers.js +0 -214
  76. package/source/Meadow-BehaviorModifications.js +0 -170
  77. package/source/Meadow-CommonServices.js +0 -206
  78. package/source/Meadow-MarshallSessionData.js +0 -64
  79. package/source/Restify-RouteParser.js +0 -114
  80. package/source/authorizers/Meadow-Authorizer-Allow.js +0 -17
  81. package/source/authorizers/Meadow-Authorizer-Deny.js +0 -17
  82. package/source/authorizers/Meadow-Authorizer-Mine.js +0 -47
  83. package/source/authorizers/Meadow-Authorizer-MyCustomer.js +0 -48
  84. package/source/crud/Meadow-Endpoint-BulkCreate.js +0 -67
  85. package/source/crud/Meadow-Endpoint-BulkUpdate.js +0 -74
  86. package/source/crud/Meadow-Endpoint-BulkUpsert.js +0 -76
  87. package/source/crud/Meadow-Endpoint-Count.js +0 -93
  88. package/source/crud/Meadow-Endpoint-CountBy.js +0 -101
  89. package/source/crud/Meadow-Endpoint-Create.js +0 -77
  90. package/source/crud/Meadow-Endpoint-Delete.js +0 -139
  91. package/source/crud/Meadow-Endpoint-Read.js +0 -109
  92. package/source/crud/Meadow-Endpoint-ReadDistinctList.js +0 -146
  93. package/source/crud/Meadow-Endpoint-ReadLiteList.js +0 -139
  94. package/source/crud/Meadow-Endpoint-ReadMax.js +0 -86
  95. package/source/crud/Meadow-Endpoint-ReadSelectList.js +0 -145
  96. package/source/crud/Meadow-Endpoint-Reads.js +0 -129
  97. package/source/crud/Meadow-Endpoint-ReadsBy.js +0 -155
  98. package/source/crud/Meadow-Endpoint-Undelete.js +0 -161
  99. package/source/crud/Meadow-Endpoint-Update.js +0 -80
  100. package/source/crud/Meadow-Endpoint-Upsert.js +0 -78
  101. package/source/crud/Meadow-Operation-Create.js +0 -105
  102. package/source/crud/Meadow-Operation-Update.js +0 -145
  103. package/source/crud/Meadow-Operation-Upsert.js +0 -106
  104. package/source/crud/Meadow-StreamRecordArray.js +0 -45
  105. package/source/schema/Meadow-Endpoint-New.js +0 -37
  106. package/source/schema/Meadow-Endpoint-Schema.js +0 -37
  107. package/source/schema/Meadow-Endpoint-Validate.js +0 -43
  108. package/test/Animal.json +0 -140
  109. package/test/MeadowEndpoints_disabledAuth_tests.js +0 -1325
  110. package/test/MeadowEndpoints_trustedSession_tests.js +0 -1731
  111. package/test/load/artillery-low.yml +0 -10
  112. package/test/load/cloud9setup.sh +0 -25
  113. package/test/load/package.json +0 -19
  114. package/test/load/test-schema-initializedatabase.sql +0 -29
  115. package/test/load/test-schema.json +0 -119
  116. package/test/load/test-server.js +0 -157
  117. package/test/scripts/InitializeDatabase-C9.sql +0 -7
  118. /package/{test/schemas → test_support/model}/json_schema/BookStore-Extended.json +0 -0
  119. /package/{test/schemas → test_support/model}/json_schema/BookStore-PICT.json +0 -0
  120. /package/{test/schemas → test_support/model}/json_schema/BookStore.json +0 -0
  121. /package/{test/schemas → test_support/model}/json_schema/README.md +0 -0
  122. /package/{test/schemas → test_support/model}/meadow_schema/BookStore-MeadowSchema-Author.json +0 -0
  123. /package/{test/schemas → test_support/model}/meadow_schema/BookStore-MeadowSchema-Book.json +0 -0
  124. /package/{test/schemas → test_support/model}/meadow_schema/BookStore-MeadowSchema-BookAuthorJoin.json +0 -0
  125. /package/{test/schemas → test_support/model}/meadow_schema/BookStore-MeadowSchema-BookPrice.json +0 -0
  126. /package/{test/schemas → test_support/model}/meadow_schema/BookStore-MeadowSchema-Review.json +0 -0
  127. /package/{test/schemas → test_support/model}/meadow_schema/README.md +0 -0
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Meadow Operation - Upsert a record
3
+ */
4
+ const doCreate = require('../create/Meadow-Operation-Create.js');
5
+ const doUpdate = require('../update/Meadow-Operation-Update.js');
6
+
7
+ const doUpsert = function(pRecordToUpsert, pRequest, pRequestState, pResponse, fCallback)
8
+ {
9
+ let tmpRequestState = this.cloneAsyncSafeRequestState(pRequestState, 'Upsert');
10
+ let fBehaviorInjector = (pBehaviorHash) => { return (fStageComplete) => { this.BehaviorInjection.runBehavior(pBehaviorHash, this, pRequest, tmpRequestState, fStageComplete); }; };
11
+
12
+ this.waterfall(
13
+ [
14
+ (fStageComplete) =>
15
+ {
16
+ tmpRequestState.Query = this.DAL.query;
17
+
18
+ // Prepare to gather requirements for upserting
19
+ tmpRequestState.Record = pRecordToUpsert;
20
+
21
+ // This operation will be create only if there is no GUID or ID in the record bundle
22
+ tmpRequestState.UpsertCreateOnly = true;
23
+
24
+ // See if there is a default identifier or default GUIdentifier
25
+ if ((typeof(tmpRequestState.Record[this.DAL.defaultGUIdentifier]) !== 'undefined') && tmpRequestState.Record[this.DAL.defaultGUIdentifier].length > 0)
26
+ {
27
+ tmpRequestState.Query.addFilter(this.DAL.defaultGUIdentifier, tmpRequestState.Record[this.DAL.defaultGUIdentifier]);
28
+ tmpRequestState.UpsertCreateOnly = false;
29
+ }
30
+ if ((typeof(tmpRequestState.Record[this.DAL.defaultIdentifier]) !== 'undefined') && (tmpRequestState.Record[this.DAL.defaultIdentifier] > 0))
31
+ {
32
+ tmpRequestState.Query.addFilter(this.DAL.defaultIdentifier, tmpRequestState.Record[this.DAL.defaultIdentifier]);
33
+ tmpRequestState.UpsertCreateOnly = false;
34
+ }
35
+
36
+ return fStageComplete();
37
+ },
38
+ (fStageComplete) =>
39
+ {
40
+ if (tmpRequestState.UpsertCreateOnly)
41
+ {
42
+ tmpRequestState.Operation = 'Create';
43
+ doCreate.call(this, tmpRequestState.Record, pRequest, tmpRequestState, pResponse, fStageComplete);
44
+ }
45
+ else
46
+ {
47
+ this.DAL.doRead(tmpRequestState.Query,
48
+ (pError, pQuery, pRecord) =>
49
+ {
50
+ if (pError)
51
+ {
52
+ if (typeof(pError) == 'string')
53
+ {
54
+ return fStageComplete(this.ErrorHandler.getError(pError, 500));
55
+ }
56
+ else
57
+ {
58
+ return fStageComplete(pError);
59
+ }
60
+ }
61
+ else if (!pRecord)
62
+ {
63
+ // Record not found -- do a create.
64
+ tmpRequestState.Operation = 'Create';
65
+ doCreate.call(this, tmpRequestState.Record, pRequest, tmpRequestState, pResponse, fStageComplete);
66
+ }
67
+ else
68
+ {
69
+ // Set the default ID in the passed-in record if it doesn't exist..
70
+ if (!tmpRequestState.Record.hasOwnProperty(this.DAL.defaultIdentifier))
71
+ {
72
+ tmpRequestState.Record[this.DAL.defaultIdentifier] = pRecord[this.DAL.defaultIdentifier];
73
+ }
74
+ // If the found record does not match the passed ID --- what the heck?!
75
+ if (tmpRequestState.Record[this.DAL.defaultIdentifier] != pRecord[this.DAL.defaultIdentifier])
76
+ {
77
+ return fStageComplete(this.ErrorHandler.getError('Record IDs do not match', 500));
78
+ }
79
+ // Record found -- do an update. Use the cached record, though.
80
+ tmpRequestState.Operation = 'Update';
81
+ doUpdate.call(this, tmpRequestState.Record, pRequest, tmpRequestState, pResponse, fStageComplete, pRecord);
82
+ }
83
+ });
84
+ }
85
+ },
86
+ (fStageComplete) =>
87
+ {
88
+ // Now stuff the record into the upserted array
89
+ if (tmpRequestState.Operation == 'Update')
90
+ {
91
+ if (tmpRequestState.RecordUpdateError)
92
+ {
93
+ return fStageComplete(tmpRequestState.RecordUpdateErrorObject);
94
+ }
95
+ if (tmpRequestState.UpdatedRecords.length < 1)
96
+ {
97
+ return fStageComplete(this.ErrorHandler.getError('Unknown record update failure - no updated records returned.', 500));
98
+ }
99
+
100
+ tmpRequestState.Record = tmpRequestState.UpdatedRecords[0];
101
+ }
102
+ else if (tmpRequestState.Operation == 'Create')
103
+ {
104
+ if (tmpRequestState.RecordCreateError)
105
+ {
106
+ return fStageComplete(tmpRequestState.RecordCreateErrorObject);
107
+ }
108
+ if (tmpRequestState.CreatedRecords.length < 1)
109
+ {
110
+ return fStageComplete(this.ErrorHandler.getError('Unknown record create failure - no created records returned.', 500));
111
+ }
112
+
113
+ tmpRequestState.Record = tmpRequestState.CreatedRecords[0];
114
+ }
115
+ else
116
+ {
117
+ return fStageComplete(this.ErrorHandler.getError('Unkknown record upsert failure = no records returned from doUpsert.', 500));
118
+ }
119
+ tmpRequestState.ParentRequestState.UpsertedRecords.push(tmpRequestState.Record);
120
+ return fStageComplete();
121
+ }
122
+ ], (pError) =>
123
+ {
124
+ if (pError)
125
+ {
126
+ pRecordToUpsert.Error = 'Error upserting record:'+pError;
127
+ tmpRequestState.RecordUpsertError = true;
128
+ tmpRequestState.RecordUpsertErrorMessage = pError;
129
+ pRequest.UpsertedRecords.push(pRecordToUpsert);
130
+ pRequest.CommonServices.log.error('Error upserting record:'+pError, {SessionID:pRequest.UserSession.SessionID, RequestID:pRequest.RequestUUID, RequestURL:pRequest.url, Action:this.DAL.scope+'-'+pRequest.MeadowOperation, Stack: pError.stack }, pRequest);
131
+ }
132
+
133
+ return fCallback();
134
+ });
135
+ };
136
+
137
+ module.exports = doUpsert;