fix(plugin-sequence): fix test case (#1268)

* fix(plugin-sequence): fix test case

* fix(plugin-sequence): fix async call

* fix(plugin-sequence): fix test case
This commit is contained in:
Junyi 2022-12-19 21:23:54 +08:00 committed by GitHub
parent a14a65596e
commit 217ecb27ae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 13 deletions

View File

@ -710,13 +710,13 @@ describe('sequence field', () => {
await db.sync(); await db.sync();
const TestModel = db.getModel('tests'); const TestModel = db.getModel('tests');
const item1 = await TestModel.create(); const item1 = await TestModel.create({});
expect(item1.name).toBe('0'); expect(item1.name).toBe('0');
const item2 = await TestModel.create({ name: '2' }); const item2 = await TestModel.create({ name: '2' });
expect(item2.name).toBe('2'); expect(item2.name).toBe('2');
const item3 = await TestModel.create(); const item3 = await TestModel.create({});
expect(item3.name).toBe('3'); expect(item3.name).toBe('3');
}); });

View File

@ -9,7 +9,7 @@ import { Model, BaseColumnFieldOptions, Field, FieldContext } from '@nocobase/da
export interface Pattern { export interface Pattern {
validate?(options): string | null; validate?(options): string | null;
generate(this: SequenceField, instance: Model, index: number, options: Transactionable): Promise<string> | string; generate(this: SequenceField, instance: Model, opts: { [key: string]: any }, options: Transactionable): Promise<string> | string;
getLength(options): number; getLength(options): number;
getMatcher(options): string; getMatcher(options): string;
update?(this: SequenceField, instance: Model, value: string, options, transactionable: Transactionable): Promise<void>; update?(this: SequenceField, instance: Model, value: string, options, transactionable: Transactionable): Promise<void>;
@ -24,8 +24,7 @@ sequencePatterns.register('string', {
} }
return null; return null;
}, },
generate(instance, index) { generate(instance, options) {
const { options } = this.options.patterns[index];
return options.value; return options.value;
}, },
getLength(options) { getLength(options) {
@ -43,9 +42,8 @@ sequencePatterns.register('integer', {
// } // }
// return null; // return null;
// }, // },
async generate(this: SequenceField, instance: Model, index, { transaction }) { async generate(this: SequenceField, instance: Model, options, { transaction }) {
const recordTime = <Date>instance.get('createdAt'); const recordTime = <Date>instance.get('createdAt');
const { options = {} } = this.options.patterns[index];
const { digits = 1, start = 0, base = 10, cycle, key } = options; const { digits = 1, start = 0, base = 10, cycle, key } = options;
const max = Math.pow(base, digits) - 1; const max = Math.pow(base, digits) - 1;
const SeqRepo = this.database.getRepository('sequences'); const SeqRepo = this.database.getRepository('sequences');
@ -169,8 +167,7 @@ sequencePatterns.register('integer', {
}); });
sequencePatterns.register('date', { sequencePatterns.register('date', {
generate(this: SequenceField, instance, index) { generate(this: SequenceField, instance, options) {
const { options } = this.options.patterns[index];
return moment(instance.get(options?.field ?? 'createdAt')).format(options?.format ?? 'YYYYMMDD'); return moment(instance.get(options?.field ?? 'createdAt')).format(options?.format ?? 'YYYYMMDD');
}, },
getLength(options) { getLength(options) {
@ -246,7 +243,7 @@ export class SequenceField extends Field {
} }
const results = await patterns.reduce((promise, p, i) => promise.then(async (result) => { const results = await patterns.reduce((promise, p, i) => promise.then(async (result) => {
const item = await (sequencePatterns.get(p.type)).generate.call(this, instance, i, options); const item = await (sequencePatterns.get(p.type)).generate.call(this, instance, p.options, options);
return result.concat(item); return result.concat(item);
}), Promise.resolve([])); }), Promise.resolve([]));
instance.set(name, results.join('')); instance.set(name, results.join(''));
@ -260,14 +257,14 @@ export class SequenceField extends Field {
const { name, patterns } = this.options; const { name, patterns } = this.options;
const matched = this.match(instance.get(name)); const matched = this.match(instance.get(name));
if (matched) { if (matched) {
await matched.slice(1) await (matched.slice(1)
.map((_, i) => sequencePatterns.get(patterns[i].type).update) .map((_, i) => sequencePatterns.get(patterns[i].type).update)
.reduce((promise, update, i) => promise.then(() => { .reduce((promise, update, i) => promise.then(() => {
if (!update) { if (!update) {
return; return;
} }
update.call(this, instance, matched[i + 1], patterns[i].options, options) return update.call(this, instance, matched[i + 1], patterns[i].options, options)
}), Promise.resolve()); }), Promise.resolve()));
} }
} }