@chevre/domain 22.13.0 → 22.14.0-alpha.1
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/example/src/chevre/note/upsertNotesByIdentifier.ts +58 -0
- package/example/src/chevre/roles/removeConsolePermissionIfExists.ts +2 -5
- package/lib/chevre/repo/mongoose/schemas/note.d.ts +5 -2
- package/lib/chevre/repo/mongoose/schemas/note.js +2 -1
- package/lib/chevre/repo/note.d.ts +18 -12
- package/lib/chevre/repo/note.js +50 -45
- package/lib/chevre/repo/noteAboutOrder.d.ts +30 -0
- package/lib/chevre/repo/noteAboutOrder.js +179 -0
- package/lib/chevre/repository.d.ts +5 -0
- package/lib/chevre/repository.js +15 -2
- package/lib/chevre/service/task/onResourceUpdated.js +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// tslint:disable:no-console no-magic-numbers
|
|
2
|
+
import * as mongoose from 'mongoose';
|
|
3
|
+
|
|
4
|
+
import { chevre } from '../../../../lib/index';
|
|
5
|
+
|
|
6
|
+
const project = { id: String(process.env.PROJECT_ID) };
|
|
7
|
+
|
|
8
|
+
// tslint:disable-next-line:max-func-body-length
|
|
9
|
+
async function main() {
|
|
10
|
+
await mongoose.connect(<string>process.env.MONGOLAB_URI, { autoIndex: false });
|
|
11
|
+
|
|
12
|
+
const noteRepo = await chevre.repository.Note.createInstance(mongoose.connection);
|
|
13
|
+
|
|
14
|
+
const creatingNote: Pick<
|
|
15
|
+
chevre.factory.creativeWork.noteDigitalDocument.INoteAboutProduct,
|
|
16
|
+
'about' | 'creator' | 'identifier' | 'project' | 'provider' | 'text' | 'version' | 'hasDigitalDocumentPermission'
|
|
17
|
+
> = {
|
|
18
|
+
about: { id: '656038908b1cd5ce629f5992', typeOf: chevre.factory.product.ProductType.EventService },
|
|
19
|
+
creator: { id: 'xxx', typeOf: chevre.factory.personType.Person },
|
|
20
|
+
identifier: 'abcdefgh',
|
|
21
|
+
project: { id: project.id, typeOf: chevre.factory.organizationType.Project },
|
|
22
|
+
provider: { id: project.id, typeOf: chevre.factory.organizationType.Project },
|
|
23
|
+
text: 'sample note text...',
|
|
24
|
+
version: '1',
|
|
25
|
+
hasDigitalDocumentPermission: []
|
|
26
|
+
|
|
27
|
+
};
|
|
28
|
+
const createResult = await noteRepo.upsertNotesByIdentifier(
|
|
29
|
+
[
|
|
30
|
+
{
|
|
31
|
+
$set: creatingNote
|
|
32
|
+
// $unset: {}
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
$set: creatingNote
|
|
36
|
+
// $unset: {}
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
{ update: false }
|
|
40
|
+
);
|
|
41
|
+
// tslint:disable-next-line:no-null-keyword
|
|
42
|
+
console.dir(createResult, { depth: null });
|
|
43
|
+
|
|
44
|
+
const updateResult = await noteRepo.upsertNotesByIdentifier(
|
|
45
|
+
[
|
|
46
|
+
{
|
|
47
|
+
$set: creatingNote
|
|
48
|
+
}
|
|
49
|
+
],
|
|
50
|
+
{ update: true }
|
|
51
|
+
);
|
|
52
|
+
// tslint:disable-next-line:no-null-keyword
|
|
53
|
+
console.dir(updateResult, { depth: null });
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
main()
|
|
57
|
+
.then()
|
|
58
|
+
.catch(console.error);
|
|
@@ -9,11 +9,8 @@ async function main() {
|
|
|
9
9
|
const roleRepo = await chevre.repository.Role.createInstance(mongoose.connection);
|
|
10
10
|
|
|
11
11
|
const permissions = [
|
|
12
|
-
'
|
|
13
|
-
'
|
|
14
|
-
'orders.update',
|
|
15
|
-
'reservations.attended',
|
|
16
|
-
'reservations.read'
|
|
12
|
+
'notes.*',
|
|
13
|
+
'notes.read'
|
|
17
14
|
];
|
|
18
15
|
for (const permission of permissions) {
|
|
19
16
|
const roles = await roleRepo.projectFields(
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { IndexDefinition, IndexOptions, Model, Schema, SchemaDefinition } from 'mongoose';
|
|
2
2
|
import * as factory from '../../../factory';
|
|
3
|
-
type IDocType = factory.creativeWork.noteDigitalDocument.INoteDigitalDocument
|
|
3
|
+
type IDocType = Pick<factory.creativeWork.noteDigitalDocument.INoteDigitalDocument, 'creator' | 'dateCreated' | 'dateModified' | 'editor' | 'hasDigitalDocumentPermission' | 'identifier' | 'project' | 'text' | 'typeOf' | 'version'> & {
|
|
4
|
+
about: factory.creativeWork.noteDigitalDocument.IAbout;
|
|
5
|
+
provider: factory.creativeWork.noteDigitalDocument.IProviderAsProject | factory.creativeWork.noteDigitalDocument.IProviderAsSeller;
|
|
6
|
+
};
|
|
4
7
|
type IModel = Model<IDocType>;
|
|
5
8
|
type ISchemaDefinition = SchemaDefinition<IDocType>;
|
|
6
9
|
type ISchema = Schema<IDocType, IModel, {}, {}, {}, {}, ISchemaDefinition, IDocType>;
|
|
7
10
|
declare const modelName = "Note";
|
|
8
11
|
declare const indexes: [d: IndexDefinition, o: IndexOptions][];
|
|
9
12
|
declare function createSchema(): ISchema;
|
|
10
|
-
export { createSchema, IModel, indexes, modelName };
|
|
13
|
+
export { createSchema, IDocType, IModel, indexes, modelName };
|
|
@@ -18,7 +18,8 @@ const schemaDefinition = {
|
|
|
18
18
|
creator: { type: mongoose_1.SchemaTypes.Mixed, required: true },
|
|
19
19
|
editor: mongoose_1.SchemaTypes.Mixed,
|
|
20
20
|
version: { type: String, required: true },
|
|
21
|
-
typeOf: { type: String, required: true }
|
|
21
|
+
typeOf: { type: String, required: true },
|
|
22
|
+
hasDigitalDocumentPermission: { type: mongoose_1.SchemaTypes.Mixed, required: false } // 2025-09-17~
|
|
22
23
|
};
|
|
23
24
|
const schemaOptions = {
|
|
24
25
|
autoIndex: settings_1.MONGO_AUTO_INDEX,
|
|
@@ -10,22 +10,28 @@ export declare class NoteRepo {
|
|
|
10
10
|
private readonly noteModel;
|
|
11
11
|
constructor(connection: Connection);
|
|
12
12
|
static CREATE_MONGO_CONDITIONS(params: factory.creativeWork.noteDigitalDocument.ISearchConditions): FilterQuery<import("@chevre/factory/lib/creativeWork/noteDigitalDocument").INoteDigitalDocument>[];
|
|
13
|
-
|
|
14
|
-
* 検索
|
|
15
|
-
*/
|
|
16
|
-
projectFields(params: factory.creativeWork.noteDigitalDocument.ISearchConditions, inclusion: IKeyOfProjection[]): Promise<(INoteDigitalDocument & {
|
|
13
|
+
findNotes(params: factory.creativeWork.noteDigitalDocument.ISearchConditions, inclusion: IKeyOfProjection[]): Promise<(INoteDigitalDocument & {
|
|
17
14
|
id: string;
|
|
18
15
|
})[]>;
|
|
19
16
|
/**
|
|
20
|
-
*
|
|
17
|
+
* メモ識別子をキーにして冪等置換
|
|
21
18
|
*/
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
19
|
+
upsertNotesByIdentifier(params: {
|
|
20
|
+
$set: Pick<INoteDigitalDocument, 'about' | 'creator' | 'identifier' | 'project' | 'provider' | 'text' | 'version' | 'hasDigitalDocumentPermission'> & {
|
|
21
|
+
id?: never;
|
|
22
|
+
};
|
|
23
|
+
}[], options: {
|
|
24
|
+
/**
|
|
25
|
+
* falseの場合setOnInsertのみ
|
|
26
|
+
* trueの場合setのみ
|
|
27
|
+
*/
|
|
28
|
+
update: boolean;
|
|
29
|
+
}): Promise<{
|
|
30
|
+
bulkWriteResult: BulkWriteResult;
|
|
31
|
+
modifiedNotes: {
|
|
32
|
+
id: string;
|
|
33
|
+
}[];
|
|
34
|
+
} | void>;
|
|
29
35
|
deleteManyByAbout(params: {
|
|
30
36
|
about: {
|
|
31
37
|
id: string;
|
package/lib/chevre/repo/note.js
CHANGED
|
@@ -24,7 +24,8 @@ const AVAILABLE_PROJECT_FIELDS = [
|
|
|
24
24
|
'creator',
|
|
25
25
|
'editor',
|
|
26
26
|
'version',
|
|
27
|
-
'typeOf'
|
|
27
|
+
'typeOf',
|
|
28
|
+
'hasDigitalDocumentPermission'
|
|
28
29
|
];
|
|
29
30
|
/**
|
|
30
31
|
* メモリポジトリ
|
|
@@ -74,10 +75,7 @@ class NoteRepo {
|
|
|
74
75
|
}
|
|
75
76
|
return andConditions;
|
|
76
77
|
}
|
|
77
|
-
|
|
78
|
-
* 検索
|
|
79
|
-
*/
|
|
80
|
-
projectFields(params, inclusion) {
|
|
78
|
+
findNotes(params, inclusion) {
|
|
81
79
|
return __awaiter(this, void 0, void 0, function* () {
|
|
82
80
|
var _a;
|
|
83
81
|
const conditions = NoteRepo.CREATE_MONGO_CONDITIONS(params);
|
|
@@ -99,20 +97,22 @@ class NoteRepo {
|
|
|
99
97
|
.skip(params.limit * (page - 1));
|
|
100
98
|
}
|
|
101
99
|
return query.setOptions({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
|
|
102
|
-
.lean()
|
|
100
|
+
.lean()
|
|
103
101
|
.exec();
|
|
104
102
|
});
|
|
105
103
|
}
|
|
106
104
|
/**
|
|
107
|
-
*
|
|
105
|
+
* メモ識別子をキーにして冪等置換
|
|
108
106
|
*/
|
|
109
|
-
|
|
107
|
+
upsertNotesByIdentifier(params, options) {
|
|
110
108
|
return __awaiter(this, void 0, void 0, function* () {
|
|
111
109
|
const now = new Date();
|
|
110
|
+
const { update } = options;
|
|
112
111
|
const bulkWriteOps = [];
|
|
112
|
+
const queryFilters = [];
|
|
113
113
|
if (Array.isArray(params)) {
|
|
114
|
-
params.forEach((
|
|
115
|
-
const { about, creator, identifier, project, provider, text, version } =
|
|
114
|
+
params.forEach(({ $set }) => {
|
|
115
|
+
const { about, creator, identifier, project, provider, text, version, hasDigitalDocumentPermission } = $set;
|
|
116
116
|
if (typeof identifier !== 'string' || identifier.length === 0) {
|
|
117
117
|
throw new factory.errors.ArgumentNull('identifier');
|
|
118
118
|
}
|
|
@@ -124,49 +124,54 @@ class NoteRepo {
|
|
|
124
124
|
}
|
|
125
125
|
// リソースのユニークネスを保証するfilter
|
|
126
126
|
const filter = {
|
|
127
|
-
// typeOf: { $eq: factory.creativeWorkType.NoteDigitalDocument },
|
|
128
127
|
'project.id': { $eq: project.id },
|
|
129
128
|
'about.id': { $eq: about.id },
|
|
130
129
|
identifier: { $eq: identifier },
|
|
131
130
|
version: { $eq: version }
|
|
132
131
|
};
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
132
|
+
queryFilters.push({
|
|
133
|
+
'project.id': { $eq: project.id },
|
|
134
|
+
'about.id': { $eq: about.id },
|
|
135
|
+
identifier: { $eq: identifier },
|
|
136
|
+
version: { $eq: version }
|
|
137
|
+
});
|
|
138
|
+
if (update === true) {
|
|
139
|
+
const setFields = Object.assign({ dateModified: now, editor: creator, text }, (Array.isArray(hasDigitalDocumentPermission)) ? { hasDigitalDocumentPermission } : undefined);
|
|
140
|
+
const updateFilter = {
|
|
141
|
+
$set: setFields
|
|
142
|
+
// ...($unset !== undefined) ? { $unset } : undefined
|
|
143
|
+
};
|
|
144
|
+
const updateOne = {
|
|
145
|
+
filter,
|
|
146
|
+
update: updateFilter,
|
|
147
|
+
upsert: false
|
|
148
|
+
};
|
|
149
|
+
bulkWriteOps.push({ updateOne });
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
const setOnInsert = Object.assign({ about, creator, identifier, project, provider, version, dateCreated: now, typeOf: factory.creativeWorkType.NoteDigitalDocument, text }, (Array.isArray(hasDigitalDocumentPermission)) ? { hasDigitalDocumentPermission } : undefined);
|
|
153
|
+
const updateFilter = {
|
|
154
|
+
$setOnInsert: setOnInsert
|
|
155
|
+
};
|
|
156
|
+
const updateOne = {
|
|
157
|
+
filter,
|
|
158
|
+
update: updateFilter,
|
|
159
|
+
upsert: true
|
|
160
|
+
};
|
|
161
|
+
bulkWriteOps.push({ updateOne });
|
|
162
|
+
}
|
|
148
163
|
});
|
|
149
164
|
}
|
|
150
165
|
if (bulkWriteOps.length > 0) {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
};
|
|
161
|
-
const doc = yield this.noteModel.findOneAndUpdate({ _id: { $eq: params.id } }, updateFields, {
|
|
162
|
-
upsert: false,
|
|
163
|
-
new: true,
|
|
164
|
-
projection: { _id: 1 }
|
|
165
|
-
})
|
|
166
|
-
.lean()
|
|
167
|
-
.exec();
|
|
168
|
-
if (doc === null) {
|
|
169
|
-
throw new factory.errors.NotFound(this.noteModel.modelName);
|
|
166
|
+
const bulkWriteResult = yield this.noteModel.bulkWrite(bulkWriteOps, { ordered: false });
|
|
167
|
+
// modifiedの場合upsertedIdsに含まれないので、idを検索する
|
|
168
|
+
const modifiedNotes = yield this.noteModel.find({ $or: queryFilters }, {
|
|
169
|
+
_id: 0,
|
|
170
|
+
id: { $toString: '$_id' }
|
|
171
|
+
})
|
|
172
|
+
.lean()
|
|
173
|
+
.exec();
|
|
174
|
+
return { bulkWriteResult, modifiedNotes };
|
|
170
175
|
}
|
|
171
176
|
});
|
|
172
177
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { BulkWriteResult } from 'mongodb';
|
|
2
|
+
import type { Connection, FilterQuery } from 'mongoose';
|
|
3
|
+
import * as factory from '../factory';
|
|
4
|
+
type INoteAboutOrder = factory.creativeWork.noteDigitalDocument.INoteAboutOrder;
|
|
5
|
+
type IKeyOfProjection = keyof INoteAboutOrder;
|
|
6
|
+
/**
|
|
7
|
+
* 注文メモリポジトリ
|
|
8
|
+
*/
|
|
9
|
+
export declare class NoteAboutOrderRepo {
|
|
10
|
+
private readonly noteModel;
|
|
11
|
+
constructor(connection: Connection);
|
|
12
|
+
static CREATE_MONGO_CONDITIONS(params: factory.creativeWork.noteDigitalDocument.ISearchConditions): FilterQuery<import("@chevre/factory/lib/creativeWork/noteDigitalDocument").INoteAboutOrder>[];
|
|
13
|
+
/**
|
|
14
|
+
* 検索
|
|
15
|
+
*/
|
|
16
|
+
findOrderNotes(params: factory.creativeWork.noteDigitalDocument.ISearchConditions, inclusion: IKeyOfProjection[]): Promise<(INoteAboutOrder & {
|
|
17
|
+
id: string;
|
|
18
|
+
})[]>;
|
|
19
|
+
/**
|
|
20
|
+
* コードをキーにしてなければ作成する(複数対応)
|
|
21
|
+
*/
|
|
22
|
+
upsertOrderNoteByIdentifier(params: Pick<INoteAboutOrder, 'about' | 'creator' | 'identifier' | 'project' | 'provider' | 'text' | 'version'>[], options: {
|
|
23
|
+
overwrite: boolean;
|
|
24
|
+
}): Promise<BulkWriteResult | void>;
|
|
25
|
+
updateById(params: {
|
|
26
|
+
id: string;
|
|
27
|
+
attributes: Pick<INoteAboutOrder, 'text' | 'editor'>;
|
|
28
|
+
}): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.NoteAboutOrderRepo = void 0;
|
|
13
|
+
const factory = require("../factory");
|
|
14
|
+
const settings_1 = require("../settings");
|
|
15
|
+
const note_1 = require("./mongoose/schemas/note");
|
|
16
|
+
const AVAILABLE_PROJECT_FIELDS = [
|
|
17
|
+
'identifier',
|
|
18
|
+
'text',
|
|
19
|
+
'project',
|
|
20
|
+
'provider',
|
|
21
|
+
'about',
|
|
22
|
+
'dateCreated',
|
|
23
|
+
'dateModified',
|
|
24
|
+
'creator',
|
|
25
|
+
'editor',
|
|
26
|
+
'version',
|
|
27
|
+
'typeOf'
|
|
28
|
+
];
|
|
29
|
+
/**
|
|
30
|
+
* 注文メモリポジトリ
|
|
31
|
+
*/
|
|
32
|
+
class NoteAboutOrderRepo {
|
|
33
|
+
constructor(connection) {
|
|
34
|
+
this.noteModel = connection.model(note_1.modelName, (0, note_1.createSchema)());
|
|
35
|
+
}
|
|
36
|
+
static CREATE_MONGO_CONDITIONS(params) {
|
|
37
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
|
38
|
+
const andConditions = [
|
|
39
|
+
{ 'about.typeOf': { $eq: factory.order.OrderType.Order } } // Orderに絞る
|
|
40
|
+
];
|
|
41
|
+
const idIn = (_a = params.id) === null || _a === void 0 ? void 0 : _a.$in;
|
|
42
|
+
if (Array.isArray(idIn)) {
|
|
43
|
+
andConditions.push({ _id: { $in: idIn } });
|
|
44
|
+
}
|
|
45
|
+
const projectIdEq = (_c = (_b = params.project) === null || _b === void 0 ? void 0 : _b.id) === null || _c === void 0 ? void 0 : _c.$eq;
|
|
46
|
+
if (typeof projectIdEq === 'string') {
|
|
47
|
+
andConditions.push({ 'project.id': { $eq: projectIdEq } });
|
|
48
|
+
}
|
|
49
|
+
const providerIdEq = (_e = (_d = params.provider) === null || _d === void 0 ? void 0 : _d.id) === null || _e === void 0 ? void 0 : _e.$eq;
|
|
50
|
+
if (typeof providerIdEq === 'string') {
|
|
51
|
+
andConditions.push({ 'provider.id': { $eq: providerIdEq } });
|
|
52
|
+
}
|
|
53
|
+
const aboutIdEq = (_g = (_f = params.about) === null || _f === void 0 ? void 0 : _f.id) === null || _g === void 0 ? void 0 : _g.$eq;
|
|
54
|
+
if (typeof aboutIdEq === 'string') {
|
|
55
|
+
andConditions.push({ 'about.id': { $eq: aboutIdEq } });
|
|
56
|
+
}
|
|
57
|
+
const aboutIdIn = (_j = (_h = params.about) === null || _h === void 0 ? void 0 : _h.id) === null || _j === void 0 ? void 0 : _j.$in;
|
|
58
|
+
if (Array.isArray(aboutIdIn)) {
|
|
59
|
+
andConditions.push({ 'about.id': { $in: aboutIdIn } });
|
|
60
|
+
}
|
|
61
|
+
const aboutOrderNumberEq = (_l = (_k = params.about) === null || _k === void 0 ? void 0 : _k.orderNumber) === null || _l === void 0 ? void 0 : _l.$eq;
|
|
62
|
+
if (typeof aboutOrderNumberEq === 'string') {
|
|
63
|
+
andConditions.push({ 'about.orderNumber': { $exists: true, $eq: aboutOrderNumberEq } });
|
|
64
|
+
}
|
|
65
|
+
const aboutOrderNumberIn = (_o = (_m = params.about) === null || _m === void 0 ? void 0 : _m.orderNumber) === null || _o === void 0 ? void 0 : _o.$in;
|
|
66
|
+
if (Array.isArray(aboutOrderNumberIn)) {
|
|
67
|
+
andConditions.push({ 'about.orderNumber': { $exists: true, $in: aboutOrderNumberIn } });
|
|
68
|
+
}
|
|
69
|
+
const identifierEq = (_p = params.identifier) === null || _p === void 0 ? void 0 : _p.$eq;
|
|
70
|
+
if (typeof identifierEq === 'string') {
|
|
71
|
+
andConditions.push({ identifier: { $eq: identifierEq } });
|
|
72
|
+
}
|
|
73
|
+
const identifierIn = (_q = params.identifier) === null || _q === void 0 ? void 0 : _q.$in;
|
|
74
|
+
if (Array.isArray(identifierIn)) {
|
|
75
|
+
andConditions.push({ identifier: { $in: identifierIn } });
|
|
76
|
+
}
|
|
77
|
+
return andConditions;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 検索
|
|
81
|
+
*/
|
|
82
|
+
findOrderNotes(params, inclusion) {
|
|
83
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
84
|
+
var _a;
|
|
85
|
+
const conditions = NoteAboutOrderRepo.CREATE_MONGO_CONDITIONS(params);
|
|
86
|
+
let positiveProjectionFields = AVAILABLE_PROJECT_FIELDS;
|
|
87
|
+
if (Array.isArray(inclusion) && inclusion.length > 0) {
|
|
88
|
+
positiveProjectionFields = inclusion.filter((key) => AVAILABLE_PROJECT_FIELDS.includes(key));
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
throw new factory.errors.ArgumentNull('inclusion', 'inclusion must be specified');
|
|
92
|
+
}
|
|
93
|
+
const projection = Object.assign({ _id: 0, id: { $toString: '$_id' } }, Object.fromEntries(positiveProjectionFields.map((key) => ([key, 1]))));
|
|
94
|
+
const query = this.noteModel.find((conditions.length > 0) ? { $and: conditions } : {}, projection);
|
|
95
|
+
if (typeof ((_a = params.sort) === null || _a === void 0 ? void 0 : _a.dateCreated) === 'number') {
|
|
96
|
+
query.sort({ dateCreated: params.sort.dateCreated });
|
|
97
|
+
}
|
|
98
|
+
if (typeof params.limit === 'number' && params.limit > 0) {
|
|
99
|
+
const page = (typeof params.page === 'number' && params.page > 0) ? params.page : 1;
|
|
100
|
+
query.limit(params.limit)
|
|
101
|
+
.skip(params.limit * (page - 1));
|
|
102
|
+
}
|
|
103
|
+
return query.setOptions({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
|
|
104
|
+
.lean() // 2024-09-19~
|
|
105
|
+
.exec();
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* コードをキーにしてなければ作成する(複数対応)
|
|
110
|
+
*/
|
|
111
|
+
upsertOrderNoteByIdentifier(params, options) {
|
|
112
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
113
|
+
const now = new Date();
|
|
114
|
+
const bulkWriteOps = [];
|
|
115
|
+
if (Array.isArray(params)) {
|
|
116
|
+
params.forEach((creatingNoteParams) => {
|
|
117
|
+
const { about, creator, identifier, project, provider, text, version } = creatingNoteParams;
|
|
118
|
+
if (typeof identifier !== 'string' || identifier.length === 0) {
|
|
119
|
+
throw new factory.errors.ArgumentNull('identifier');
|
|
120
|
+
}
|
|
121
|
+
if (typeof version !== 'string' || version.length === 0) {
|
|
122
|
+
throw new factory.errors.ArgumentNull('version');
|
|
123
|
+
}
|
|
124
|
+
if (typeof text !== 'string') {
|
|
125
|
+
throw new factory.errors.ArgumentNull('text');
|
|
126
|
+
}
|
|
127
|
+
// リソースのユニークネスを保証するfilter
|
|
128
|
+
const filter = {
|
|
129
|
+
// typeOf: { $eq: factory.creativeWorkType.NoteDigitalDocument },
|
|
130
|
+
'project.id': { $eq: project.id },
|
|
131
|
+
'about.id': { $eq: about.id },
|
|
132
|
+
identifier: { $eq: identifier },
|
|
133
|
+
version: { $eq: version }
|
|
134
|
+
};
|
|
135
|
+
const setOnInsert = Object.assign({ about, creator, identifier, project, provider, version, dateCreated: now, typeOf: factory.creativeWorkType.NoteDigitalDocument }, (!options.overwrite) ? { text } : undefined // overwriteでない場合はinsert時にtextをセット
|
|
136
|
+
);
|
|
137
|
+
// 変更可能な属性のみ上書き
|
|
138
|
+
const setFields = {
|
|
139
|
+
dateModified: now,
|
|
140
|
+
editor: creator,
|
|
141
|
+
text
|
|
142
|
+
};
|
|
143
|
+
const updateFilter = Object.assign({ $setOnInsert: setOnInsert }, (options.overwrite) ? { $set: setFields } : undefined);
|
|
144
|
+
const updateOne = {
|
|
145
|
+
filter,
|
|
146
|
+
update: updateFilter,
|
|
147
|
+
upsert: true
|
|
148
|
+
};
|
|
149
|
+
bulkWriteOps.push({ updateOne });
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
if (bulkWriteOps.length > 0) {
|
|
153
|
+
return this.noteModel.bulkWrite(bulkWriteOps, { ordered: false });
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
updateById(params) {
|
|
158
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
159
|
+
var _a;
|
|
160
|
+
const updateFields = {
|
|
161
|
+
$set: Object.assign(Object.assign({ dateModified: new Date() }, (typeof params.attributes.text === 'string') ? { text: params.attributes.text } : undefined), (typeof ((_a = params.attributes.editor) === null || _a === void 0 ? void 0 : _a.id) === 'string') ? { editor: params.attributes.editor } : undefined)
|
|
162
|
+
};
|
|
163
|
+
const doc = yield this.noteModel.findOneAndUpdate({
|
|
164
|
+
_id: { $eq: params.id },
|
|
165
|
+
'about.typeOf': { $eq: factory.order.OrderType.Order }
|
|
166
|
+
}, updateFields, {
|
|
167
|
+
upsert: false,
|
|
168
|
+
new: true,
|
|
169
|
+
projection: { _id: 1 }
|
|
170
|
+
})
|
|
171
|
+
.lean()
|
|
172
|
+
.exec();
|
|
173
|
+
if (doc === null) {
|
|
174
|
+
throw new factory.errors.NotFound(this.noteModel.modelName);
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
exports.NoteAboutOrderRepo = NoteAboutOrderRepo;
|
|
@@ -33,6 +33,7 @@ import type { MemberProgramRepo } from './repo/memberProgram';
|
|
|
33
33
|
import type { MerchantReturnPolicyRepo } from './repo/merchantReturnPolicy';
|
|
34
34
|
import type { MessageRepo } from './repo/message';
|
|
35
35
|
import type { NoteRepo } from './repo/note';
|
|
36
|
+
import type { NoteAboutOrderRepo } from './repo/noteAboutOrder';
|
|
36
37
|
import type { EventOfferRepo } from './repo/offer/event';
|
|
37
38
|
import type { OfferRepo } from './repo/offer/unitPriceInCatalog';
|
|
38
39
|
import type { OfferCatalogRepo } from './repo/offerCatalog';
|
|
@@ -223,6 +224,10 @@ export type Note = NoteRepo;
|
|
|
223
224
|
export declare namespace Note {
|
|
224
225
|
function createInstance(...params: ConstructorParameters<typeof NoteRepo>): Promise<NoteRepo>;
|
|
225
226
|
}
|
|
227
|
+
export type NoteAboutOrder = NoteAboutOrderRepo;
|
|
228
|
+
export declare namespace NoteAboutOrder {
|
|
229
|
+
function createInstance(...params: ConstructorParameters<typeof NoteAboutOrderRepo>): Promise<NoteAboutOrderRepo>;
|
|
230
|
+
}
|
|
226
231
|
export type OfferCatalog = OfferCatalogRepo;
|
|
227
232
|
export declare namespace OfferCatalog {
|
|
228
233
|
function createInstance(...params: ConstructorParameters<typeof OfferCatalogRepo>): Promise<OfferCatalogRepo>;
|
package/lib/chevre/repository.js
CHANGED
|
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.
|
|
13
|
-
exports.WebSite = exports.rateLimit = exports.Trip = exports.TransactionProcess = exports.TransactionNumber = exports.Transaction = exports.Ticket = exports.Telemetry = exports.Task = exports.StockHolder = exports.setting = exports.Setting = exports.ServiceOutputIdentifier = exports.ServiceOutput = exports.ServiceAvailableHour = exports.SellerReturnPolicy = exports.SellerPaymentAccepted = exports.SellerMakesOffer = exports.Seller = exports.Schedule = exports.Role = exports.ReserveInterface = exports.Reservation = exports.ProjectMakesOffer = exports.Project = exports.ProductOffer = exports.ProductModel = exports.Product = exports.PriceSpecification = exports.PotentialAction = exports.place = void 0;
|
|
12
|
+
exports.Person = exports.paymentMethod = exports.PendingReservation = exports.PaymentServiceProvider = exports.PaymentServiceChannel = exports.PaymentService = exports.Passport = exports.OwnershipInfo = exports.OrderNumber = exports.OrderInTransaction = exports.Order = exports.Offer = exports.OfferItemCondition = exports.OfferCatalogItem = exports.OfferCatalog = exports.NoteAboutOrder = exports.Note = exports.Message = exports.MerchantReturnPolicy = exports.MemberProgram = exports.Member = exports.Issuer = exports.IdentityProvider = exports.Identity = exports.EventSeries = exports.EventSellerMakesOffer = exports.EventOffer = exports.Event = exports.EmailMessage = exports.CustomerType = exports.Customer = exports.Credentials = exports.CreativeWork = exports.ConfirmationNumber = exports.Comment = exports.Authorization = exports.CategoryCode = exports.AssetTransaction = exports.Aggregation = exports.AggregateReservation = exports.AggregateOrder = exports.AggregateOffer = exports.AdvanceBookingRequirement = exports.AdditionalProperty = exports.Action = exports.AccountTransaction = exports.AccountTitle = exports.AccountingReport = exports.Account = exports.AcceptedOffer = void 0;
|
|
13
|
+
exports.WebSite = exports.rateLimit = exports.Trip = exports.TransactionProcess = exports.TransactionNumber = exports.Transaction = exports.Ticket = exports.Telemetry = exports.Task = exports.StockHolder = exports.setting = exports.Setting = exports.ServiceOutputIdentifier = exports.ServiceOutput = exports.ServiceAvailableHour = exports.SellerReturnPolicy = exports.SellerPaymentAccepted = exports.SellerMakesOffer = exports.Seller = exports.Schedule = exports.Role = exports.ReserveInterface = exports.Reservation = exports.ProjectMakesOffer = exports.Project = exports.ProductOffer = exports.ProductModel = exports.Product = exports.PriceSpecification = exports.PotentialAction = exports.place = exports.Permit = void 0;
|
|
14
14
|
var AcceptedOffer;
|
|
15
15
|
(function (AcceptedOffer) {
|
|
16
16
|
let repo;
|
|
@@ -453,6 +453,19 @@ var Note;
|
|
|
453
453
|
}
|
|
454
454
|
Note.createInstance = createInstance;
|
|
455
455
|
})(Note || (exports.Note = Note = {}));
|
|
456
|
+
var NoteAboutOrder;
|
|
457
|
+
(function (NoteAboutOrder) {
|
|
458
|
+
let repo;
|
|
459
|
+
function createInstance(...params) {
|
|
460
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
461
|
+
if (repo === undefined) {
|
|
462
|
+
repo = (yield Promise.resolve().then(() => require('./repo/noteAboutOrder'))).NoteAboutOrderRepo;
|
|
463
|
+
}
|
|
464
|
+
return new repo(...params);
|
|
465
|
+
});
|
|
466
|
+
}
|
|
467
|
+
NoteAboutOrder.createInstance = createInstance;
|
|
468
|
+
})(NoteAboutOrder || (exports.NoteAboutOrder = NoteAboutOrder = {}));
|
|
456
469
|
var OfferCatalog;
|
|
457
470
|
(function (OfferCatalog) {
|
|
458
471
|
let repo;
|
|
@@ -187,7 +187,7 @@ function onResourceUpdated(params) {
|
|
|
187
187
|
function createInformNoteTasks(params, setting) {
|
|
188
188
|
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
189
189
|
var _a;
|
|
190
|
-
const notes4inform = yield repos.note.
|
|
190
|
+
const notes4inform = yield repos.note.findNotes({ id: { $in: params.ids } }, ['about', 'identifier', 'project', 'text', 'typeOf', 'version']);
|
|
191
191
|
// const informResources = settings.onResourceUpdated.informResource;
|
|
192
192
|
const informResources = (_a = setting === null || setting === void 0 ? void 0 : setting.onResourceUpdated) === null || _a === void 0 ? void 0 : _a.informResource;
|
|
193
193
|
if (notes4inform.length > 0) {
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@aws-sdk/client-cognito-identity-provider": "3.600.0",
|
|
13
13
|
"@aws-sdk/credential-providers": "3.600.0",
|
|
14
|
-
"@chevre/factory": "4.
|
|
14
|
+
"@chevre/factory": "4.399.0-alpha.1",
|
|
15
15
|
"@cinerino/sdk": "12.2.0",
|
|
16
16
|
"@motionpicture/coa-service": "9.6.0",
|
|
17
17
|
"@motionpicture/gmo-service": "5.4.0-alpha.1",
|
|
@@ -115,5 +115,5 @@
|
|
|
115
115
|
"postversion": "git push origin --tags",
|
|
116
116
|
"prepublishOnly": "npm run clean && npm run build && npm test && npm run doc"
|
|
117
117
|
},
|
|
118
|
-
"version": "22.
|
|
118
|
+
"version": "22.14.0-alpha.1"
|
|
119
119
|
}
|