import {Column, Entity, Index, ManyToOne, OneToMany, PrimaryGeneratedColumn, Unique} from 'typeorm'; import {DirectoryDTO} from '../../../../common/entities/DirectoryDTO'; import {MediaEntity} from './MediaEntity'; import {FileEntity} from './FileEntity'; import {columnCharsetCS} from './EntityUtils'; @Entity() @Unique(['name', 'path']) export class DirectoryEntity implements DirectoryDTO { @Index() @PrimaryGeneratedColumn({unsigned: true}) id: number; @Index() @Column(columnCharsetCS) name: string; @Index() @Column(columnCharsetCS) path: string; /** * last time the directory was modified (from outside, eg.: a new media was added) */ @Column('bigint', { unsigned: true, transformer: { from: v => parseInt(v, 10), to: v => v } }) public lastModified: number; /** * Last time the directory was fully scanned, not only for a few media to create a preview */ @Column({ type: 'bigint', nullable: true, unsigned: true, transformer: { from: v => parseInt(v, 10) || null, to: v => v } }) public lastScanned: number; isPartial?: boolean; @Column('smallint', {unsigned: true}) mediaCount: number; @Index() @ManyToOne(type => DirectoryEntity, directory => directory.directories, {onDelete: 'CASCADE'}) public parent: DirectoryEntity; @OneToMany(type => DirectoryEntity, dir => dir.parent) public directories: DirectoryEntity[]; @OneToMany(type => MediaEntity, media => media.directory) public media: MediaEntity[]; @OneToMany(type => FileEntity, file => file.directory) public metaFile: FileEntity[]; }