// app/models/activity.ts import { DateTime } from 'luxon'; import { belongsTo, column } from '@adonisjs/lucid/orm'; import BaseModel from './base_model.js'; import type { BelongsTo } from '@adonisjs/lucid/types/relations'; import User from '#models/user'; import { SnakeCaseNamingStrategy } from '@adonisjs/lucid/orm'; export default class Activity extends BaseModel { public static namingStrategy = new SnakeCaseNamingStrategy(); public static primaryKey = 'id'; public static table = 'activities'; @column({ isPrimary: true }) declare id: number; @column() declare type: string; @column() declare userId: number | null; @column() declare subjectType: string | null; @column() declare subjectId: number | null; @column() declare description: string; // Manual JSON (de)serialization keeps this working on SQLite/MySQL. // On Postgres json/jsonb the driver already parses — drop the `consume` // JSON.parse there to avoid double-handling. // @column({ // prepare: (value: Record | null) => (value ? JSON.stringify(value) : null), // consume: (value: string | null) => (value ? JSON.parse(value) : null), // }) // declare properties: Record | null; @column() declare properties: Record | null; @column.dateTime({ autoCreate: true }) declare createdAt: DateTime; @column.dateTime({ autoCreate: true, autoUpdate: true }) declare updatedAt: DateTime; // @belongsTo(() => User) // declare user: BelongsTo; @belongsTo(() => User, { foreignKey: 'userId', }) declare user: BelongsTo; }