@klerick/json-api-nestjs-microorm
v0.1.0-beta.21
Published
MicroOrm adapter for JsonApi Plugin for NestJs
Maintainers
Readme
json-api-nestjs-microorm
MocroOrm adapter for json-api-nestjs
Installation
$ npm install @klerick/json-api-nestjs-microormConfiguration params
The following interface is using for the configuration:
export type MicroOrmParam = {
arrayType?: string[]; //Custom type for indicate of array
};NOTE: MikroORM Default Named Context Issue in NestJS
@mikro-orm/nestjs does not create a default named context.
As a result, the module initialization behaves differently depending on whether a single or multiple connections are used. More specifically, the dependency injection token for MikroORM differs between one and multiple database connections.
To maintain a consistent JSON:API module configuration across different database adapters, I decided not to add extra conditional checks in the setup.
For everything to work correctly, @mikro-orm/nestjs should be integrated using the following module: 👉 MicroORM Database Module.
import ormConfig from './config';
// need set contextName and registerRequestContext
export const config: Options = {
contextName: 'default',
registerRequestContext: false,
...ormConfig,
};
@Module({
imports: [MikroOrmModule.forRoot(config), MikroOrmModule.forMiddleware()],
exports: [MikroOrmCoreModule],
})
export class MicroOrmDatabaseModule {}Resource Linkage for To-One Relations
To enable automatic resource linkage (data field in relationships) for to-one relations, add a virtual FK field with persist: false.
Important: The FK field name must follow the pattern: {relationName} + Id (e.g., relation createdBy → FK field createdById).
Example:
import {
Entity,
PrimaryKey,
Property,
ManyToOne,
Ref,
Opt,
} from '@mikro-orm/core';
@Entity({ tableName: 'comments' })
export class Comments {
@PrimaryKey()
public id!: number;
@ManyToOne(() => Users)
public user!: Ref<Users>;
// Virtual FK field for resource linkage
// Must have persist: false and name pattern: {relation}Id
@Property({ persist: false })
public userId!: number & Opt;
}The library automatically detects FK fields based on:
- The naming convention (
{relationName}Id) - The
persist: falseoption (marks it as a virtual/computed field)
This FK value will be used to populate relationships.{relation}.data in API responses.
