Skip to content

Commit 1ae2585

Browse files
committed
refactor(json-api-nestjs): add method for validate from microorm
1 parent 30b3988 commit 1ae2585

File tree

162 files changed

+3879
-956
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

162 files changed

+3879
-956
lines changed

.env

+4
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,7 @@ DB_TYPE=postgres
1313
#DB_NAME="example_new"
1414
#DB_PORT=3306
1515
#DB_TYPE=mysql
16+
17+
18+
ORM_TYPE=microorm
19+
#ORM_TYPE=typeorm

apps/json-api-server-e2e/src/json-api/json-api-sdk/atomic-sdk.spec.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
import { INestApplication } from '@nestjs/common';
22
import { FilterOperand, JsonSdkPromise } from '@klerick/json-api-nestjs-sdk';
3-
import { Addresses, CommentKind, Comments, Roles, Users } from 'database';
3+
import {
4+
Addresses,
5+
CommentKind,
6+
Comments,
7+
Roles,
8+
Users,
9+
} from '@nestjs-json-api/typeorm-database';
410
import { faker } from '@faker-js/faker';
511
import { getUser } from '../utils/data-utils';
612
import { run, creatSdk } from '../utils/run-application';

apps/json-api-server-e2e/src/json-api/json-api-sdk/check-common-decorator.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { INestApplication } from '@nestjs/common';
22
import { FilterOperand, JsonSdkPromise } from '@klerick/json-api-nestjs-sdk';
33
import { AxiosError } from 'axios';
4-
import { Users } from 'database';
4+
import { Users } from '@nestjs-json-api/typeorm-database';
55

66
import { run, creatSdk } from '../utils/run-application';
77

apps/json-api-server-e2e/src/json-api/json-api-sdk/check-othe-call.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { INestApplication } from '@nestjs/common';
22
import { FilterOperand, JsonSdkPromise } from '@klerick/json-api-nestjs-sdk';
3-
import { BookList, Users } from 'database';
3+
import { BookList, Users } from '@nestjs-json-api/typeorm-database';
44
import { AxiosError } from 'axios';
55
import { faker } from '@faker-js/faker';
66
import { lastValueFrom } from 'rxjs';

apps/json-api-server-e2e/src/json-api/json-api-sdk/get-method.spec.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
import { INestApplication } from '@nestjs/common';
2-
import { Addresses, CommentKind, Comments, Roles, Users } from 'database';
2+
import {
3+
Addresses,
4+
CommentKind,
5+
Comments,
6+
Roles,
7+
Users,
8+
} from '@nestjs-json-api/typeorm-database';
39
import { faker } from '@faker-js/faker';
410

511
import { FilterOperand, JsonSdkPromise } from '@klerick/json-api-nestjs-sdk';

apps/json-api-server-e2e/src/json-api/json-api-sdk/patch-methode.spec.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
import { INestApplication } from '@nestjs/common';
2-
import { Addresses, CommentKind, Comments, Users } from 'database';
2+
import {
3+
Addresses,
4+
CommentKind,
5+
Comments,
6+
Users,
7+
} from '@nestjs-json-api/typeorm-database';
38
import { faker } from '@faker-js/faker';
49
import { JsonSdkPromise } from '@klerick/json-api-nestjs-sdk';
510

apps/json-api-server-e2e/src/json-api/json-api-sdk/post-method.spec.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
import { Addresses, BookList, CommentKind, Comments, Users } from 'database';
1+
import {
2+
Addresses,
3+
BookList,
4+
CommentKind,
5+
Comments,
6+
Users,
7+
} from '@nestjs-json-api/typeorm-database';
28
import { faker } from '@faker-js/faker';
39
import { JsonSdkPromise } from '@klerick/json-api-nestjs-sdk';
410

apps/json-api-server-e2e/src/json-api/utils/data-utils.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Users } from 'database';
1+
import { Users } from '@nestjs-json-api/typeorm-database';
22
import { faker } from '@faker-js/faker';
33

44
export const getUser = () => {

apps/json-api-server/src/app/app.module.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
import { Module } from '@nestjs/common';
22
import { LoggerModule } from 'nestjs-pino';
33

4-
import { DatabaseModule } from 'database';
4+
import { TypeOrmDatabaseModule } from '@nestjs-json-api/typeorm-database';
5+
import { MicroOrmDatabaseModule } from '@nestjs-json-api/microorm-database';
56
import { ResourcesModule } from './resources/resources.module';
67
import { RpcModule } from './rpc/rpc.module';
78
import * as process from 'process';
89

10+
const ormModule =
11+
process.env['ORM_TYPE'] === 'typeorm'
12+
? TypeOrmDatabaseModule
13+
: MicroOrmDatabaseModule;
14+
915
@Module({
1016
imports: [
11-
DatabaseModule,
17+
ormModule,
1218
ResourcesModule,
1319
RpcModule,
1420
LoggerModule.forRoot({
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { Users as tUsers } from '@nestjs-json-api/typeorm-database';
2+
import { Users as mkUsers } from '@nestjs-json-api/microorm-database';
3+
4+
import { BookList as tBookList } from '@nestjs-json-api/typeorm-database';
5+
import { BookList as mkBookList } from '@nestjs-json-api/microorm-database';
6+
7+
const Users = process.env['ORM_TYPE'] === 'typeorm' ? tUsers : mkUsers;
8+
const BookList = process.env['ORM_TYPE'] === 'typeorm' ? tBookList : tBookList;
9+
10+
export { Users, BookList };
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import { ParseUUIDPipe } from '@nestjs/common';
2-
import { BookList } from 'database';
2+
import { BookList } from '../entity-orm';
33
import { JsonApi, JsonBaseController } from '@klerick/json-api-nestjs';
44

5-
@JsonApi(BookList, {
5+
@JsonApi(BookList as typeof BookList, {
66
pipeForId: ParseUUIDPipe,
77
overrideRoute: 'override-book-list',
88
allowMethod: ['getOne', 'postOne', 'deleteOne'],
99
})
10-
export class ExtendBookListController extends JsonBaseController<BookList> {}
10+
export class ExtendBookListController extends JsonBaseController<
11+
typeof BookList
12+
> {}

apps/json-api-server/src/app/resources/controllers/extend-user/extend-user.controller.ts

+14-11
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
UseFilters,
88
UseGuards,
99
} from '@nestjs/common';
10-
import { Users } from 'database';
10+
1111
import {
1212
JsonApi,
1313
JsonBaseController,
@@ -29,41 +29,44 @@ import {
2929
HttpExceptionMethodFilter,
3030
} from '../../service/http-exception.filter';
3131
import { GuardService, EntityName } from '../../service/guard.service';
32+
import { Users } from '../entity-orm';
3233
import { AtomicInterceptor } from '../../service/atomic.interceptor';
3334

3435
@UseGuards(GuardService)
3536
@UseFilters(new HttpExceptionFilter())
3637
@UseInterceptors(ControllerInterceptor)
37-
@JsonApi(Users)
38-
export class ExtendUserController extends JsonBaseController<Users> {
39-
@InjectService() public service: JsonApiService<Users>;
38+
@JsonApi(Users as any)
39+
export class ExtendUserController extends JsonBaseController<typeof Users> {
40+
@InjectService() public service: JsonApiService<typeof Users>;
4041
@Inject(ExampleService) protected exampleService: ExampleService;
4142
getOne(
4243
id: string | number,
43-
query: QueryType<Users>
44-
): Promise<ResourceObject<Users>> {
44+
query: QueryType<typeof Users>
45+
): Promise<ResourceObject<typeof Users>> {
4546
return super.getOne(id, query);
4647
}
4748

48-
patchRelationship<Rel extends EntityRelation<Users>>(
49+
patchRelationship<Rel extends EntityRelation<typeof Users>>(
4950
id: string | number,
5051
relName: Rel,
5152
input: PatchRelationshipData
52-
): Promise<ResourceObjectRelationships<Users, Rel>> {
53+
): Promise<ResourceObjectRelationships<typeof Users, Rel>> {
5354
return super.patchRelationship(id, relName, input);
5455
}
5556

5657
// @UseInterceptors(AtomicInterceptor)
57-
postOne(inputData: PostData<Users>): Promise<ResourceObject<Users>> {
58+
postOne(
59+
inputData: PostData<typeof Users>
60+
): Promise<ResourceObject<typeof Users>> {
5861
return super.postOne(inputData);
5962
}
6063

6164
@EntityName('Users')
6265
@UseFilters(HttpExceptionMethodFilter)
6366
@UseInterceptors(MethodInterceptor)
6467
getAll(
65-
@Query(ExamplePipe) query: QueryType<Users>
66-
): Promise<ResourceObject<Users, 'array'>> {
68+
@Query(ExamplePipe) query: QueryType<typeof Users>
69+
): Promise<ResourceObject<typeof Users, 'array'>> {
6770
return super.getAll(query);
6871
}
6972

Original file line numberDiff line numberDiff line change
@@ -1,23 +1,56 @@
11
import { Module } from '@nestjs/common';
2-
import { JsonApiModule, TypeOrmModule } from '@klerick/json-api-nestjs';
3-
import { Users, Addresses, Comments, Roles, BookList } from 'database';
2+
import {
3+
JsonApiModule,
4+
MicroOrmJsonApiModule,
5+
TypeOrmJsonApiModule,
6+
} from '@klerick/json-api-nestjs';
7+
import {
8+
Users,
9+
Addresses,
10+
Comments,
11+
Roles,
12+
BookList,
13+
} from '@nestjs-json-api/typeorm-database';
14+
15+
import {
16+
Users as mkUsers,
17+
Addresses as mkAddresses,
18+
Comments as mkComments,
19+
Roles as mkRoles,
20+
BookList as mkBookList,
21+
} from '@nestjs-json-api/microorm-database';
22+
423
import { ExtendBookListController } from './controllers/extend-book-list/extend-book-list.controller';
524
import { ExtendUserController } from './controllers/extend-user/extend-user.controller';
625
import { ExampleService } from './service/example.service';
726

27+
const typeOrm = () =>
28+
JsonApiModule.forRoot(TypeOrmJsonApiModule, {
29+
entities: [Users, Addresses, Comments, Roles, BookList],
30+
controllers: [ExtendBookListController, ExtendUserController],
31+
providers: [ExampleService],
32+
options: {
33+
debug: true,
34+
requiredSelectField: false,
35+
operationUrl: 'operation',
36+
},
37+
});
38+
39+
const microOrm = () =>
40+
JsonApiModule.forRoot(MicroOrmJsonApiModule, {
41+
entities: [mkUsers, mkAddresses, mkComments, mkRoles, mkBookList],
42+
controllers: [ExtendBookListController, ExtendUserController],
43+
providers: [ExampleService],
44+
options: {
45+
debug: true,
46+
requiredSelectField: false,
47+
operationUrl: 'operation',
48+
},
49+
});
50+
51+
const ormModule = process.env['ORM_TYPE'] === 'typeorm' ? typeOrm : microOrm;
52+
853
@Module({
9-
imports: [
10-
JsonApiModule.forRoot({
11-
entities: [Users, Addresses, Comments, Roles, BookList],
12-
controllers: [ExtendBookListController, ExtendUserController],
13-
providers: [ExampleService],
14-
type: TypeOrmModule,
15-
options: {
16-
debug: true,
17-
requiredSelectField: false,
18-
operationUrl: 'operation',
19-
},
20-
}),
21-
],
54+
imports: [ormModule()],
2255
})
2356
export class ResourcesModule {}

apps/json-api-server/src/app/resources/service/example.pipe.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
} from '@nestjs/common';
66

77
import { Query } from '@klerick/json-api-nestjs';
8-
import { Users } from 'database';
8+
import { Users } from '@nestjs-json-api/typeorm-database';
99

1010
export class ExamplePipe implements PipeTransform<Query<Users>, Query<Users>> {
1111
transform(value: Query<Users>, metadata: ArgumentMetadata): Query<Users> {

libs/database/README.md

-7
This file was deleted.

libs/database/project.json

-8
This file was deleted.

libs/database/src/index.ts

-2
This file was deleted.

libs/json-api/json-api-nestjs/src/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
export { JsonApiModule } from './lib/json-api.module';
2-
export { TypeOrmModule, MicroOrmModule } from './lib/modules';
2+
export { TypeOrmJsonApiModule, MicroOrmJsonApiModule } from './lib/modules';
33

44
export { JsonApi, InjectService } from './lib/modules/mixin/decorators';
55
export { OrmService as JsonApiService } from './lib/modules/mixin/types';

libs/json-api/json-api-nestjs/src/lib/constants/di.ts

+2
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,5 @@ export const ZOD_POST_RELATIONSHIP_SCHEMA = Symbol(
2626
export const ZOD_PATCH_RELATIONSHIP_SCHEMA = Symbol(
2727
'ZOD_PATCH_RELATIONSHIP_SCHEMA'
2828
);
29+
export const CURRENT_DATA_SOURCE_TOKEN = Symbol('CURRENT_DATA_SOURCE_TOKEN');
30+
export const CURRENT_ENTITY_REPOSITORY = Symbol('CURRENT_ENTITY_REPOSITORY');

libs/json-api/json-api-nestjs/src/lib/json-api.module.ts

+51-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,61 @@
11
import { DynamicModule, Module } from '@nestjs/common';
22
import { DiscoveryModule } from '@nestjs/core';
33

4-
import { AnyEntity, EntityName, ModuleOptions } from './types';
4+
import {
5+
AnyEntity,
6+
EntityName,
7+
TypeOrmDefaultOptions,
8+
TypeOrmOptions,
9+
MicroOrmOptions,
10+
ResultModuleOptions,
11+
} from './types';
512
import { createMixinModule, prepareConfig, createAtomicModule } from './utils';
13+
import type { TypeOrmJsonApiModule, MicroOrmJsonApiModule } from './modules';
614

715
@Module({})
816
export class JsonApiModule {
9-
public static forRoot(options: ModuleOptions): DynamicModule {
10-
const resultOption = prepareConfig(options);
17+
public static forRoot(
18+
module: typeof TypeOrmJsonApiModule,
19+
options: TypeOrmOptions
20+
): DynamicModule;
21+
public static forRoot(
22+
module: typeof MicroOrmJsonApiModule,
23+
options: MicroOrmOptions
24+
): DynamicModule;
25+
/**
26+
* @deprecated This type of method is deprecated and may be removed in future versions.
27+
* Consider using newer alternatives or updated patterns for module registration.
28+
*/
29+
public static forRoot(options: TypeOrmDefaultOptions): DynamicModule;
30+
public static forRoot(
31+
first:
32+
| typeof TypeOrmJsonApiModule
33+
| typeof MicroOrmJsonApiModule
34+
| TypeOrmDefaultOptions,
35+
second?: TypeOrmOptions | MicroOrmOptions
36+
): DynamicModule {
37+
let resultOption: ResultModuleOptions = {} as any;
38+
39+
if (second) {
40+
const module = first as
41+
| typeof TypeOrmJsonApiModule
42+
| typeof MicroOrmJsonApiModule;
43+
resultOption = {
44+
...prepareConfig(second, module.module),
45+
type: module,
46+
} as ResultModuleOptions;
47+
} else {
48+
const {
49+
TypeOrmJsonApiModule,
50+
} = require('./modules/type-orm/type-orm-json-api.module');
51+
resultOption = {
52+
...prepareConfig(
53+
first as TypeOrmDefaultOptions,
54+
TypeOrmJsonApiModule.module
55+
),
56+
type: TypeOrmJsonApiModule as typeof TypeOrmJsonApiModule,
57+
} as any;
58+
}
1159

1260
resultOption.imports.unshift(DiscoveryModule);
1361

0 commit comments

Comments
 (0)