import { column, BaseModel, SnakeCaseNamingStrategy, manyToMany, ManyToMany, belongsTo, BelongsTo, hasMany, HasMany, } from '@ioc:Adonis/Lucid/Orm'; import { DateTime } from 'luxon'; import Person from './Person'; import User from './User'; import Title from './Title'; import Description from './Description'; import License from './License'; import Subject from './Subject'; export default class Dataset extends BaseModel { public static namingStrategy = new SnakeCaseNamingStrategy(); public static primaryKey = 'id'; public static table = 'documents'; public static selfAssignPrimaryKey = false; @column({ isPrimary: true }) public id: number; @column({}) public server_state: boolean; @column({}) public publisherName: string; @column({ columnName: 'creating_corporation' }) public creatingCorporation: string; @column.dateTime({ columnName: 'embargo_date' }) public embargoDate: DateTime; @column({}) public type: string; @column({}) public language: string; @column({}) public account_id: number | null = null; @column.dateTime({ columnName: 'server_date_published' }) public serverDatePublished: DateTime; @column.dateTime({ autoCreate: true, columnName: 'created_at' }) public createdAt: DateTime; @column.dateTime({ autoCreate: true, autoUpdate: true, columnName: 'server_date_modified' }) public updatedAt: DateTime; @manyToMany(() => Person, { pivotForeignKey: 'document_id', pivotRelatedForeignKey: 'person_id', pivotTable: 'link_documents_persons', pivotColumns: ['role', 'sort_order', 'allow_email_contact'], }) public persons: ManyToMany; /** * Get the account that the dataset belongs to */ @belongsTo(() => User, { foreignKey: 'account_id', }) public user: BelongsTo; @hasMany(() => Title, { foreignKey: 'document_id', }) public titles: HasMany; @hasMany(() => Description, { foreignKey: 'document_id', }) public descriptions: HasMany; @manyToMany(() => License, { pivotForeignKey: 'document_id', pivotRelatedForeignKey: 'licence_id', pivotTable: 'link_documents_licences', }) public licenses: ManyToMany; // public function subjects() // { // return $this->belongsToMany(\App\Models\Subject::class, 'link_dataset_subjects', 'document_id', 'subject_id'); // } @manyToMany(() => Subject, { pivotForeignKey: 'document_id', pivotRelatedForeignKey: 'subject_id', pivotTable: 'link_dataset_subjects', }) public subjects: ManyToMany; // async save(): Promise { // // Call the parent save method to persist changes to the database // await super.save(); // return this; // } }