import { column, BaseModel, SnakeCaseNamingStrategy, manyToMany, ManyToMany, beforeCreate, beforeUpdate } from '@ioc:Adonis/Lucid/Orm'; import { DateTime } from 'luxon'; import dayjs from 'dayjs'; import Dataset from './Dataset'; export default class Subject extends BaseModel { public static namingStrategy = new SnakeCaseNamingStrategy(); public static table = 'dataset_subjects'; public static selfAssignPrimaryKey = false; @column({ isPrimary: true, }) public id: number; @column({}) public language: string; @column({}) public type: string; @column({}) public value: string; @column({}) public external_key: string; @column.dateTime({ serialize: (value: Date | null) => { return value ? dayjs(value).format('MMMM D YYYY HH:mm a') : value; }, autoCreate: true, }) public created_at: DateTime; @column.dateTime({ serialize: (value: Date | null) => { return value ? dayjs(value).format('MMMM D YYYY HH:mm a') : value; }, autoCreate: true, autoUpdate: true, }) public updated_at: DateTime; @beforeCreate() @beforeUpdate() public static async resetDate(role) { role.created_at = this.formatDateTime(role.created_at); role.updated_at = this.formatDateTime(role.updated_at); } private static formatDateTime(datetime) { let value = new Date(datetime); return datetime ? value.getFullYear() + '-' + (value.getMonth() + 1) + '-' + value.getDate() + ' ' + value.getHours() + ':' + value.getMinutes() + ':' + value.getSeconds() : datetime; } @manyToMany(() => Dataset, { pivotForeignKey: 'subject_id', pivotRelatedForeignKey: 'document_id', pivotTable: 'link_dataset_subjects', }) public datasets: ManyToMany; }