import { type CreationOptional, DataTypes, InferAttributes, InferCreationAttributes, sql } from "@sequelize/core" import { Attribute, AutoIncrement, Default, Index, NotNull, PrimaryKey } from "@sequelize/core/decorators-legacy" import { isNil } from "lodash" import BaseModel from "@/models/base-model" export class BlogPost extends BaseModel, InferCreationAttributes> { @Attribute(DataTypes.INTEGER) @PrimaryKey @AutoIncrement declare id: CreationOptional @Attribute(DataTypes.INTEGER) @NotNull declare creatorId: number @Attribute(DataTypes.STRING(255)) @NotNull declare title: string @Attribute(DataTypes.STRING(255)) @NotNull @Index({ unique: true }) declare slug: string @Attribute(DataTypes.TEXT) @NotNull declare content: string @Attribute({ type: DataTypes.STRING(1024), get() { const tags = this.getDataValue("tags") if (isNil(tags) || tags === "") { return [] } return tags.split(",") }, set(value: string[]) { this.setDataValue("tags", value.join(",")) }, }) @NotNull @Default("") declare tags: CreationOptional @Attribute(DataTypes.DATE(0)) declare publishedAt: Date | null @Attribute(DataTypes.DATE(0)) @NotNull @Default(sql.literal("CURRENT_TIMESTAMP")) declare createdAt: CreationOptional @Attribute(DataTypes.DATE(0)) @NotNull @Default(sql.literal("CURRENT_TIMESTAMP")) declare updatedAt: CreationOptional @Attribute(DataTypes.DATE(0)) declare deletedAt: Date | null // Scopes static establishScopes(): void { this.addSearchScope(["title", "content"]) } } export default BlogPost