Skip to content

Commit e3b29fb

Browse files
committed
Add rules option to AutoIncrementPlugin in identities.schema.ts
1 parent ed2a7f2 commit e3b29fb

File tree

5 files changed

+32
-3
lines changed

5 files changed

+32
-3
lines changed

src/_common/plugins/mongoose/auto-increment.interface.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ export interface AutoIncrementPluginOptions {
3333
* Defaults to `document.constructor.modelName`
3434
*/
3535
overwriteModelName?: string | OverwriteModelNameFunction;
36+
37+
rules?: Function;
3638
}
3739

3840
/**

src/_common/plugins/mongoose/auto-increment.plugin.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Connection, Model, Schema } from 'mongoose';
22
import { AutoIncrementPluginOptions, AutoIncrementPluginTrackerSpec } from './auto-increment.interface';
33
import { logger } from './auto-increment.logger';
4+
import { set } from 'radash';
45

56
const DEFAULT_INCREMENT = 1;
67

@@ -95,6 +96,15 @@ export function AutoIncrementPlugin(schema: Schema<any>, options: any): void {
9596
return;
9697
}
9798

99+
100+
if (typeof opt.rules === 'function') {
101+
const result = opt.rules(this);
102+
if (!result) {
103+
logger.info('Rule function returned false, not incrementing');
104+
return next();
105+
}
106+
}
107+
98108
const leandoc = await model
99109
.findOneAndUpdate(
100110
{
@@ -119,7 +129,9 @@ export function AutoIncrementPlugin(schema: Schema<any>, options: any): void {
119129
}
120130

121131
logger.info('Setting "%s" to "%d"', opt.field, leandoc.count);
122-
this[opt.field] = leandoc.count;
132+
133+
set(this, opt.field, leandoc.count);
134+
// this[opt.field] = leandoc.count;
123135

124136
return next();
125137
});

src/management/identities/_dto/_parts/inetOrgPerson.dto.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export class inetOrgPersonCreateDto {
1212

1313
@IsString()
1414
@ApiProperty()
15+
@IsOptional()
1516
public employeeNumber: string;
1617

1718
@IsString()

src/management/identities/_schemas/_parts/inetOrgPerson.part.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
22
import { Document } from 'mongoose';
3+
import { AutoIncrementPluginOptions } from '~/_common/plugins/mongoose/auto-increment.interface';
4+
import { AutoIncrementPlugin } from '~/_common/plugins/mongoose/auto-increment.plugin';
35

46
@Schema({ _id: false })
57
export class inetOrgPerson extends Document {
@@ -42,7 +44,10 @@ export class inetOrgPerson extends Document {
4244
@Prop({ type: String, required: true })
4345
public uid: string;
4446

45-
@Prop({ type: String, required: true })
47+
@Prop({
48+
type: String,
49+
validate: [(employeeNumber: string) => /[A-Za-z0-9_-]+/.test(employeeNumber), 'EmployeeNumber invalide.'],
50+
})
4651
public employeeNumber: string;
4752

4853
@Prop({ type: String, required: true })

src/management/identities/_schemas/identities.schema.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import { AdditionalFieldsPart, AdditionalFieldsPartSchema } from './_parts/addit
88
import { InitStatesEnum } from '~/management/identities/_enums/init-state.enum';
99
import { InitInfoPart, InitInfoPartSchema } from '~/management/identities/_schemas/_parts/init-info.part.schema';
1010
import { MixedValue } from '~/_common/types/mixed-value.type';
11+
import { AutoIncrementPlugin } from '~/_common/plugins/mongoose/auto-increment.plugin';
12+
import { AutoIncrementPluginOptions } from '~/_common/plugins/mongoose/auto-increment.interface';
1113

1214
export type IdentitiesDocument = Identities & Document;
1315

@@ -43,4 +45,11 @@ export class Identities extends AbstractSchema {
4345
public customFields?: { [key: string]: MixedValue }
4446
}
4547

46-
export const IdentitiesSchema = SchemaFactory.createForClass(Identities);
48+
export const IdentitiesSchema = SchemaFactory.createForClass(Identities).plugin(AutoIncrementPlugin, <AutoIncrementPluginOptions>{
49+
incrementBy: 1,
50+
field: 'inetOrgPerson.employeeNumber',
51+
startAt: 1,
52+
rules: (ctx) => {
53+
return ctx.inetOrgPerson.employeeType === 'LOCAL';
54+
},
55+
});

0 commit comments

Comments
 (0)