Files
calebburke.dev/api/src/models/blog-post.ts
T
2026-07-17 04:39:18 -07:00

70 lines
1.7 KiB
TypeScript

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<InferAttributes<BlogPost>, InferCreationAttributes<BlogPost>> {
@Attribute(DataTypes.INTEGER)
@PrimaryKey
@AutoIncrement
declare id: CreationOptional<number>
@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<string[]>
@Attribute(DataTypes.DATE(0))
declare publishedAt: Date | null
@Attribute(DataTypes.DATE(0))
@NotNull
@Default(sql.literal("CURRENT_TIMESTAMP"))
declare createdAt: CreationOptional<Date>
@Attribute(DataTypes.DATE(0))
@NotNull
@Default(sql.literal("CURRENT_TIMESTAMP"))
declare updatedAt: CreationOptional<Date>
@Attribute(DataTypes.DATE(0))
declare deletedAt: Date | null
// Scopes
static establishScopes(): void {
this.addSearchScope(["title", "content"])
}
}
export default BlogPost