77 lines
2.6 KiB
TypeScript
77 lines
2.6 KiB
TypeScript
import { Association, BelongsToGetAssociationMixin, BelongsToManyAssociation, BelongsToManyCreateAssociationMixin, CreationOptional, DataTypes, ForeignKey, InferAttributes, InferCreationAttributes, Model, NonAttribute, Sequelize } from "@sequelize/core";import { User } from "./User";
|
|
|
|
import { SqliteDialect } from '@sequelize/sqlite3';
|
|
import { Attribute, AutoIncrement, BelongsTo, BelongsToMany, CreatedAt, Default, HasMany, NotNull, PrimaryKey, Unique, UpdatedAt } from "@sequelize/core/decorators-legacy";
|
|
import { Tag } from "./Tag";
|
|
import { PostTag } from "./PostTag";
|
|
import { Project } from "./Project";
|
|
import { Attachment } from "./Attachment";
|
|
import { Bucket } from "./Bucket";
|
|
import { UUID } from "crypto";
|
|
|
|
export class Post extends Model<InferAttributes<Post>, InferCreationAttributes<Post>> {
|
|
|
|
|
|
// Attributes
|
|
@Attribute(DataTypes.INTEGER)
|
|
@PrimaryKey
|
|
@AutoIncrement
|
|
@Unique
|
|
declare id: CreationOptional<number>;
|
|
|
|
@Attribute(DataTypes.STRING)
|
|
declare title:string
|
|
@Attribute(DataTypes.STRING)
|
|
declare content:string
|
|
|
|
// Date thingies
|
|
@CreatedAt
|
|
declare createdAt: CreationOptional<Date>;
|
|
@UpdatedAt
|
|
declare updatedAt: CreationOptional<Date>;
|
|
|
|
|
|
|
|
// Associatoins
|
|
@Attribute(DataTypes.INTEGER)
|
|
@NotNull
|
|
declare user_id:ForeignKey<User['id']>;
|
|
|
|
@Attribute(DataTypes.INTEGER)
|
|
declare project_id:CreationOptional<ForeignKey<User['id']>>;
|
|
|
|
@BelongsTo(()=>User, { foreignKey: 'user_id', inverse: { type: 'hasMany', as: 'posts' } })
|
|
declare user:NonAttribute<User>;
|
|
|
|
@BelongsTo(()=>Project, { foreignKey:'project_id', inverse: { type: 'hasMany', as: 'posts' } })
|
|
declare project:CreationOptional<Project>;
|
|
|
|
@BelongsToMany(()=>Tag, { through: { model: ()=>PostTag, unique: false}, inverse: {as: 'taggedPosts'} })
|
|
declare postTags?:NonAttribute<Tag[]>;
|
|
|
|
@BelongsToMany(()=>Bucket,{through: { model: ()=> PostBucket, unique: false}, inverse:{as: 'bucketPosts'}, foreignKey: 'postId', otherKey: 'bucketId'})
|
|
declare postBuckets:NonAttribute<Bucket[]>;
|
|
|
|
|
|
declare getUser: BelongsToGetAssociationMixin<User>;
|
|
|
|
|
|
declare static associations: {
|
|
user: Association<User, Post>;
|
|
project: Association<Project, Post>;
|
|
postBuckets: Association<Bucket, Post>
|
|
postTags: Association<Tag, Post>;
|
|
};
|
|
}
|
|
export class PostBucket extends Model<InferAttributes<PostBucket>, InferCreationAttributes<PostBucket>>{
|
|
declare postId: number;
|
|
declare bucketId: UUID;
|
|
}
|
|
|
|
const sequelize = new Sequelize({
|
|
dialect: SqliteDialect,
|
|
storage: 'db.sqlite',
|
|
models: [Post, PostBucket]
|
|
})
|
|
|
|
PostBucket.sync(); |