import { Model, ModelOptions, QueryContext } from 'objection'; export class BaseModel extends Model { /** * Use a minimal column mapper: keep property names as-is, but handle * timestamp fields that are stored as created_at/updated_at in the DB. */ static columnNameMappers = { parse(dbRow: Record) { const mapped: Record = {}; for (const [key, value] of Object.entries(dbRow || {})) { if (key === 'created_at') { mapped.createdAt = value; } else if (key === 'updated_at') { mapped.updatedAt = value; } else { mapped[key] = value; } } return mapped; }, format(model: Record) { const mapped: Record = {}; for (const [key, value] of Object.entries(model || {})) { if (key === 'createdAt') { mapped.created_at = value; } else if (key === 'updatedAt') { mapped.updated_at = value; } else { mapped[key] = value; } } return mapped; }, }; id: string; createdAt: Date; updatedAt: Date; $beforeInsert(queryContext: QueryContext) { this.createdAt = new Date(); this.updatedAt = new Date(); } $beforeUpdate(opt: ModelOptions, queryContext: QueryContext) { this.updatedAt = new Date(); } }