Skip to content

camelCase model properties in AdonisJS

Serializing AdonisJS models to camelCase globally

Create a naming strategy:

TypeScript
strategies/CamelCaseNamingStrategy.ts
import {string} from '@ioc:Adonis/Core/Helpers';
import {BaseModel, SnakeCaseNamingStrategy} from '@ioc:Adonis/Lucid/Orm';
 
export default class CamelCaseNamingStrategy extends SnakeCaseNamingStrategy {
  serializedName(_model: typeof BaseModel, propertyName: string) {
    return string.camelCase(propertyName);
  }
}

Extend Model and set the naming strategy:

TypeScript
AppBaseModel.ts
import {BaseModel} from '@ioc:Adonis/Lucid/Orm';
 
import CamelCaseNamingStrategy from './strategies/CamelCaseNamingStrategy';
 
export default class AppBaseModel extends BaseModel {
  static namingStrategy = new CamelCaseNamingStrategy();
}

Use in in every model:

TypeScript
models/MembershipInvitation.ts
import ORM from '@ioc:Adonis/Lucid/Orm';
import {DateTime} from 'luxon';
import {v4 as uuidv4} from 'uuid';
 
import {InviteStatus} from '@/app/constants/InviteStatus';
import AppBaseModel from '@/app/modules/common/AppBaseModel';
 
import Org from '../../org/models/Org';
 
export default class MembershipInvitation extends AppBaseModel {
  static selfAssignPrimaryKey = true;
 
  @ORM.column({isPrimary: true})
  id: string;
 
  @ORM.column()
  email: string;
 
  @ORM.column()
  orgId: string;
 
  @ORM.column()
  status: InviteStatus;
 
  @ORM.column()
  role: string;
 
  @ORM.column.dateTime({autoCreate: true})
  createdAt: DateTime;
 
  @ORM.column.dateTime({autoCreate: true, autoUpdate: true})
  updatedAt: DateTime;
 
  @ORM.belongsTo(() => Org)
  org: ORM.BelongsTo<typeof Org>;
 
  @ORM.beforeCreate()
  static assignToken(membershipInvitation: MembershipInvitation) {
    membershipInvitation.id = uuidv4();
  }
}
 
export type MembershipInvitationType =
  ORM.ModelAttributes<MembershipInvitation>;