function _ts_decorate(decorators, target, key, desc) {
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
    else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
    return c > 3 && r && Object.defineProperty(target, key, r), r;
}
function _ts_metadata(k, v) {
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
}
import { Entity, Index, JoinColumn, ManyToOne, Column, PrimaryColumn } from "typeorm";
import { User } from "./user.js";
import { id } from "../id.js";
import { Note } from "./note.js";
import { FollowRequest } from "./follow-request.js";
import { UserGroupInvitation } from "./user-group-invitation.js";
import { AccessToken } from "./access-token.js";
import { notificationTypes } from "../../types.js";
import { Bite } from "./bite.js";
export let Notification = class Notification {
    id;
    createdAt;
    /**
	 * Notification Recipient ID
	 */ notifieeId;
    notifiee;
    /**
	 * Notification sender (initiator)
	 */ notifierId;
    notifier;
    /**
	 * Notification types:
	 * follow - Follow request
	 * mention - User was referenced in a post.
	 * reply - A post that a user made (or was watching) has been replied to.
	 * renote - A post that a user made (or was watching) has been renoted.
	 * quote - A post that a user made (or was watching) has been quoted and renoted.
	 * reaction - (自分または自分がWatchしている)投稿にリアクションされた
	 * pollVote - (自分または自分がWatchしている)投稿のアンケートに投票された
	 * pollEnded - 自分のアンケートもしくは自分が投票したアンケートが終了した
	 * receiveFollowRequest - フォローリクエストされた
	 * followRequestAccepted - A follow request has been accepted.
	 * groupInvited - グループに招待された
	 * app - App notifications.
	 */ type;
    /**
	 * Whether the notification was read.
	 */ isRead;
    noteId;
    note;
    followRequestId;
    followRequest;
    userGroupInvitationId;
    userGroupInvitation;
    reaction;
    choice;
    /**
	 * App notification body
	 */ customBody;
    /**
	 * App notification header
	 * (If omitted, it is expected to be displayed with the app name)
	 */ customHeader;
    /**
	 * App notification icon (URL)
	 * (If omitted, it is expected to be displayed as an app icon)
	 */ customIcon;
    /**
	 * App notification app (token for)
	 */ appAccessTokenId;
    appAccessToken;
    biteId;
    bite;
};
_ts_decorate([
    PrimaryColumn(id()),
    _ts_metadata("design:type", String)
], Notification.prototype, "id", void 0);
_ts_decorate([
    Index(),
    Column("timestamp with time zone", {
        comment: "The created date of the Notification."
    }),
    _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
], Notification.prototype, "createdAt", void 0);
_ts_decorate([
    Index(),
    Column({
        ...id(),
        comment: "The ID of recipient user of the Notification."
    }),
    _ts_metadata("design:type", Object)
], Notification.prototype, "notifieeId", void 0);
_ts_decorate([
    ManyToOne((type)=>User, {
        onDelete: "CASCADE"
    }),
    JoinColumn(),
    _ts_metadata("design:type", Object)
], Notification.prototype, "notifiee", void 0);
_ts_decorate([
    Index(),
    Column({
        ...id(),
        nullable: true,
        comment: "The ID of sender user of the Notification."
    }),
    _ts_metadata("design:type", Object)
], Notification.prototype, "notifierId", void 0);
_ts_decorate([
    ManyToOne((type)=>User, {
        onDelete: "CASCADE"
    }),
    JoinColumn(),
    _ts_metadata("design:type", Object)
], Notification.prototype, "notifier", void 0);
_ts_decorate([
    Index(),
    Column("enum", {
        enum: notificationTypes,
        comment: "The type of the Notification."
    }),
    _ts_metadata("design:type", Object)
], Notification.prototype, "type", void 0);
_ts_decorate([
    Index(),
    Column("boolean", {
        default: false,
        comment: "Whether the notification was read."
    }),
    _ts_metadata("design:type", Boolean)
], Notification.prototype, "isRead", void 0);
_ts_decorate([
    Column({
        ...id(),
        nullable: true
    }),
    _ts_metadata("design:type", Object)
], Notification.prototype, "noteId", void 0);
_ts_decorate([
    ManyToOne((type)=>Note, {
        onDelete: "CASCADE"
    }),
    JoinColumn(),
    _ts_metadata("design:type", Object)
], Notification.prototype, "note", void 0);
_ts_decorate([
    Column({
        ...id(),
        nullable: true
    }),
    _ts_metadata("design:type", Object)
], Notification.prototype, "followRequestId", void 0);
_ts_decorate([
    ManyToOne((type)=>FollowRequest, {
        onDelete: "CASCADE"
    }),
    JoinColumn(),
    _ts_metadata("design:type", Object)
], Notification.prototype, "followRequest", void 0);
_ts_decorate([
    Column({
        ...id(),
        nullable: true
    }),
    _ts_metadata("design:type", Object)
], Notification.prototype, "userGroupInvitationId", void 0);
_ts_decorate([
    ManyToOne((type)=>UserGroupInvitation, {
        onDelete: "CASCADE"
    }),
    JoinColumn(),
    _ts_metadata("design:type", Object)
], Notification.prototype, "userGroupInvitation", void 0);
_ts_decorate([
    Column("varchar", {
        length: 128,
        nullable: true
    }),
    _ts_metadata("design:type", Object)
], Notification.prototype, "reaction", void 0);
_ts_decorate([
    Column("integer", {
        nullable: true
    }),
    _ts_metadata("design:type", Object)
], Notification.prototype, "choice", void 0);
_ts_decorate([
    Column("varchar", {
        length: 2048,
        nullable: true
    }),
    _ts_metadata("design:type", Object)
], Notification.prototype, "customBody", void 0);
_ts_decorate([
    Column("varchar", {
        length: 256,
        nullable: true
    }),
    _ts_metadata("design:type", Object)
], Notification.prototype, "customHeader", void 0);
_ts_decorate([
    Column("varchar", {
        length: 1024,
        nullable: true
    }),
    _ts_metadata("design:type", Object)
], Notification.prototype, "customIcon", void 0);
_ts_decorate([
    Index(),
    Column({
        ...id(),
        nullable: true
    }),
    _ts_metadata("design:type", Object)
], Notification.prototype, "appAccessTokenId", void 0);
_ts_decorate([
    ManyToOne((type)=>AccessToken, {
        onDelete: "CASCADE"
    }),
    JoinColumn(),
    _ts_metadata("design:type", Object)
], Notification.prototype, "appAccessToken", void 0);
_ts_decorate([
    Index(),
    Column({
        ...id(),
        nullable: true
    }),
    _ts_metadata("design:type", Object)
], Notification.prototype, "biteId", void 0);
_ts_decorate([
    ManyToOne((type)=>Bite, {
        onDelete: "CASCADE",
        nullable: true
    }),
    _ts_metadata("design:type", Object)
], Notification.prototype, "bite", void 0);
Notification = _ts_decorate([
    Entity()
], Notification);
