jormungandr-bite/packages/backend/src/models/entities/bite.ts
2024-04-29 07:55:26 -07:00

56 lines
1.1 KiB
TypeScript

import { Check, Column, Entity, ManyToOne, PrimaryColumn } from "typeorm";
import { id } from "../id.js";
import { User } from "./user.js";
@Entity()
@Check(`"targetUserId" IS NOT NULL OR "targetBiteId" IS NOT NULL`)
export class Bite {
@PrimaryColumn(id())
public id: string;
@Column("timestamp with time zone")
public createdAt: Date;
@Column("varchar", {
length: 512,
nullable: true,
comment: "null if local",
})
public uri: string | null;
@Column(id())
public userId: string;
@ManyToOne(() => User, {
onDelete: "CASCADE",
})
public user: User;
@Column("enum", {
enum: ["user", "bite"],
})
public targetType: "user" | "bite";
@Column({ ...id(), nullable: true })
public targetUserId: string | null;
@ManyToOne(() => User, {
onDelete: "CASCADE",
nullable: true,
})
public targetUser: User | null;
@Column({ ...id(), nullable: true })
public targetBiteId: string | null;
@ManyToOne(() => Bite, {
onDelete: "CASCADE",
nullable: true,
})
public targetBite: Bite | null;
@Column("boolean", {
default: true,
})
public replied: boolean;
}