@webiny/api-headless-cms-sql 0.0.0-unstable.9f53ea597d → 6.6.0-alpha.0
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/features/entryTableManager/EntryTableManager.d.ts +2 -0
- package/features/entryTableManager/EntryTableManager.js +39 -26
- package/features/entryTableManager/EntryTableManager.js.map +1 -1
- package/features/modelSchemaManager/ModelSchemaManager.js +0 -1
- package/features/modelSchemaManager/ModelSchemaManager.js.map +1 -1
- package/index.d.ts +4 -1
- package/index.js +24 -71
- package/index.js.map +1 -1
- package/operations/entry/SqlCreateEntry.d.ts +15 -0
- package/operations/entry/SqlCreateEntry.js +35 -0
- package/operations/entry/SqlCreateEntry.js.map +1 -0
- package/operations/entry/SqlCreateEntryRevisionFrom.d.ts +15 -0
- package/operations/entry/SqlCreateEntryRevisionFrom.js +55 -0
- package/operations/entry/SqlCreateEntryRevisionFrom.js.map +1 -0
- package/operations/entry/SqlDeleteEntry.d.ts +15 -0
- package/operations/entry/SqlDeleteEntry.js +29 -0
- package/operations/entry/SqlDeleteEntry.js.map +1 -0
- package/operations/entry/SqlDeleteEntryRevision.d.ts +15 -0
- package/operations/entry/SqlDeleteEntryRevision.js +39 -0
- package/operations/entry/SqlDeleteEntryRevision.js.map +1 -0
- package/operations/entry/SqlDeleteMultipleEntries.d.ts +15 -0
- package/operations/entry/SqlDeleteMultipleEntries.js +29 -0
- package/operations/entry/SqlDeleteMultipleEntries.js.map +1 -0
- package/operations/entry/SqlGetEntriesByIds.d.ts +15 -0
- package/operations/entry/SqlGetEntriesByIds.js +35 -0
- package/operations/entry/SqlGetEntriesByIds.js.map +1 -0
- package/operations/entry/SqlGetEntry.d.ts +25 -0
- package/operations/entry/SqlGetEntry.js +56 -0
- package/operations/entry/SqlGetEntry.js.map +1 -0
- package/operations/entry/SqlGetLatestEntriesByIds.d.ts +15 -0
- package/operations/entry/SqlGetLatestEntriesByIds.js +37 -0
- package/operations/entry/SqlGetLatestEntriesByIds.js.map +1 -0
- package/operations/entry/SqlGetLatestRevisionByEntryId.d.ts +15 -0
- package/operations/entry/SqlGetLatestRevisionByEntryId.js +32 -0
- package/operations/entry/SqlGetLatestRevisionByEntryId.js.map +1 -0
- package/operations/entry/SqlGetPreviousRevision.d.ts +15 -0
- package/operations/entry/SqlGetPreviousRevision.js +30 -0
- package/operations/entry/SqlGetPreviousRevision.js.map +1 -0
- package/operations/entry/SqlGetPublishedEntriesByIds.d.ts +15 -0
- package/operations/entry/SqlGetPublishedEntriesByIds.js +37 -0
- package/operations/entry/SqlGetPublishedEntriesByIds.js.map +1 -0
- package/operations/entry/SqlGetPublishedRevisionByEntryId.d.ts +15 -0
- package/operations/entry/SqlGetPublishedRevisionByEntryId.js +32 -0
- package/operations/entry/SqlGetPublishedRevisionByEntryId.js.map +1 -0
- package/operations/entry/SqlGetRevisionById.d.ts +15 -0
- package/operations/entry/SqlGetRevisionById.js +30 -0
- package/operations/entry/SqlGetRevisionById.js.map +1 -0
- package/operations/entry/SqlGetRevisions.d.ts +15 -0
- package/operations/entry/SqlGetRevisions.js +31 -0
- package/operations/entry/SqlGetRevisions.js.map +1 -0
- package/operations/entry/SqlGetUniqueFieldValues.d.ts +25 -0
- package/operations/entry/SqlGetUniqueFieldValues.js +58 -0
- package/operations/entry/SqlGetUniqueFieldValues.js.map +1 -0
- package/operations/entry/SqlListEntries.d.ts +25 -0
- package/operations/entry/SqlListEntries.js +52 -0
- package/operations/entry/SqlListEntries.js.map +1 -0
- package/operations/entry/SqlMoveEntry.d.ts +14 -0
- package/operations/entry/SqlMoveEntry.js +30 -0
- package/operations/entry/SqlMoveEntry.js.map +1 -0
- package/operations/entry/SqlMoveToBin.d.ts +14 -0
- package/operations/entry/SqlMoveToBin.js +35 -0
- package/operations/entry/SqlMoveToBin.js.map +1 -0
- package/operations/entry/SqlPublishEntry.d.ts +15 -0
- package/operations/entry/SqlPublishEntry.js +51 -0
- package/operations/entry/SqlPublishEntry.js.map +1 -0
- package/operations/entry/SqlRestoreFromBin.d.ts +14 -0
- package/operations/entry/SqlRestoreFromBin.js +36 -0
- package/operations/entry/SqlRestoreFromBin.js.map +1 -0
- package/operations/entry/SqlUnpublishEntry.d.ts +15 -0
- package/operations/entry/SqlUnpublishEntry.js +38 -0
- package/operations/entry/SqlUnpublishEntry.js.map +1 -0
- package/operations/entry/SqlUpdateEntry.d.ts +15 -0
- package/operations/entry/SqlUpdateEntry.js +36 -0
- package/operations/entry/SqlUpdateEntry.js.map +1 -0
- package/operations/entry/feature.d.ts +4 -0
- package/operations/entry/feature.js +53 -0
- package/operations/entry/feature.js.map +1 -0
- package/operations/entry/queryHelpers.d.ts +23 -0
- package/operations/entry/queryHelpers.js +105 -0
- package/operations/entry/queryHelpers.js.map +1 -0
- package/operations/group/SqlCreateGroup.d.ts +16 -0
- package/operations/group/SqlCreateGroup.js +28 -0
- package/operations/group/SqlCreateGroup.js.map +1 -0
- package/operations/group/SqlDeleteGroup.d.ts +16 -0
- package/operations/group/SqlDeleteGroup.js +26 -0
- package/operations/group/SqlDeleteGroup.js.map +1 -0
- package/operations/group/SqlGetGroup.d.ts +16 -0
- package/operations/group/SqlGetGroup.js +29 -0
- package/operations/group/SqlGetGroup.js.map +1 -0
- package/operations/group/SqlListGroups.d.ts +16 -0
- package/operations/group/SqlListGroups.js +43 -0
- package/operations/group/SqlListGroups.js.map +1 -0
- package/operations/group/SqlUpdateGroup.d.ts +16 -0
- package/operations/group/SqlUpdateGroup.js +28 -0
- package/operations/group/SqlUpdateGroup.js.map +1 -0
- package/operations/group/feature.d.ts +4 -0
- package/operations/group/feature.js +19 -0
- package/operations/group/feature.js.map +1 -0
- package/operations/model/SqlCreateModel.d.ts +16 -0
- package/operations/model/SqlCreateModel.js +30 -0
- package/operations/model/SqlCreateModel.js.map +1 -0
- package/operations/model/SqlDeleteModel.d.ts +16 -0
- package/operations/model/SqlDeleteModel.js +26 -0
- package/operations/model/SqlDeleteModel.js.map +1 -0
- package/operations/model/SqlGetModel.d.ts +16 -0
- package/operations/model/SqlGetModel.js +29 -0
- package/operations/model/SqlGetModel.js.map +1 -0
- package/operations/model/SqlListModels.d.ts +16 -0
- package/operations/model/SqlListModels.js +31 -0
- package/operations/model/SqlListModels.js.map +1 -0
- package/operations/model/SqlUpdateModel.d.ts +16 -0
- package/operations/model/SqlUpdateModel.js +30 -0
- package/operations/model/SqlUpdateModel.js.map +1 -0
- package/operations/model/feature.d.ts +4 -0
- package/operations/model/feature.js +19 -0
- package/operations/model/feature.js.map +1 -0
- package/operations/model/mappers.js +2 -4
- package/operations/model/mappers.js.map +1 -1
- package/operations/model/types.d.ts +0 -1
- package/operations/model/types.js +1 -2
- package/operations/model/types.js.map +1 -1
- package/package.json +14 -11
- package/operations/entry/index.d.ts +0 -13
- package/operations/entry/index.js +0 -362
- package/operations/entry/index.js.map +0 -1
- package/operations/group/index.d.ts +0 -5
- package/operations/group/index.js +0 -58
- package/operations/group/index.js.map +0 -1
- package/operations/model/index.d.ts +0 -5
- package/operations/model/index.js +0 -50
- package/operations/model/index.js.map +0 -1
- package/types.d.ts +0 -10
- package/types.js +0 -0
|
@@ -1,362 +0,0 @@
|
|
|
1
|
-
import { entryToRow, mergeEntryLevelMeta, rowToEntry } from "./mappers.js";
|
|
2
|
-
import { StorageTransformRegistry } from "@webiny/api-headless-cms/exports/api/cms/storage.js";
|
|
3
|
-
import { decodeCursor, encodeCursor } from "@webiny/utils";
|
|
4
|
-
import { ValueFilterRegistry } from "@webiny/db-utils";
|
|
5
|
-
import { aggregateUniqueFieldValues, createFields, createStorageModelAccessor, createStorageTransformCallable, filter, sort } from "@webiny/api-headless-cms-storage";
|
|
6
|
-
const MAX_LIST_LIMIT = 1000000;
|
|
7
|
-
const extractEntryId = (id)=>{
|
|
8
|
-
const hashIdx = id.indexOf("#");
|
|
9
|
-
if (-1 === hashIdx) return id;
|
|
10
|
-
return id.slice(0, hashIdx);
|
|
11
|
-
};
|
|
12
|
-
const createEntriesStorageOperations = (params)=>{
|
|
13
|
-
const { knex, entryTableManager, container, plugins } = params;
|
|
14
|
-
const storageTransformRegistry = container.resolve(StorageTransformRegistry);
|
|
15
|
-
const { getModel: getStorageOperationsModel } = createStorageModelAccessor(plugins);
|
|
16
|
-
const query = ()=>knex.client(entryTableManager.getTableName());
|
|
17
|
-
const syncToLatest = async (entry, extraPatch)=>{
|
|
18
|
-
if (entry.isLatest) return;
|
|
19
|
-
const latestRow = await query().where("entryId", entry.entryId).andWhere("isLatest", true).first();
|
|
20
|
-
if (!latestRow) return;
|
|
21
|
-
const latest = JSON.parse(latestRow.data);
|
|
22
|
-
const merged = mergeEntryLevelMeta(entry, latest);
|
|
23
|
-
if (extraPatch) extraPatch(merged);
|
|
24
|
-
await query().where("id", latestRow.id).update({
|
|
25
|
-
data: JSON.stringify(merged)
|
|
26
|
-
});
|
|
27
|
-
};
|
|
28
|
-
const patchAllRevisions = async (entryId, tenant, patch, columnUpdates)=>{
|
|
29
|
-
const rows = await query().where("tenant", tenant).where("entryId", entryId);
|
|
30
|
-
if (0 === rows.length) return;
|
|
31
|
-
const cases = rows.map((row)=>{
|
|
32
|
-
const parsed = JSON.parse(row.data);
|
|
33
|
-
patch(parsed);
|
|
34
|
-
return {
|
|
35
|
-
id: row.id,
|
|
36
|
-
data: JSON.stringify(parsed)
|
|
37
|
-
};
|
|
38
|
-
});
|
|
39
|
-
const update = {
|
|
40
|
-
data: knex.client.raw(`CASE id ${cases.map(()=>"WHEN ? THEN ?").join(" ")} END`, cases.flatMap((c)=>[
|
|
41
|
-
c.id,
|
|
42
|
-
c.data
|
|
43
|
-
])),
|
|
44
|
-
...columnUpdates
|
|
45
|
-
};
|
|
46
|
-
await query().where("tenant", tenant).where("entryId", entryId).update(update);
|
|
47
|
-
};
|
|
48
|
-
const listEntries = async (initialModel, params)=>{
|
|
49
|
-
await entryTableManager.ensureTable();
|
|
50
|
-
const model = getStorageOperationsModel(initialModel);
|
|
51
|
-
const { where: initialWhere, sort: sortBy, search, fields: searchFields, limit: initialLimit, after } = params;
|
|
52
|
-
const limit = initialLimit <= 0 || initialLimit >= MAX_LIST_LIMIT ? MAX_LIST_LIMIT : initialLimit;
|
|
53
|
-
const qb = query().where("tenant", model.tenant).andWhere("modelId", model.modelId);
|
|
54
|
-
if (initialWhere.entryId) qb.andWhere("entryId", initialWhere.entryId);
|
|
55
|
-
else if (true === initialWhere.published) qb.andWhere("isPublished", true);
|
|
56
|
-
else qb.andWhere("isLatest", true);
|
|
57
|
-
if (void 0 !== initialWhere.wbyDeleted) qb.andWhere("wbyDeleted", initialWhere.wbyDeleted);
|
|
58
|
-
else qb.andWhere("wbyDeleted", false);
|
|
59
|
-
const rows = await qb;
|
|
60
|
-
if (0 === rows.length) return {
|
|
61
|
-
hasMoreItems: false,
|
|
62
|
-
totalCount: 0,
|
|
63
|
-
cursor: null,
|
|
64
|
-
items: []
|
|
65
|
-
};
|
|
66
|
-
const fromStorage = createStorageTransformCallable(storageTransformRegistry, model);
|
|
67
|
-
const records = await Promise.all(rows.map(async (row)=>{
|
|
68
|
-
const entry = rowToEntry(row);
|
|
69
|
-
for (const field of model.fields)entry.values[field.fieldId] = await fromStorage(field, entry.values[field.fieldId]);
|
|
70
|
-
return entry;
|
|
71
|
-
}));
|
|
72
|
-
const where = {
|
|
73
|
-
...initialWhere
|
|
74
|
-
};
|
|
75
|
-
delete where["published"];
|
|
76
|
-
delete where["latest"];
|
|
77
|
-
delete where["entryId"];
|
|
78
|
-
delete where["wbyDeleted"];
|
|
79
|
-
const modelFields = createFields({
|
|
80
|
-
plugins,
|
|
81
|
-
fields: model.fields
|
|
82
|
-
});
|
|
83
|
-
const valueFilterRegistry = container.resolve(ValueFilterRegistry);
|
|
84
|
-
const filteredItems = filter({
|
|
85
|
-
items: records,
|
|
86
|
-
where,
|
|
87
|
-
plugins,
|
|
88
|
-
fields: modelFields,
|
|
89
|
-
fullTextSearch: {
|
|
90
|
-
term: search,
|
|
91
|
-
fields: searchFields || []
|
|
92
|
-
},
|
|
93
|
-
valueFilterRegistry
|
|
94
|
-
});
|
|
95
|
-
const totalCount = filteredItems.length;
|
|
96
|
-
const sortedItems = sort({
|
|
97
|
-
model,
|
|
98
|
-
plugins,
|
|
99
|
-
items: filteredItems,
|
|
100
|
-
sort: sortBy,
|
|
101
|
-
fields: modelFields
|
|
102
|
-
});
|
|
103
|
-
const start = parseInt(decodeCursor(after) || "0") || 0;
|
|
104
|
-
const hasMoreItems = totalCount > start + limit;
|
|
105
|
-
const slicedItems = sortedItems.slice(start, start + limit);
|
|
106
|
-
const cursor = encodeCursor(`${start + limit}`);
|
|
107
|
-
return {
|
|
108
|
-
hasMoreItems,
|
|
109
|
-
totalCount,
|
|
110
|
-
cursor,
|
|
111
|
-
items: slicedItems
|
|
112
|
-
};
|
|
113
|
-
};
|
|
114
|
-
return {
|
|
115
|
-
getByIds: async (model, { ids })=>{
|
|
116
|
-
await entryTableManager.ensureTable();
|
|
117
|
-
const idList = ids;
|
|
118
|
-
const rows = await query().where("tenant", model.tenant).andWhere("modelId", model.modelId).whereIn("id", idList);
|
|
119
|
-
const entries = rows.map((row)=>rowToEntry(row));
|
|
120
|
-
const byId = new Map(entries.map((e)=>[
|
|
121
|
-
e.id,
|
|
122
|
-
e
|
|
123
|
-
]));
|
|
124
|
-
return idList.map((id)=>byId.get(id)).filter(Boolean);
|
|
125
|
-
},
|
|
126
|
-
getPublishedByIds: async (model, { ids })=>{
|
|
127
|
-
await entryTableManager.ensureTable();
|
|
128
|
-
const idList = ids;
|
|
129
|
-
const entryIds = idList.map(extractEntryId);
|
|
130
|
-
const rows = await query().where("tenant", model.tenant).andWhere("modelId", model.modelId).whereIn("entryId", entryIds).andWhere("isPublished", true);
|
|
131
|
-
const entries = rows.map((row)=>rowToEntry(row));
|
|
132
|
-
const byEntryId = new Map(entries.map((e)=>[
|
|
133
|
-
e.entryId,
|
|
134
|
-
e
|
|
135
|
-
]));
|
|
136
|
-
return entryIds.map((eid)=>byEntryId.get(eid)).filter(Boolean);
|
|
137
|
-
},
|
|
138
|
-
getLatestByIds: async (model, { ids })=>{
|
|
139
|
-
await entryTableManager.ensureTable();
|
|
140
|
-
const idList = ids;
|
|
141
|
-
const entryIds = idList.map(extractEntryId);
|
|
142
|
-
const rows = await query().where("tenant", model.tenant).andWhere("modelId", model.modelId).whereIn("entryId", entryIds).andWhere("isLatest", true);
|
|
143
|
-
const entries = rows.map((row)=>rowToEntry(row));
|
|
144
|
-
const byEntryId = new Map(entries.map((e)=>[
|
|
145
|
-
e.entryId,
|
|
146
|
-
e
|
|
147
|
-
]));
|
|
148
|
-
return entryIds.map((eid)=>byEntryId.get(eid)).filter(Boolean);
|
|
149
|
-
},
|
|
150
|
-
getRevisions: async (model, { id })=>{
|
|
151
|
-
await entryTableManager.ensureTable();
|
|
152
|
-
const entryId = extractEntryId(id);
|
|
153
|
-
const rows = await query().where("tenant", model.tenant).andWhere("modelId", model.modelId).where("entryId", entryId).orderBy("version", "desc");
|
|
154
|
-
return rows.map((row)=>rowToEntry(row));
|
|
155
|
-
},
|
|
156
|
-
getRevisionById: async (model, { id })=>{
|
|
157
|
-
await entryTableManager.ensureTable();
|
|
158
|
-
const row = await query().where("tenant", model.tenant).andWhere("modelId", model.modelId).where("id", id).first();
|
|
159
|
-
if (!row) return null;
|
|
160
|
-
return rowToEntry(row);
|
|
161
|
-
},
|
|
162
|
-
getPublishedRevisionByEntryId: async (model, { id })=>{
|
|
163
|
-
await entryTableManager.ensureTable();
|
|
164
|
-
const entryId = extractEntryId(id);
|
|
165
|
-
const row = await query().where("tenant", model.tenant).andWhere("modelId", model.modelId).where("entryId", entryId).andWhere("isPublished", true).first();
|
|
166
|
-
if (!row) return null;
|
|
167
|
-
return rowToEntry(row);
|
|
168
|
-
},
|
|
169
|
-
getLatestRevisionByEntryId: async (model, { id })=>{
|
|
170
|
-
await entryTableManager.ensureTable();
|
|
171
|
-
const entryId = extractEntryId(id);
|
|
172
|
-
const row = await query().where("tenant", model.tenant).andWhere("modelId", model.modelId).where("entryId", entryId).andWhere("isLatest", true).first();
|
|
173
|
-
if (!row) return null;
|
|
174
|
-
return rowToEntry(row);
|
|
175
|
-
},
|
|
176
|
-
getPreviousRevision: async (model, { entryId, version })=>{
|
|
177
|
-
await entryTableManager.ensureTable();
|
|
178
|
-
const row = await query().where("tenant", model.tenant).andWhere("modelId", model.modelId).where("entryId", entryId).andWhere("version", "<", version).orderBy("version", "desc").first();
|
|
179
|
-
if (!row) return null;
|
|
180
|
-
return rowToEntry(row);
|
|
181
|
-
},
|
|
182
|
-
get: async (model, params)=>{
|
|
183
|
-
const { items } = await listEntries(model, {
|
|
184
|
-
...params,
|
|
185
|
-
limit: 1
|
|
186
|
-
});
|
|
187
|
-
return items.shift() || null;
|
|
188
|
-
},
|
|
189
|
-
list: async (model, params)=>listEntries(model, params),
|
|
190
|
-
create: async (model, { entry, storageEntry })=>{
|
|
191
|
-
await entryTableManager.ensureTable();
|
|
192
|
-
const se = storageEntry;
|
|
193
|
-
se.isLatest = true;
|
|
194
|
-
se.isPublished = "published" === se.status;
|
|
195
|
-
const row = entryToRow(se);
|
|
196
|
-
await query().insert(row);
|
|
197
|
-
return entry;
|
|
198
|
-
},
|
|
199
|
-
createRevisionFrom: async (model, { entry, storageEntry })=>{
|
|
200
|
-
await entryTableManager.ensureTable();
|
|
201
|
-
const isPublished = "published" === entry.status;
|
|
202
|
-
const oldLatestRows = await query().where("tenant", model.tenant).andWhere("entryId", entry.entryId).andWhere("isLatest", true);
|
|
203
|
-
for (const row of oldLatestRows){
|
|
204
|
-
const parsed = JSON.parse(row.data);
|
|
205
|
-
parsed.isLatest = false;
|
|
206
|
-
await query().where("id", row.id).update({
|
|
207
|
-
isLatest: false,
|
|
208
|
-
data: JSON.stringify(parsed)
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
if (isPublished) {
|
|
212
|
-
const oldPublishedRows = await query().where("tenant", model.tenant).andWhere("entryId", entry.entryId).andWhere("isPublished", true);
|
|
213
|
-
for (const row of oldPublishedRows){
|
|
214
|
-
const parsed = JSON.parse(row.data);
|
|
215
|
-
parsed.isPublished = false;
|
|
216
|
-
parsed.status = "unpublished";
|
|
217
|
-
await query().where("id", row.id).update({
|
|
218
|
-
isPublished: false,
|
|
219
|
-
data: JSON.stringify(parsed)
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
const se = storageEntry;
|
|
224
|
-
se.isLatest = true;
|
|
225
|
-
se.isPublished = isPublished;
|
|
226
|
-
const row = entryToRow(se);
|
|
227
|
-
await query().insert(row);
|
|
228
|
-
return entry;
|
|
229
|
-
},
|
|
230
|
-
update: async (model, { entry, storageEntry })=>{
|
|
231
|
-
await entryTableManager.ensureTable();
|
|
232
|
-
const existing = await query().where("id", storageEntry.id).first();
|
|
233
|
-
const se = storageEntry;
|
|
234
|
-
se.isLatest = existing?.isLatest ?? se.isLatest;
|
|
235
|
-
se.isPublished = existing?.isPublished ?? se.isPublished;
|
|
236
|
-
const row = entryToRow(se);
|
|
237
|
-
const { isLatest: _il, isPublished: _ip, ...rowWithoutFlags } = row;
|
|
238
|
-
await query().where("tenant", model.tenant).andWhere("id", storageEntry.id).update(rowWithoutFlags);
|
|
239
|
-
await syncToLatest(se);
|
|
240
|
-
return entry;
|
|
241
|
-
},
|
|
242
|
-
publish: async (model, { entry, storageEntry })=>{
|
|
243
|
-
await entryTableManager.ensureTable();
|
|
244
|
-
const oldPublishedRows = await query().where("tenant", model.tenant).andWhere("entryId", entry.entryId).andWhere("isPublished", true);
|
|
245
|
-
for (const row of oldPublishedRows){
|
|
246
|
-
const parsed = JSON.parse(row.data);
|
|
247
|
-
parsed.isPublished = false;
|
|
248
|
-
parsed.status = "unpublished";
|
|
249
|
-
await query().where("id", row.id).update({
|
|
250
|
-
isPublished: false,
|
|
251
|
-
data: JSON.stringify(parsed)
|
|
252
|
-
});
|
|
253
|
-
}
|
|
254
|
-
const existing = await query().where("id", storageEntry.id).first();
|
|
255
|
-
const se = storageEntry;
|
|
256
|
-
se.isLatest = existing?.isLatest ?? se.isLatest;
|
|
257
|
-
se.isPublished = true;
|
|
258
|
-
const row = entryToRow(se);
|
|
259
|
-
const { isLatest: _il, ...rowWithoutIsLatest } = row;
|
|
260
|
-
await query().where("tenant", model.tenant).andWhere("id", storageEntry.id).update(rowWithoutIsLatest);
|
|
261
|
-
const liveValue = {
|
|
262
|
-
version: entry.version
|
|
263
|
-
};
|
|
264
|
-
await syncToLatest(se, (latest)=>{
|
|
265
|
-
latest.live = liveValue;
|
|
266
|
-
});
|
|
267
|
-
return entry;
|
|
268
|
-
},
|
|
269
|
-
unpublish: async (model, { entry, storageEntry })=>{
|
|
270
|
-
await entryTableManager.ensureTable();
|
|
271
|
-
const existing = await query().where("id", storageEntry.id).first();
|
|
272
|
-
const se = storageEntry;
|
|
273
|
-
se.isLatest = existing?.isLatest ?? se.isLatest;
|
|
274
|
-
se.isPublished = false;
|
|
275
|
-
const row = entryToRow(se);
|
|
276
|
-
const { isLatest: _il, ...rowWithoutIsLatest } = row;
|
|
277
|
-
await query().where("tenant", model.tenant).andWhere("id", storageEntry.id).update(rowWithoutIsLatest);
|
|
278
|
-
await syncToLatest(se, (latest)=>{
|
|
279
|
-
latest.live = null;
|
|
280
|
-
});
|
|
281
|
-
return entry;
|
|
282
|
-
},
|
|
283
|
-
move: async (model, id, folderId)=>{
|
|
284
|
-
await entryTableManager.ensureTable();
|
|
285
|
-
const entryId = extractEntryId(id);
|
|
286
|
-
await patchAllRevisions(entryId, model.tenant, (parsed)=>{
|
|
287
|
-
parsed.location = {
|
|
288
|
-
folderId
|
|
289
|
-
};
|
|
290
|
-
});
|
|
291
|
-
},
|
|
292
|
-
moveToBin: async (model, { entry, storageEntry })=>{
|
|
293
|
-
await entryTableManager.ensureTable();
|
|
294
|
-
await patchAllRevisions(entry.entryId, model.tenant, (parsed)=>{
|
|
295
|
-
const p = parsed;
|
|
296
|
-
p["wbyDeleted"] = true;
|
|
297
|
-
p["binOriginalFolderId"] = storageEntry.binOriginalFolderId ?? null;
|
|
298
|
-
p["location"] = storageEntry.location ?? null;
|
|
299
|
-
const fields = Object.keys(storageEntry);
|
|
300
|
-
for (const field of fields)if ("createdOn" !== field && "createdBy" !== field) {
|
|
301
|
-
if ((field.endsWith("On") || field.endsWith("By")) && !field.startsWith("revision")) p[field] = storageEntry[field];
|
|
302
|
-
}
|
|
303
|
-
}, {
|
|
304
|
-
wbyDeleted: true
|
|
305
|
-
});
|
|
306
|
-
},
|
|
307
|
-
restoreFromBin: async (model, { entry, storageEntry })=>{
|
|
308
|
-
await entryTableManager.ensureTable();
|
|
309
|
-
await patchAllRevisions(entry.entryId, model.tenant, (parsed)=>{
|
|
310
|
-
const p = parsed;
|
|
311
|
-
p["wbyDeleted"] = false;
|
|
312
|
-
p["binOriginalFolderId"] = null;
|
|
313
|
-
p["location"] = storageEntry.location ?? null;
|
|
314
|
-
const fields = Object.keys(storageEntry);
|
|
315
|
-
for (const field of fields)if ("createdOn" !== field && "createdBy" !== field) {
|
|
316
|
-
if ((field.endsWith("On") || field.endsWith("By")) && !field.startsWith("revision")) p[field] = storageEntry[field];
|
|
317
|
-
}
|
|
318
|
-
}, {
|
|
319
|
-
wbyDeleted: false
|
|
320
|
-
});
|
|
321
|
-
return entry;
|
|
322
|
-
},
|
|
323
|
-
deleteRevision: async (model, { storageEntry, latestStorageEntry })=>{
|
|
324
|
-
await entryTableManager.ensureTable();
|
|
325
|
-
const wasPublished = "published" === storageEntry.status;
|
|
326
|
-
await query().where("tenant", model.tenant).andWhere("id", storageEntry.id).delete();
|
|
327
|
-
if (wasPublished) await patchAllRevisions(storageEntry.entryId, model.tenant, (parsed)=>{
|
|
328
|
-
parsed.live = null;
|
|
329
|
-
});
|
|
330
|
-
if (latestStorageEntry) {
|
|
331
|
-
const latestParsed = structuredClone(latestStorageEntry);
|
|
332
|
-
latestParsed.isLatest = true;
|
|
333
|
-
if (wasPublished) latestParsed.live = null;
|
|
334
|
-
const latestRow = entryToRow(latestParsed);
|
|
335
|
-
await query().where("tenant", model.tenant).andWhere("id", latestStorageEntry.id).update(latestRow);
|
|
336
|
-
}
|
|
337
|
-
},
|
|
338
|
-
delete: async (model, { entry })=>{
|
|
339
|
-
await entryTableManager.ensureTable();
|
|
340
|
-
const entryId = extractEntryId(entry.id);
|
|
341
|
-
await query().where("tenant", model.tenant).andWhere("entryId", entryId).delete();
|
|
342
|
-
},
|
|
343
|
-
deleteMultipleEntries: async (model, { entries })=>{
|
|
344
|
-
await entryTableManager.ensureTable();
|
|
345
|
-
const entryIds = entries.map(extractEntryId);
|
|
346
|
-
await query().where("tenant", model.tenant).whereIn("entryId", entryIds).delete();
|
|
347
|
-
},
|
|
348
|
-
getUniqueFieldValues: async (model, params)=>{
|
|
349
|
-
const { where, fieldId } = params;
|
|
350
|
-
const field = model.fields.find((f)=>f.fieldId === fieldId);
|
|
351
|
-
if (!field) return [];
|
|
352
|
-
const { items } = await listEntries(model, {
|
|
353
|
-
where,
|
|
354
|
-
limit: MAX_LIST_LIMIT
|
|
355
|
-
});
|
|
356
|
-
return aggregateUniqueFieldValues(items, field.fieldId);
|
|
357
|
-
}
|
|
358
|
-
};
|
|
359
|
-
};
|
|
360
|
-
export { createEntriesStorageOperations };
|
|
361
|
-
|
|
362
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"operations/entry/index.js","sources":["../../../src/operations/entry/index.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntry,\n CmsEntryListWhere,\n CmsEntryStorageOperations,\n CmsEntryValues,\n CmsModel,\n CmsStorageEntry\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport type { PluginsContainer } from \"@webiny/plugins\";\nimport type { CmsContext } from \"~/types.js\";\nimport type { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport type { IEntryRow } from \"./types.js\";\nimport { entryToRow, rowToEntry, mergeEntryLevelMeta } from \"./mappers.js\";\nimport { StorageTransformRegistry } from \"@webiny/api-headless-cms/exports/api/cms/storage.js\";\nimport { decodeCursor, encodeCursor } from \"@webiny/utils\";\nimport { ValueFilterRegistry } from \"@webiny/db-utils\";\nimport {\n createFields,\n filter,\n sort,\n createStorageModelAccessor,\n createStorageTransformCallable,\n aggregateUniqueFieldValues\n} from \"@webiny/api-headless-cms-storage\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\n\ninterface CreateEntriesStorageOperationsParams {\n knex: KnexClient.Interface;\n entryTableManager: EntryTableManager.Interface;\n container: CmsContext[\"container\"];\n plugins: PluginsContainer;\n}\n\nconst MAX_LIST_LIMIT = 1000000;\n\nconst extractEntryId = (id: string): string => {\n const hashIdx = id.indexOf(\"#\");\n\n if (hashIdx === -1) {\n return id;\n }\n\n return id.slice(0, hashIdx);\n};\n\nexport const createEntriesStorageOperations = (\n params: CreateEntriesStorageOperationsParams\n): CmsEntryStorageOperations => {\n const { knex, entryTableManager, container, plugins } = params;\n\n const storageTransformRegistry = container.resolve(StorageTransformRegistry);\n const { getModel: getStorageOperationsModel } = createStorageModelAccessor(plugins);\n\n const query = (): Knex.QueryBuilder<IEntryRow> => {\n return knex.client<IEntryRow>(entryTableManager.getTableName());\n };\n\n /*\n * Syncs entry-level meta to the latest revision only.\n * Also patches additional fields (e.g., live) if provided.\n */\n const syncToLatest = async (\n entry: CmsStorageEntry,\n extraPatch?: (latest: CmsEntry) => void\n ): Promise<void> => {\n if (entry.isLatest) {\n return;\n }\n\n const latestRow = await query()\n .where(\"entryId\", entry.entryId)\n .andWhere(\"isLatest\", true)\n .first();\n\n if (!latestRow) {\n return;\n }\n\n const latest = JSON.parse(latestRow.data);\n const merged = mergeEntryLevelMeta(entry, latest);\n\n if (extraPatch) {\n extraPatch(merged);\n }\n\n await query()\n .where(\"id\", latestRow.id)\n .update({ data: JSON.stringify(merged) });\n };\n\n /*\n * Patches the data blob on all revisions of an entry.\n * Used by move, moveToBin, restoreFromBin where every revision's data must be updated.\n */\n const patchAllRevisions = async (\n entryId: string,\n tenant: string,\n patch: (entry: CmsEntry) => void,\n columnUpdates?: Partial<IEntryRow>\n ): Promise<void> => {\n const rows = await query().where(\"tenant\", tenant).where(\"entryId\", entryId);\n\n if (rows.length === 0) {\n return;\n }\n\n const cases: Array<{ id: string; data: string }> = rows.map((row: IEntryRow) => {\n const parsed = JSON.parse(row.data);\n patch(parsed);\n return { id: row.id, data: JSON.stringify(parsed) };\n });\n\n const update: Record<string, unknown> = {\n data: knex.client.raw(\n `CASE id ${cases.map(() => \"WHEN ? THEN ?\").join(\" \")} END`,\n cases.flatMap((c: { id: string; data: string }) => [c.id, c.data])\n ),\n ...columnUpdates\n };\n\n await query().where(\"tenant\", tenant).where(\"entryId\", entryId).update(update);\n };\n\n const listEntries = async <T extends CmsEntryValues = CmsEntryValues>(\n initialModel: CmsModel,\n params: {\n where: CmsEntryListWhere;\n sort?: string[];\n search?: string;\n fields?: string[];\n limit: number;\n after?: string | null;\n }\n ) => {\n await entryTableManager.ensureTable();\n\n const model = getStorageOperationsModel(initialModel);\n const {\n where: initialWhere,\n sort: sortBy,\n search,\n fields: searchFields,\n limit: initialLimit,\n after\n } = params;\n\n const limit =\n initialLimit <= 0 || initialLimit >= MAX_LIST_LIMIT ? MAX_LIST_LIMIT : initialLimit;\n\n const qb = query().where(\"tenant\", model.tenant).andWhere(\"modelId\", model.modelId);\n\n if (initialWhere.entryId) {\n qb.andWhere(\"entryId\", initialWhere.entryId);\n } else if (initialWhere.published === true) {\n qb.andWhere(\"isPublished\", true);\n } else {\n qb.andWhere(\"isLatest\", true);\n }\n\n if (initialWhere.wbyDeleted !== undefined) {\n qb.andWhere(\"wbyDeleted\", initialWhere.wbyDeleted);\n } else {\n qb.andWhere(\"wbyDeleted\", false);\n }\n\n const rows: IEntryRow[] = await qb;\n\n if (rows.length === 0) {\n return {\n hasMoreItems: false,\n totalCount: 0,\n cursor: null,\n items: [] as CmsEntry<T>[]\n };\n }\n\n const fromStorage = createStorageTransformCallable(storageTransformRegistry, model);\n\n const records = await Promise.all(\n rows.map(async row => {\n const entry = rowToEntry(row) as CmsStorageEntry;\n\n for (const field of model.fields) {\n entry.values[field.fieldId] = await fromStorage(\n field,\n entry.values[field.fieldId]\n );\n }\n\n return entry as CmsEntry<T>;\n })\n );\n\n const where: Partial<CmsEntryListWhere> = { ...initialWhere };\n delete where[\"published\"];\n delete where[\"latest\"];\n delete where[\"entryId\"];\n delete where[\"wbyDeleted\"];\n\n const modelFields = createFields({\n plugins,\n fields: model.fields\n });\n\n const valueFilterRegistry = container.resolve(ValueFilterRegistry);\n\n const filteredItems = filter<T>({\n items: records,\n where,\n plugins,\n fields: modelFields,\n fullTextSearch: {\n term: search,\n fields: searchFields || []\n },\n valueFilterRegistry\n });\n\n const totalCount = filteredItems.length;\n\n const sortedItems = sort<T>({\n model,\n plugins,\n items: filteredItems,\n sort: sortBy,\n fields: modelFields\n });\n\n const start = parseInt((decodeCursor(after) as string) || \"0\") || 0;\n const hasMoreItems = totalCount > start + limit;\n const slicedItems = sortedItems.slice(start, start + limit);\n const cursor = encodeCursor(`${start + limit}`);\n\n return {\n hasMoreItems,\n totalCount,\n cursor,\n items: slicedItems\n };\n };\n\n return {\n getByIds: async (model, { ids }) => {\n await entryTableManager.ensureTable();\n\n const idList = ids as string[];\n\n const rows: IEntryRow[] = await query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"modelId\", model.modelId)\n .whereIn(\"id\", idList);\n\n const entries = rows.map(row => rowToEntry(row));\n const byId = new Map(entries.map(e => [e.id, e]));\n\n return idList.map(id => byId.get(id)).filter(Boolean) as typeof entries;\n },\n\n getPublishedByIds: async (model, { ids }) => {\n await entryTableManager.ensureTable();\n\n const idList = ids as string[];\n const entryIds = idList.map(extractEntryId);\n\n const rows: IEntryRow[] = await query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"modelId\", model.modelId)\n .whereIn(\"entryId\", entryIds)\n .andWhere(\"isPublished\", true);\n\n const entries = rows.map(row => rowToEntry(row));\n const byEntryId = new Map(entries.map(e => [e.entryId, e]));\n\n return entryIds.map(eid => byEntryId.get(eid)).filter(Boolean) as typeof entries;\n },\n\n getLatestByIds: async (model, { ids }) => {\n await entryTableManager.ensureTable();\n\n const idList = ids as string[];\n const entryIds = idList.map(extractEntryId);\n\n const rows: IEntryRow[] = await query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"modelId\", model.modelId)\n .whereIn(\"entryId\", entryIds)\n .andWhere(\"isLatest\", true);\n\n const entries = rows.map(row => rowToEntry(row));\n const byEntryId = new Map(entries.map(e => [e.entryId, e]));\n\n return entryIds.map(eid => byEntryId.get(eid)).filter(Boolean) as typeof entries;\n },\n\n getRevisions: async (model, { id }) => {\n await entryTableManager.ensureTable();\n\n const entryId = extractEntryId(id);\n\n const rows: IEntryRow[] = await query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"modelId\", model.modelId)\n .where(\"entryId\", entryId)\n .orderBy(\"version\", \"desc\");\n\n return rows.map(row => rowToEntry(row));\n },\n\n getRevisionById: async (model, { id }) => {\n await entryTableManager.ensureTable();\n\n const row = await query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"modelId\", model.modelId)\n .where(\"id\", id)\n .first();\n\n if (!row) {\n return null;\n }\n\n return rowToEntry(row);\n },\n\n getPublishedRevisionByEntryId: async (model, { id }) => {\n await entryTableManager.ensureTable();\n\n const entryId = extractEntryId(id);\n\n const row = await query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"modelId\", model.modelId)\n .where(\"entryId\", entryId)\n .andWhere(\"isPublished\", true)\n .first();\n\n if (!row) {\n return null;\n }\n\n return rowToEntry(row);\n },\n\n getLatestRevisionByEntryId: async (model, { id }) => {\n await entryTableManager.ensureTable();\n\n const entryId = extractEntryId(id);\n\n const row = await query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"modelId\", model.modelId)\n .where(\"entryId\", entryId)\n .andWhere(\"isLatest\", true)\n .first();\n\n if (!row) {\n return null;\n }\n\n return rowToEntry(row);\n },\n\n getPreviousRevision: async (model, { entryId, version }) => {\n await entryTableManager.ensureTable();\n\n const row = await query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"modelId\", model.modelId)\n .where(\"entryId\", entryId)\n .andWhere(\"version\", \"<\", version)\n .orderBy(\"version\", \"desc\")\n .first();\n\n if (!row) {\n return null;\n }\n\n return rowToEntry(row);\n },\n\n get: async (model, params) => {\n const { items } = await listEntries(model, {\n ...params,\n limit: 1\n });\n\n return items.shift() || null;\n },\n\n list: async (model, params) => {\n return listEntries(model, params);\n },\n\n create: async (model, { entry, storageEntry }) => {\n await entryTableManager.ensureTable();\n\n /* Enforce invariant: newly created entries are always latest. */\n const se = storageEntry as CmsStorageEntry;\n se.isLatest = true;\n se.isPublished = se.status === \"published\";\n\n const row = entryToRow(se);\n\n await query().insert(row);\n\n return entry;\n },\n\n createRevisionFrom: async (model, { entry, storageEntry }) => {\n await entryTableManager.ensureTable();\n\n const isPublished = entry.status === \"published\";\n\n /* Mark old latest as no longer latest — patch data blob too. */\n const oldLatestRows = await query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"entryId\", entry.entryId)\n .andWhere(\"isLatest\", true);\n\n for (const row of oldLatestRows) {\n const parsed = JSON.parse(row.data);\n parsed.isLatest = false;\n\n await query()\n .where(\"id\", row.id)\n .update({\n isLatest: false,\n data: JSON.stringify(parsed)\n });\n }\n\n /* If new revision is published, unpublish old published — patch data blob too. */\n if (isPublished) {\n const oldPublishedRows = await query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"entryId\", entry.entryId)\n .andWhere(\"isPublished\", true);\n\n for (const row of oldPublishedRows) {\n const parsed = JSON.parse(row.data);\n parsed.isPublished = false;\n parsed.status = \"unpublished\";\n\n await query()\n .where(\"id\", row.id)\n .update({\n isPublished: false,\n data: JSON.stringify(parsed)\n });\n }\n }\n\n /* Enforce invariant: new revision is always latest. */\n const se = storageEntry as CmsStorageEntry;\n se.isLatest = true;\n se.isPublished = isPublished;\n\n const row = entryToRow(se);\n\n await query().insert(row);\n\n return entry;\n },\n\n update: async (model, { entry, storageEntry }) => {\n await entryTableManager.ensureTable();\n\n /* Read current DB flags so the data blob stays in sync with indexed columns. */\n const existing = await query().where(\"id\", storageEntry.id).first();\n const se = storageEntry as CmsStorageEntry;\n se.isLatest = existing?.isLatest ?? se.isLatest;\n se.isPublished = existing?.isPublished ?? se.isPublished;\n\n const row = entryToRow(se);\n\n /* Strip flags from column update — they are already correct in DB. */\n const { isLatest: _il, isPublished: _ip, ...rowWithoutFlags } = row;\n\n await query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"id\", storageEntry.id)\n .update(rowWithoutFlags);\n\n /* Sync entry-level meta to the latest revision. */\n await syncToLatest(se);\n\n return entry;\n },\n\n publish: async (model, { entry, storageEntry }) => {\n await entryTableManager.ensureTable();\n\n /* Step 1: Unpublish old published — patch data blob (status, isPublished). */\n const oldPublishedRows = await query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"entryId\", entry.entryId)\n .andWhere(\"isPublished\", true);\n\n for (const row of oldPublishedRows) {\n const parsed = JSON.parse(row.data);\n parsed.isPublished = false;\n parsed.status = \"unpublished\";\n\n await query()\n .where(\"id\", row.id)\n .update({\n isPublished: false,\n data: JSON.stringify(parsed)\n });\n }\n\n /* Step 2: Read current isLatest from DB so the data blob stays in sync. */\n const existing = await query().where(\"id\", storageEntry.id).first();\n const se = storageEntry as CmsStorageEntry;\n se.isLatest = existing?.isLatest ?? se.isLatest;\n se.isPublished = true;\n\n const row = entryToRow(se);\n const { isLatest: _il, ...rowWithoutIsLatest } = row;\n\n await query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"id\", storageEntry.id)\n .update(rowWithoutIsLatest);\n\n /* Step 3: Sync entry-level meta + live to the latest revision. */\n const liveValue = { version: entry.version };\n\n await syncToLatest(se, latest => {\n latest.live = liveValue;\n });\n\n return entry;\n },\n\n unpublish: async (model, { entry, storageEntry }) => {\n await entryTableManager.ensureTable();\n\n /* Read current isLatest from DB so the data blob stays in sync. */\n const existing = await query().where(\"id\", storageEntry.id).first();\n const se = storageEntry as CmsStorageEntry;\n se.isLatest = existing?.isLatest ?? se.isLatest;\n se.isPublished = false;\n\n const row = entryToRow(se);\n const { isLatest: _il, ...rowWithoutIsLatest } = row;\n\n await query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"id\", storageEntry.id)\n .update(rowWithoutIsLatest);\n\n /* Sync entry-level meta + live=null to the latest revision. */\n await syncToLatest(se, latest => {\n latest.live = null;\n });\n\n return entry;\n },\n\n move: async (model, id, folderId) => {\n await entryTableManager.ensureTable();\n\n const entryId = extractEntryId(id);\n\n await patchAllRevisions(entryId, model.tenant, parsed => {\n parsed.location = { folderId };\n });\n },\n\n moveToBin: async (model, { entry, storageEntry }) => {\n await entryTableManager.ensureTable();\n\n await patchAllRevisions(\n entry.entryId,\n model.tenant,\n parsed => {\n const p = parsed as unknown as Record<string, unknown>;\n p[\"wbyDeleted\"] = true;\n p[\"binOriginalFolderId\"] = storageEntry.binOriginalFolderId ?? null;\n p[\"location\"] = storageEntry.location ?? null;\n\n /* Sync entry-level meta into each revision's data. */\n const fields = Object.keys(storageEntry);\n for (const field of fields) {\n if (field === \"createdOn\" || field === \"createdBy\") {\n continue;\n }\n if (\n (field.endsWith(\"On\") || field.endsWith(\"By\")) &&\n !field.startsWith(\"revision\")\n ) {\n p[field] = (storageEntry as Record<string, unknown>)[field];\n }\n }\n },\n { wbyDeleted: true }\n );\n },\n\n restoreFromBin: async (model, { entry, storageEntry }) => {\n await entryTableManager.ensureTable();\n\n await patchAllRevisions(\n entry.entryId,\n model.tenant,\n parsed => {\n const p = parsed as unknown as Record<string, unknown>;\n p[\"wbyDeleted\"] = false;\n p[\"binOriginalFolderId\"] = null;\n p[\"location\"] = storageEntry.location ?? null;\n\n /* Sync entry-level meta into each revision's data. */\n const fields = Object.keys(storageEntry);\n for (const field of fields) {\n if (field === \"createdOn\" || field === \"createdBy\") {\n continue;\n }\n if (\n (field.endsWith(\"On\") || field.endsWith(\"By\")) &&\n !field.startsWith(\"revision\")\n ) {\n p[field] = (storageEntry as Record<string, unknown>)[field];\n }\n }\n },\n { wbyDeleted: false }\n );\n\n return entry;\n },\n\n deleteRevision: async (model, { storageEntry, latestStorageEntry }) => {\n await entryTableManager.ensureTable();\n\n const wasPublished = storageEntry.status === \"published\";\n\n await query().where(\"tenant\", model.tenant).andWhere(\"id\", storageEntry.id).delete();\n\n /* If deleted row was published: clear live on all remaining rows. */\n if (wasPublished) {\n await patchAllRevisions(storageEntry.entryId, model.tenant, parsed => {\n parsed.live = null;\n });\n }\n\n /* If latestStorageEntry is provided: promote it as latest. */\n if (latestStorageEntry) {\n const latestParsed = structuredClone(latestStorageEntry);\n latestParsed.isLatest = true;\n\n if (wasPublished) {\n latestParsed.live = null;\n }\n\n const latestRow = entryToRow(latestParsed as CmsStorageEntry);\n\n await query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"id\", latestStorageEntry.id)\n .update(latestRow);\n }\n },\n\n delete: async (model, { entry }) => {\n await entryTableManager.ensureTable();\n\n const entryId = extractEntryId(entry.id);\n\n await query().where(\"tenant\", model.tenant).andWhere(\"entryId\", entryId).delete();\n },\n\n deleteMultipleEntries: async (model, { entries }) => {\n await entryTableManager.ensureTable();\n\n const entryIds = entries.map(extractEntryId);\n\n await query().where(\"tenant\", model.tenant).whereIn(\"entryId\", entryIds).delete();\n },\n\n getUniqueFieldValues: async (model, params) => {\n const { where, fieldId } = params;\n\n const field = model.fields.find(f => f.fieldId === fieldId);\n\n if (!field) {\n return [];\n }\n\n const { items } = await listEntries(model, {\n where,\n limit: MAX_LIST_LIMIT\n });\n\n return aggregateUniqueFieldValues(items, field.fieldId);\n }\n } as CmsEntryStorageOperations;\n};\n"],"names":["MAX_LIST_LIMIT","extractEntryId","id","hashIdx","createEntriesStorageOperations","params","knex","entryTableManager","container","plugins","storageTransformRegistry","StorageTransformRegistry","getStorageOperationsModel","createStorageModelAccessor","query","syncToLatest","entry","extraPatch","latestRow","latest","JSON","merged","mergeEntryLevelMeta","patchAllRevisions","entryId","tenant","patch","columnUpdates","rows","cases","row","parsed","update","c","listEntries","initialModel","model","initialWhere","sortBy","search","searchFields","initialLimit","after","limit","qb","undefined","fromStorage","createStorageTransformCallable","records","Promise","rowToEntry","field","where","modelFields","createFields","valueFilterRegistry","ValueFilterRegistry","filteredItems","filter","totalCount","sortedItems","sort","start","parseInt","decodeCursor","hasMoreItems","slicedItems","cursor","encodeCursor","ids","idList","entries","byId","Map","e","Boolean","entryIds","byEntryId","eid","version","items","storageEntry","se","entryToRow","isPublished","oldLatestRows","oldPublishedRows","existing","_il","_ip","rowWithoutFlags","rowWithoutIsLatest","liveValue","folderId","p","fields","Object","latestStorageEntry","wasPublished","latestParsed","structuredClone","fieldId","f","aggregateUniqueFieldValues"],"mappings":"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"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { CmsGroupStorageOperations } from "@webiny/api-headless-cms/types/index.js";
|
|
2
|
-
import { TableNameResolver } from "../../features/tableNameResolver/abstractions.js";
|
|
3
|
-
import { GroupSchemaManager } from "../../features/groupSchemaManager/abstractions.js";
|
|
4
|
-
import { KnexClient } from "@webiny/api-core-sql";
|
|
5
|
-
export declare const createGroupsStorageOperations: (knex: KnexClient.Interface, tableNameResolver: TableNameResolver.Interface, groupSchemaManager: GroupSchemaManager.Interface) => CmsGroupStorageOperations;
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { GROUP_COLUMNS } from "./types.js";
|
|
2
|
-
import { groupToRow, rowToGroup } from "./mappers.js";
|
|
3
|
-
const createGroupsStorageOperations = (knex, tableNameResolver, groupSchemaManager)=>{
|
|
4
|
-
const tableName = tableNameResolver.resolve("groups");
|
|
5
|
-
const ensureSchema = async ()=>{
|
|
6
|
-
await groupSchemaManager.ensure(tableName);
|
|
7
|
-
};
|
|
8
|
-
const query = ()=>knex.client(tableName);
|
|
9
|
-
const get = async (params)=>{
|
|
10
|
-
await ensureSchema();
|
|
11
|
-
const row = await query().where("id", params.id).where("tenant", params.tenant).first();
|
|
12
|
-
if (!row) return null;
|
|
13
|
-
return rowToGroup(row);
|
|
14
|
-
};
|
|
15
|
-
const list = async (params)=>{
|
|
16
|
-
const { where, sort } = params;
|
|
17
|
-
await ensureSchema();
|
|
18
|
-
const qb = query().where("tenant", where.tenant);
|
|
19
|
-
if (where.id) qb.andWhere("id", where.id);
|
|
20
|
-
if (where.slug) qb.andWhere("slug", where.slug);
|
|
21
|
-
if (void 0 !== where.isPlugin) qb.andWhere("isPlugin", where.isPlugin);
|
|
22
|
-
if (void 0 !== where.isPrivate) qb.andWhere("isPrivate", where.isPrivate);
|
|
23
|
-
if (sort?.length) for (const sortField of sort){
|
|
24
|
-
const parts = sortField.split("_");
|
|
25
|
-
const direction = parts.pop()?.toLowerCase() === "asc" ? "asc" : "desc";
|
|
26
|
-
const field = parts.join("_");
|
|
27
|
-
qb.orderBy(field, direction);
|
|
28
|
-
}
|
|
29
|
-
const rows = await qb.select([
|
|
30
|
-
...GROUP_COLUMNS
|
|
31
|
-
]);
|
|
32
|
-
return rows.map(rowToGroup);
|
|
33
|
-
};
|
|
34
|
-
const create = async (params)=>{
|
|
35
|
-
const row = groupToRow(params.group);
|
|
36
|
-
await ensureSchema();
|
|
37
|
-
await query().insert(row);
|
|
38
|
-
};
|
|
39
|
-
const update = async (params)=>{
|
|
40
|
-
const row = groupToRow(params.group);
|
|
41
|
-
await ensureSchema();
|
|
42
|
-
await query().where("id", params.group.id).update(row);
|
|
43
|
-
};
|
|
44
|
-
const deleteGroup = async (params)=>{
|
|
45
|
-
await ensureSchema();
|
|
46
|
-
await query().where("id", params.group.id).delete();
|
|
47
|
-
};
|
|
48
|
-
return {
|
|
49
|
-
get,
|
|
50
|
-
list,
|
|
51
|
-
create,
|
|
52
|
-
update,
|
|
53
|
-
delete: deleteGroup
|
|
54
|
-
};
|
|
55
|
-
};
|
|
56
|
-
export { createGroupsStorageOperations };
|
|
57
|
-
|
|
58
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"operations/group/index.js","sources":["../../../src/operations/group/index.ts"],"sourcesContent":["import type {\n CmsGroup,\n CmsGroupStorageOperations,\n CmsGroupStorageOperationsCreateParams,\n CmsGroupStorageOperationsDeleteParams,\n CmsGroupStorageOperationsGetParams,\n CmsGroupStorageOperationsListParams,\n CmsGroupStorageOperationsUpdateParams\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport type { IGroupRow } from \"./types.js\";\nimport { GROUP_COLUMNS } from \"./types.js\";\nimport { TableNameResolver } from \"~/features/tableNameResolver/abstractions.js\";\nimport { GroupSchemaManager } from \"~/features/groupSchemaManager/abstractions.js\";\nimport { groupToRow } from \"./mappers.js\";\nimport { rowToGroup } from \"./mappers.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\n\nexport const createGroupsStorageOperations = (\n knex: KnexClient.Interface,\n tableNameResolver: TableNameResolver.Interface,\n groupSchemaManager: GroupSchemaManager.Interface\n): CmsGroupStorageOperations => {\n const tableName = tableNameResolver.resolve(\"groups\");\n\n const ensureSchema = async () => {\n await groupSchemaManager.ensure(tableName);\n };\n\n const query = () => {\n return knex.client<IGroupRow>(tableName);\n };\n\n const get = async (params: CmsGroupStorageOperationsGetParams): Promise<CmsGroup | null> => {\n await ensureSchema();\n\n const row = await query().where(\"id\", params.id).where(\"tenant\", params.tenant).first();\n\n if (!row) {\n return null;\n }\n\n return rowToGroup(row);\n };\n\n const list = async (params: CmsGroupStorageOperationsListParams): Promise<CmsGroup[]> => {\n const { where, sort } = params;\n\n await ensureSchema();\n\n const qb = query().where(\"tenant\", where.tenant);\n\n if (where.id) {\n qb.andWhere(\"id\", where.id);\n }\n if (where.slug) {\n qb.andWhere(\"slug\", where.slug);\n }\n if (where.isPlugin !== undefined) {\n qb.andWhere(\"isPlugin\", where.isPlugin);\n }\n if (where.isPrivate !== undefined) {\n qb.andWhere(\"isPrivate\", where.isPrivate);\n }\n\n if (sort?.length) {\n for (const sortField of sort) {\n const parts = sortField.split(\"_\");\n const direction = parts.pop()?.toLowerCase() === \"asc\" ? \"asc\" : \"desc\";\n const field = parts.join(\"_\");\n qb.orderBy(field, direction);\n }\n }\n\n const rows = await qb.select<IGroupRow[]>([...GROUP_COLUMNS]);\n\n return rows.map(rowToGroup);\n };\n\n const create = async (params: CmsGroupStorageOperationsCreateParams): Promise<void> => {\n const row = groupToRow(params.group);\n\n await ensureSchema();\n await query().insert(row);\n };\n\n const update = async (params: CmsGroupStorageOperationsUpdateParams): Promise<void> => {\n const row = groupToRow(params.group);\n\n await ensureSchema();\n await query().where(\"id\", params.group.id).update(row);\n };\n\n const deleteGroup = async (params: CmsGroupStorageOperationsDeleteParams): Promise<void> => {\n await ensureSchema();\n await query().where(\"id\", params.group.id).delete();\n };\n\n return {\n get,\n list,\n create,\n update,\n delete: deleteGroup\n };\n};\n"],"names":["createGroupsStorageOperations","knex","tableNameResolver","groupSchemaManager","tableName","ensureSchema","query","get","params","row","rowToGroup","list","where","sort","qb","undefined","sortField","parts","direction","field","rows","GROUP_COLUMNS","create","groupToRow","update","deleteGroup"],"mappings":";;AAiBO,MAAMA,gCAAgC,CACzCC,MACAC,mBACAC;IAEA,MAAMC,YAAYF,kBAAkB,OAAO,CAAC;IAE5C,MAAMG,eAAe;QACjB,MAAMF,mBAAmB,MAAM,CAACC;IACpC;IAEA,MAAME,QAAQ,IACHL,KAAK,MAAM,CAAYG;IAGlC,MAAMG,MAAM,OAAOC;QACf,MAAMH;QAEN,MAAMI,MAAM,MAAMH,QAAQ,KAAK,CAAC,MAAME,OAAO,EAAE,EAAE,KAAK,CAAC,UAAUA,OAAO,MAAM,EAAE,KAAK;QAErF,IAAI,CAACC,KACD,OAAO;QAGX,OAAOC,WAAWD;IACtB;IAEA,MAAME,OAAO,OAAOH;QAChB,MAAM,EAAEI,KAAK,EAAEC,IAAI,EAAE,GAAGL;QAExB,MAAMH;QAEN,MAAMS,KAAKR,QAAQ,KAAK,CAAC,UAAUM,MAAM,MAAM;QAE/C,IAAIA,MAAM,EAAE,EACRE,GAAG,QAAQ,CAAC,MAAMF,MAAM,EAAE;QAE9B,IAAIA,MAAM,IAAI,EACVE,GAAG,QAAQ,CAAC,QAAQF,MAAM,IAAI;QAElC,IAAIA,AAAmBG,WAAnBH,MAAM,QAAQ,EACdE,GAAG,QAAQ,CAAC,YAAYF,MAAM,QAAQ;QAE1C,IAAIA,AAAoBG,WAApBH,MAAM,SAAS,EACfE,GAAG,QAAQ,CAAC,aAAaF,MAAM,SAAS;QAG5C,IAAIC,MAAM,QACN,KAAK,MAAMG,aAAaH,KAAM;YAC1B,MAAMI,QAAQD,UAAU,KAAK,CAAC;YAC9B,MAAME,YAAYD,MAAM,GAAG,IAAI,kBAAkB,QAAQ,QAAQ;YACjE,MAAME,QAAQF,MAAM,IAAI,CAAC;YACzBH,GAAG,OAAO,CAACK,OAAOD;QACtB;QAGJ,MAAME,OAAO,MAAMN,GAAG,MAAM,CAAc;eAAIO;SAAc;QAE5D,OAAOD,KAAK,GAAG,CAACV;IACpB;IAEA,MAAMY,SAAS,OAAOd;QAClB,MAAMC,MAAMc,WAAWf,OAAO,KAAK;QAEnC,MAAMH;QACN,MAAMC,QAAQ,MAAM,CAACG;IACzB;IAEA,MAAMe,SAAS,OAAOhB;QAClB,MAAMC,MAAMc,WAAWf,OAAO,KAAK;QAEnC,MAAMH;QACN,MAAMC,QAAQ,KAAK,CAAC,MAAME,OAAO,KAAK,CAAC,EAAE,EAAE,MAAM,CAACC;IACtD;IAEA,MAAMgB,cAAc,OAAOjB;QACvB,MAAMH;QACN,MAAMC,QAAQ,KAAK,CAAC,MAAME,OAAO,KAAK,CAAC,EAAE,EAAE,MAAM;IACrD;IAEA,OAAO;QACHD;QACAI;QACAW;QACAE;QACA,QAAQC;IACZ;AACJ"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { CmsModelStorageOperations } from "@webiny/api-headless-cms/types/index.js";
|
|
2
|
-
import { TableNameResolver } from "../../features/tableNameResolver/abstractions.js";
|
|
3
|
-
import { ModelSchemaManager } from "../../features/modelSchemaManager/abstractions.js";
|
|
4
|
-
import { KnexClient } from "@webiny/api-core-sql";
|
|
5
|
-
export declare const createModelsStorageOperations: (knex: KnexClient.Interface, tableNameResolver: TableNameResolver.Interface, modelSchemaManager: ModelSchemaManager.Interface) => CmsModelStorageOperations;
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { modelToRow, rowToModel } from "./mappers.js";
|
|
2
|
-
const createModelsStorageOperations = (knex, tableNameResolver, modelSchemaManager)=>{
|
|
3
|
-
const tableName = tableNameResolver.resolve("models");
|
|
4
|
-
const ensureSchema = async ()=>{
|
|
5
|
-
await modelSchemaManager.ensure(tableName);
|
|
6
|
-
};
|
|
7
|
-
const query = ()=>knex.client(tableName);
|
|
8
|
-
const get = async (params)=>{
|
|
9
|
-
await ensureSchema();
|
|
10
|
-
const row = await query().where("modelId", params.modelId).where("tenant", params.tenant).first();
|
|
11
|
-
if (!row) return null;
|
|
12
|
-
return rowToModel(row);
|
|
13
|
-
};
|
|
14
|
-
const list = async (params)=>{
|
|
15
|
-
await ensureSchema();
|
|
16
|
-
const { where } = params;
|
|
17
|
-
const qb = query().where("tenant", where.tenant);
|
|
18
|
-
qb.orderBy("modelId", "asc");
|
|
19
|
-
const rows = await qb.select();
|
|
20
|
-
return rows.map(rowToModel);
|
|
21
|
-
};
|
|
22
|
-
const create = async (params)=>{
|
|
23
|
-
const model = params.model;
|
|
24
|
-
const row = modelToRow(model);
|
|
25
|
-
await ensureSchema();
|
|
26
|
-
await query().insert(row);
|
|
27
|
-
return model;
|
|
28
|
-
};
|
|
29
|
-
const update = async (params)=>{
|
|
30
|
-
const model = params.model;
|
|
31
|
-
const row = modelToRow(model);
|
|
32
|
-
await ensureSchema();
|
|
33
|
-
await query().where("modelId", model.modelId).update(row);
|
|
34
|
-
return model;
|
|
35
|
-
};
|
|
36
|
-
const deleteModel = async (params)=>{
|
|
37
|
-
await ensureSchema();
|
|
38
|
-
await query().where("modelId", params.model.modelId).delete();
|
|
39
|
-
};
|
|
40
|
-
return {
|
|
41
|
-
get,
|
|
42
|
-
list,
|
|
43
|
-
create,
|
|
44
|
-
update,
|
|
45
|
-
delete: deleteModel
|
|
46
|
-
};
|
|
47
|
-
};
|
|
48
|
-
export { createModelsStorageOperations };
|
|
49
|
-
|
|
50
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"operations/model/index.js","sources":["../../../src/operations/model/index.ts"],"sourcesContent":["import type {\n CmsModelStorageOperations,\n CmsModelStorageOperationsCreateParams,\n CmsModelStorageOperationsDeleteParams,\n CmsModelStorageOperationsGetParams,\n CmsModelStorageOperationsListParams,\n CmsModelStorageOperationsUpdateParams,\n StorageCmsModel\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport type { IModelRow } from \"./types.js\";\nimport { TableNameResolver } from \"~/features/tableNameResolver/abstractions.js\";\nimport { ModelSchemaManager } from \"~/features/modelSchemaManager/abstractions.js\";\nimport { modelToRow, rowToModel } from \"./mappers.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\n\nexport const createModelsStorageOperations = (\n knex: KnexClient.Interface,\n tableNameResolver: TableNameResolver.Interface,\n modelSchemaManager: ModelSchemaManager.Interface\n): CmsModelStorageOperations => {\n const tableName = tableNameResolver.resolve(\"models\");\n\n const ensureSchema = async () => {\n await modelSchemaManager.ensure(tableName);\n };\n\n const query = () => {\n return knex.client<IModelRow>(tableName);\n };\n\n const get = async (\n params: CmsModelStorageOperationsGetParams\n ): Promise<StorageCmsModel | null> => {\n await ensureSchema();\n\n const row = await query()\n .where(\"modelId\", params.modelId)\n .where(\"tenant\", params.tenant)\n .first();\n\n if (!row) {\n return null;\n }\n\n return rowToModel(row);\n };\n\n const list = async (\n params: CmsModelStorageOperationsListParams\n ): Promise<StorageCmsModel[]> => {\n await ensureSchema();\n\n const { where } = params;\n const qb = query()\n // We always need to filter by tenant.\n .where(\"tenant\", where.tenant);\n\n /* Default sort by modelId ascending (alphabetical), matching DDB sort key behavior. */\n qb.orderBy(\"modelId\", \"asc\");\n\n const rows = await qb.select<IModelRow[]>();\n\n return rows.map(rowToModel);\n };\n\n const create = async (\n params: CmsModelStorageOperationsCreateParams\n ): Promise<StorageCmsModel> => {\n const model = params.model;\n const row = modelToRow(model);\n\n await ensureSchema();\n await query().insert(row);\n\n return model;\n };\n\n const update = async (\n params: CmsModelStorageOperationsUpdateParams\n ): Promise<StorageCmsModel> => {\n const model = params.model;\n const row = modelToRow(model);\n\n await ensureSchema();\n await query().where(\"modelId\", model.modelId).update(row);\n\n return model;\n };\n\n const deleteModel = async (params: CmsModelStorageOperationsDeleteParams): Promise<void> => {\n await ensureSchema();\n await query().where(\"modelId\", params.model.modelId).delete();\n };\n\n return {\n get,\n list,\n create,\n update,\n delete: deleteModel\n };\n};\n"],"names":["createModelsStorageOperations","knex","tableNameResolver","modelSchemaManager","tableName","ensureSchema","query","get","params","row","rowToModel","list","where","qb","rows","create","model","modelToRow","update","deleteModel"],"mappings":";AAeO,MAAMA,gCAAgC,CACzCC,MACAC,mBACAC;IAEA,MAAMC,YAAYF,kBAAkB,OAAO,CAAC;IAE5C,MAAMG,eAAe;QACjB,MAAMF,mBAAmB,MAAM,CAACC;IACpC;IAEA,MAAME,QAAQ,IACHL,KAAK,MAAM,CAAYG;IAGlC,MAAMG,MAAM,OACRC;QAEA,MAAMH;QAEN,MAAMI,MAAM,MAAMH,QACb,KAAK,CAAC,WAAWE,OAAO,OAAO,EAC/B,KAAK,CAAC,UAAUA,OAAO,MAAM,EAC7B,KAAK;QAEV,IAAI,CAACC,KACD,OAAO;QAGX,OAAOC,WAAWD;IACtB;IAEA,MAAME,OAAO,OACTH;QAEA,MAAMH;QAEN,MAAM,EAAEO,KAAK,EAAE,GAAGJ;QAClB,MAAMK,KAAKP,QAEN,KAAK,CAAC,UAAUM,MAAM,MAAM;QAGjCC,GAAG,OAAO,CAAC,WAAW;QAEtB,MAAMC,OAAO,MAAMD,GAAG,MAAM;QAE5B,OAAOC,KAAK,GAAG,CAACJ;IACpB;IAEA,MAAMK,SAAS,OACXP;QAEA,MAAMQ,QAAQR,OAAO,KAAK;QAC1B,MAAMC,MAAMQ,WAAWD;QAEvB,MAAMX;QACN,MAAMC,QAAQ,MAAM,CAACG;QAErB,OAAOO;IACX;IAEA,MAAME,SAAS,OACXV;QAEA,MAAMQ,QAAQR,OAAO,KAAK;QAC1B,MAAMC,MAAMQ,WAAWD;QAEvB,MAAMX;QACN,MAAMC,QAAQ,KAAK,CAAC,WAAWU,MAAM,OAAO,EAAE,MAAM,CAACP;QAErD,OAAOO;IACX;IAEA,MAAMG,cAAc,OAAOX;QACvB,MAAMH;QACN,MAAMC,QAAQ,KAAK,CAAC,WAAWE,OAAO,KAAK,CAAC,OAAO,EAAE,MAAM;IAC/D;IAEA,OAAO;QACHD;QACAI;QACAI;QACAG;QACA,QAAQC;IACZ;AACJ"}
|
package/types.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { PluginsContainer } from "@webiny/plugins/types.js";
|
|
2
|
-
import type { CmsContext, HeadlessCmsStorageOperations as BaseHeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types/index.js";
|
|
3
|
-
export type { CmsContext };
|
|
4
|
-
export interface SqlStorageOperationsFactoryParams {
|
|
5
|
-
plugins: PluginsContainer;
|
|
6
|
-
container: CmsContext["container"];
|
|
7
|
-
}
|
|
8
|
-
export interface SqlStorageOperationsFactory {
|
|
9
|
-
(params: SqlStorageOperationsFactoryParams): BaseHeadlessCmsStorageOperations;
|
|
10
|
-
}
|
package/types.js
DELETED
|
File without changes
|