Skip to content

Try to adopt for MicroOrm #98

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 27 commits into from
Feb 12, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
7856814
refactor(json-api-nestjs): Remove old files
klerick Jan 22, 2025
f22bf49
refactor(json-api-nestjs): Deep refactoring
klerick Jan 22, 2025
3e828a5
refactor(json-api-nestjs-sdk): Rename npm package and fox data
klerick Jan 22, 2025
ccb835d
refactor(json-api-nestjs): Rename npm package and fox data
klerick Jan 22, 2025
77c7d03
chore: Change README.md
klerick Jan 22, 2025
84f69ab
refactor(json-api-nestjs): Remove old files
klerick Jan 22, 2025
792bf2c
refactor(json-api-nestjs): Deep refactoring
klerick Jan 22, 2025
750f685
refactor(json-api-nestjs-sdk): Rename npm package and fox data
klerick Jan 22, 2025
8935ade
refactor(json-api-nestjs): Rename npm package and fox data
klerick Jan 22, 2025
ab025bf
chore: Change README.md
klerick Jan 22, 2025
0bbe933
Merge remote-tracking branch 'origin/nestjs-json-api-97' into nestjs-…
klerick Jan 22, 2025
f41fe6a
test(json-api-nestjs-sdk): Fix tests
klerick Jan 22, 2025
30b3988
refactor(json-api-nestjs): some refactoring swagger generator
klerick Jan 22, 2025
1ae2585
refactor(json-api-nestjs): add method for validate from microorm
klerick Jan 25, 2025
8cd7955
refactor(json-api-nestjs): add method for validate from microorm
klerick Jan 25, 2025
18f4a0c
feat(json-api-nestjs): Microro orm
klerick Feb 10, 2025
4696f51
feat(json-api-nestjs): Microro orm
klerick Feb 10, 2025
0a66259
test(json-api-nestjs): Fixe e2e test
klerick Feb 11, 2025
19df570
ci: exlude database from ci
klerick Feb 11, 2025
5d59365
test: debug test
klerick Feb 11, 2025
57b6457
test: debug test
klerick Feb 11, 2025
69acaa8
refactor(json-api-nestjs): move to project
klerick Feb 11, 2025
cbd1e71
refactor(json-api-nestjs-sdk): move to project
klerick Feb 11, 2025
bb8a415
refactor(json-api-nestjs): change npm package should be in next version
klerick Feb 11, 2025
0b7b4cc
refactor(json-api-nestjs): create modules for each orm
klerick Feb 12, 2025
e492cd1
fix(json-api-nestjs): Fix circular type for query obkect
klerick Feb 12, 2025
c2e9d1d
docs(json-api-nestjs): Add describe
klerick Feb 12, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .e2e-micro.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
DB_LOGGING=0
ORM_TYPE=microorm
1 change: 1 addition & 0 deletions .e2e.env
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
DB_LOGGING=0
ORM_TYPE=typeorm
7 changes: 6 additions & 1 deletion .env
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ DB_LOGGING=1

DB_USERNAME="postgres"
DB_PASSWORD="postgres"
DB_NAME="json-api-db"
#DB_NAME="json-api-db"
DB_NAME="postgres"
DB_PORT=5432
DB_TYPE=postgres

Expand All @@ -12,3 +13,7 @@ DB_TYPE=postgres
#DB_NAME="example_new"
#DB_PORT=3306
#DB_TYPE=mysql


ORM_TYPE=microorm
#ORM_TYPE=typeorm
5 changes: 3 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@ jobs:
- name: Test
env:
NX_REJECT_UNKNOWN_LOCAL_CACHE: 0
run: npx nx affected -t test --parallel=3 --exclude='json-api-front,json-api-server,json-api-server-e2e,json-shared-type,database,@nestjs-json-api/source,type-for-rpc'
run: npx nx affected -t test --parallel=3 --exclude='json-api-front,json-api-server,json-api-server-e2e,json-shared-type,microorm-database,typeorm-database,@nestjs-json-api/source,type-for-rpc'
- name: Build
env:
NX_REJECT_UNKNOWN_LOCAL_CACHE: 0
run: npx nx affected -t build --exclude='json-api-front,json-api-server,json-api-server-e2e,json-shared-type,database,@nestjs-json-api/source,type-for-rpc'
run: npx nx affected -t build --exclude='json-api-front,json-api-server,json-api-server-e2e,json-shared-type,microorm-database,typeorm-database,@nestjs-json-api/source,type-for-rpc'
- name: Save cached .nx
id: cache-dependencies-save
uses: actions/cache/save@v4
Expand Down Expand Up @@ -85,6 +85,7 @@ jobs:
- run: npm run typeorm migration:run
- run: npm run seed:run
- run: npx nx affected -t e2e --parallel=1
- run: npx nx affected -t e2e-micro --parallel=1
- name: Save cached .nx
id: cache-dependencies-save
uses: actions/cache/save@v4
Expand Down
2 changes: 2 additions & 0 deletions .test.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
NODE_OPTIONS=--experimental-vm-modules --disable-warning=ExperimentalWarning
DB_LOGGING=0
28 changes: 28 additions & 0 deletions .verdaccio/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# path to a directory with all packages
storage: ../tmp/local-registry/storage

# a list of other known repositories we can talk to
uplinks:
npmjs:
url: https://registry.npmjs.org/
maxage: 60m

packages:
'**':
# give all users (including non-authenticated users) full access
# because it is a local registry
access: $all
publish: $all
unpublish: $all

# if package is not available locally, proxy requests to npm registry
proxy: npmjs

# log settings
log:
type: stdout
format: pretty
level: warn

publish:
allow_offline: true # set offline to true to allow publish offline
27 changes: 17 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,24 @@
<p align="center">
Json API plugins for
<a href="http://nestjs.com/" target="blank">NestJS</a>
framework
<a href="http://nestjs.com/" target="blank">NestJS</a> JSON API & JSON RPC Suite
</p>

<p>
Tools to implement JSON API, such as, end point, query params, body params, validation and transformation response.
This monorepo contains a set of several libraries designed to simplify the development of server and client applications using NestJS. These tools help you work with two popular protocols:
</p>

- *[json-api-nestjs](https://github.com/klerick/nestjs-json-api/tree/master/libs/json-api/json-api-nestjs)* - plugin for create CRUD overs JSON API
- *[json-api-nestjs-sdk](https://github.com/klerick/nestjs-json-api/tree/master/libs/json-api/json-api-nestjs-sdk)* - tool for client, call api over *json-api-nestjs*
- *[nestjs-json-rpc](https://github.com/klerick/nestjs-json-api/tree/master/libs/json-rpc/nestjs-json-rpc)* - plugin for create RPC server using [JSON-RPC](https://www.jsonrpc.org/)
- *[nestjs-json-rpc-sdk](https://github.com/klerick/nestjs-json-api/tree/master/libs/json-rpc/nestjs-json-rpc-sdk)* - tool for client, call RPC server *nestjs-json-rpc*
- *json-api-nestjs-acl* - tool for acl over *json-api-nestjs*(coming soon...)

- **[JSON:API](https://jsonapi.org/)** – A specification for building RESTful APIs with standardized request and response formats.

> **[json-api-nestjs](https://github.com/klerick/nestjs-json-api/tree/master/libs/json-api/json-api-nestjs)** - This package enables you to quickly set up a server API that adheres to the JSON:API specification, handling standard CRUD operations for your resources.</br>
> **[json-api-nestjs-sdk](https://github.com/klerick/nestjs-json-api/tree/master/libs/json-api/json-api-nestjs-sdk)** - tool for client, call api over *json-api-nestjs*


- **[JSON-RPC](https://www.jsonrpc.org/)** – A protocol for remote procedure calls using JSON.

> **[nestjs-json-rpc](https://github.com/klerick/nestjs-json-api/tree/master/libs/json-rpc/nestjs-json-rpc)** - Use this package to implement remote procedure call (RPC) functionality in your NestJS applications, enabling efficient inter-service communication.</br>
> **[nestjs-json-rpc-sdk](https://github.com/klerick/nestjs-json-api/tree/master/libs/json-rpc/nestjs-json-rpc-sdk)** - This tool offers a straightforward way to call remote procedures from your client-side code, ensuring smooth communication with your JSON-RPC server.

- **ACL tools** - tool for acl over *json-api-nestjs*(coming soon...)
## Installation

```bash
Expand All @@ -24,7 +31,7 @@ $ npm run seed:run

```bash
# dev server
$ npm run demo:json-api
$ nx run json-api-server:serve:development

```
## License
Expand Down
11 changes: 11 additions & 0 deletions apps/json-api-server-e2e/project.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,17 @@
"passWithNoTests": true,
"parallel": 1
}
},
"e2e-micro": {
"executor": "@nx/jest:jest",
"outputs": [
"{workspaceRoot}/coverage/{e2eProjectRoot}"
],
"options": {
"jestConfig": "apps/json-api-server-e2e/jest.config.ts",
"passWithNoTests": true,
"parallel": 1
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
import { INestApplication } from '@nestjs/common';
import { FilterOperand, JsonSdkPromise } from 'json-api-nestjs-sdk';
import { Addresses, CommentKind, Comments, Roles, Users } from 'database';
import { FilterOperand, JsonSdkPromise } from '@klerick/json-api-nestjs-sdk';
import {
Addresses,
CommentKind,
Comments,
Roles,
Users,
} from '@nestjs-json-api/typeorm-database';
import { faker } from '@faker-js/faker';
import { getUser } from '../utils/data-utils';
import { run, creatSdk } from '../utils/run-application';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { INestApplication } from '@nestjs/common';
import { FilterOperand, JsonSdkPromise } from 'json-api-nestjs-sdk';
import { FilterOperand, JsonSdkPromise } from '@klerick/json-api-nestjs-sdk';
import { AxiosError } from 'axios';
import { Users } from 'database';
import { Users } from '@nestjs-json-api/typeorm-database';

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

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { INestApplication } from '@nestjs/common';
import { FilterOperand, JsonSdkPromise } from 'json-api-nestjs-sdk';
import { BookList, Users } from 'database';
import { FilterOperand, JsonSdkPromise } from '@klerick/json-api-nestjs-sdk';
import { BookList, Users } from '@nestjs-json-api/typeorm-database';
import { AxiosError } from 'axios';
import { faker } from '@faker-js/faker';
import { lastValueFrom } from 'rxjs';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
import { INestApplication } from '@nestjs/common';
import { Addresses, CommentKind, Comments, Roles, Users } from 'database';
import {
Addresses,
CommentKind,
Comments,
Roles,
Users,
} from '@nestjs-json-api/typeorm-database';
import { faker } from '@faker-js/faker';

import { FilterOperand, JsonSdkPromise } from 'json-api-nestjs-sdk';
import { FilterOperand, JsonSdkPromise } from '@klerick/json-api-nestjs-sdk';
import { getUser } from '../utils/data-utils';
import { creatSdk, run } from '../utils/run-application';
import { AxiosError } from 'axios';

let app: INestApplication;

Expand Down Expand Up @@ -91,10 +96,10 @@ describe('GET method:', () => {
return Promise.all(tmp);
})
);
await Promise.all(addressArray);

await Promise.all(
[...usersArray, ...commentsArray, ...rolesArray].map((i) =>
jsonSdk.jonApiSdkService.deleteOne(i)
[...usersArray, ...commentsArray, ...rolesArray, ...addressArray].map(
(i) => jsonSdk.jonApiSdkService.deleteOne(i)
)
);
});
Expand Down Expand Up @@ -334,6 +339,7 @@ describe('GET method:', () => {
userItem.id,
{ include: ['addresses'] }
);

expect(result).toBe(`${resultGetOne.addresses.id}`);
});

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
import { INestApplication } from '@nestjs/common';
import { Addresses, CommentKind, Comments, Users } from 'database';
import {
Addresses,
CommentKind,
Comments,
Users,
} from '@nestjs-json-api/typeorm-database';
import { faker } from '@faker-js/faker';
import { JsonSdkPromise } from 'json-api-nestjs-sdk';
import { JsonSdkPromise } from '@klerick/json-api-nestjs-sdk';

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

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
import { Addresses, BookList, CommentKind, Comments, Users } from 'database';
import {
Addresses,
BookList,
CommentKind,
Comments,
Users,
} from '@nestjs-json-api/typeorm-database';
import { faker } from '@faker-js/faker';
import { JsonSdkPromise } from 'json-api-nestjs-sdk';
import { JsonSdkPromise } from '@klerick/json-api-nestjs-sdk';

import { creatSdk, run } from '../utils/run-application';
import { INestApplication } from '@nestjs/common';
Expand Down
2 changes: 1 addition & 1 deletion apps/json-api-server-e2e/src/json-api/utils/data-utils.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Users } from 'database';
import { Users } from '@nestjs-json-api/typeorm-database';
import { faker } from '@faker-js/faker';

export const getUser = () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Test } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import { adapterForAxios, JsonApiJs } from 'json-api-nestjs-sdk';
import { adapterForAxios, JsonApiJs } from '@klerick/json-api-nestjs-sdk';
import {
RpcFactory,
axiosTransportFactory,
Expand Down
20 changes: 16 additions & 4 deletions apps/json-api-server/src/app/app.module.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,27 @@
import { Module } from '@nestjs/common';
import { LoggerModule } from 'nestjs-pino';

import { DatabaseModule } from 'database';
import { ResourcesModule } from './resources/resources.module';
import { TypeOrmDatabaseModule } from '@nestjs-json-api/typeorm-database';
import { MicroOrmDatabaseModule } from '@nestjs-json-api/microorm-database';
import { ResourcesTypeModule } from './resources/type-orm/resources-type.module';
import { ResourcesMicroModule } from './resources/micro-orm/resources-micro.module';
import { RpcModule } from './rpc/rpc.module';
import * as process from 'process';

const ormModule =
process.env['ORM_TYPE'] === 'typeorm'
? TypeOrmDatabaseModule
: MicroOrmDatabaseModule;

const resourceModule =
process.env['ORM_TYPE'] === 'typeorm'
? ResourcesTypeModule
: ResourcesMicroModule;

@Module({
imports: [
DatabaseModule,
ResourcesModule,
ormModule,
resourceModule,
RpcModule,
LoggerModule.forRoot({
pinoHttp: {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { ParseUUIDPipe } from '@nestjs/common';
import { JsonApi, JsonBaseController } from '@klerick/json-api-nestjs';

import { BookList } from '@nestjs-json-api/microorm-database';
@JsonApi(BookList, {
pipeForId: ParseUUIDPipe,
overrideRoute: 'override-book-list',
allowMethod: ['getOne', 'postOne', 'deleteOne'],
})
export class ExtendBookListController extends JsonBaseController<BookList> {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import {
Get,
Param,
Inject,
Query,
UseInterceptors,
UseFilters,
UseGuards,
} from '@nestjs/common';

import {
JsonApi,
JsonBaseController,
InjectService,
JsonApiService,
Query as QueryType,
QueryOne,
ResourceObject,
EntityRelation,
PatchRelationshipData,
ResourceObjectRelationships,
PostData,
} from '@klerick/json-api-nestjs';
import { ExamplePipe } from '../../service/example.pipe';
import { ExampleService } from '../../service/example.service';
import { ControllerInterceptor } from '../../service/controller.interceptor';
import { MethodInterceptor } from '../../service/method.interceptor';
import {
HttpExceptionFilter,
HttpExceptionMethodFilter,
} from '../../service/http-exception.filter';
import { GuardService, EntityName } from '../../service/guard.service';

import { Users } from '@nestjs-json-api/microorm-database';
import { AtomicInterceptor } from '../../service/atomic.interceptor';

@UseGuards(GuardService)
@UseFilters(new HttpExceptionFilter())
@UseInterceptors(ControllerInterceptor)
@JsonApi(Users)
export class ExtendUserController extends JsonBaseController<Users> {
@InjectService() public service: JsonApiService<Users>;
@Inject(ExampleService) protected exampleService: ExampleService;
override getOne(
id: string | number,
query: QueryOne<Users>
): Promise<ResourceObject<Users>> {
const t = query.fields?.target;

return super.getOne(id, query);
}

patchRelationship<Rel extends EntityRelation<Users>>(
id: string | number,
relName: Rel,
input: PatchRelationshipData
): Promise<ResourceObjectRelationships<Users, Rel>> {
return super.patchRelationship(id, relName, input);
}

// @UseInterceptors(AtomicInterceptor)
postOne(inputData: PostData<Users>): Promise<ResourceObject<Users>> {
return super.postOne(inputData);
}

@EntityName('Users')
@UseFilters(HttpExceptionMethodFilter)
@UseInterceptors(MethodInterceptor)
getAll(
@Query(ExamplePipe) query: QueryType<Users>
): Promise<ResourceObject<Users, 'array'>> {
return super.getAll(query);
}

@Get(':id/example')
testOne(@Param('id') id: string): string {
return this.exampleService.testMethode(id);
}
}
Loading
Loading