import { column, relation } from "@alpha.consultings/eloquent-orm.js";
import { SqlModel, type ModelInstance } from "@alpha.consultings/eloquent-orm.js/Model";
type UserAttrs = {
id?: number;
name?: string;
email?: string;
};
type PostAttrs = {
id?: number;
title?: string;
user_id?: number;
};
export class User extends SqlModel<UserAttrs> {
static tableName = "users";
static connectionName = process.env.DB_CONNECTION ?? "sqlite";
static morphAlias = "users";
static schema = {
id: column("increments", undefined, { primary: true }),
name: column("string", 255),
email: column("string", 255),
posts: relation("hasMany", "Post", { foreignKey: "user_id" }),
favorites: relation("belongsToMany", "Post", {
pivotTable: "user_favorites",
pivotLocalKey: "user_id",
pivotForeignKey: "post_id",
}),
};
constructor() {
super("users", process.env.DB_CONNECTION ?? "sqlite");
}
posts() {
return this.hasMany(Post as any, "user_id");
}
}
export interface User extends ModelInstance<UserAttrs> {}
export class Post extends SqlModel<PostAttrs> {
static tableName = "posts";
static connectionName = process.env.DB_CONNECTION ?? "sqlite";
static schema = {
id: column("increments", undefined, { primary: true }),
title: column("string", 255),
user_id: column("int"),
author: relation("belongsTo", "User", { foreignKey: "user_id" }),
};
constructor() {
super("posts", process.env.DB_CONNECTION ?? "sqlite");
}
author() {
return this.belongsTo(User as any, "user_id");
}
}