1
0
mirror of https://github.com/xuthus83/pigallery2.git synced 2024-11-03 21:04:03 +08:00
pigallery2/backend/model/sql/enitites/PhotoEntity.ts

117 lines
2.3 KiB
TypeScript
Raw Normal View History

2018-03-31 03:30:30 +08:00
import {Column, Entity, ManyToOne, PrimaryGeneratedColumn} from 'typeorm';
import {CameraMetadata, GPSMetadata, ImageSize, PhotoDTO, PhotoMetadata, PositionMetaData} from '../../../../common/entities/PhotoDTO';
import {DirectoryEntity} from './DirectoryEntity';
2018-11-02 17:40:09 +08:00
import {OrientationTypes} from 'ts-exif-parser';
2017-10-20 00:08:07 +08:00
@Entity()
export class CameraMetadataEntity implements CameraMetadata {
2016-12-28 03:55:51 +08:00
2018-03-31 03:30:30 +08:00
@Column('text', {nullable: true})
2017-10-20 00:08:07 +08:00
ISO: number;
2016-12-28 03:55:51 +08:00
2018-03-31 03:30:30 +08:00
@Column('text', {nullable: true})
2017-10-20 00:08:07 +08:00
model: string;
2016-12-28 03:55:51 +08:00
2018-03-31 03:30:30 +08:00
@Column('text', {nullable: true})
2017-10-20 00:08:07 +08:00
maker: string;
2016-12-28 03:55:51 +08:00
2018-03-31 03:30:30 +08:00
@Column('int', {nullable: true})
2017-10-20 00:08:07 +08:00
fStop: number;
2016-12-28 03:55:51 +08:00
2018-03-31 03:30:30 +08:00
@Column('int', {nullable: true})
2017-10-20 00:08:07 +08:00
exposure: number;
2016-12-28 03:55:51 +08:00
2018-03-31 03:30:30 +08:00
@Column('int', {nullable: true})
2017-10-20 00:08:07 +08:00
focalLength: number;
2016-12-28 03:55:51 +08:00
2018-03-31 03:30:30 +08:00
@Column('text', {nullable: true})
2017-10-20 00:08:07 +08:00
lens: string;
}
2016-12-28 03:55:51 +08:00
@Entity()
export class GPSMetadataEntity implements GPSMetadata {
2018-03-31 03:30:30 +08:00
@Column('int', {nullable: true})
latitude: number;
2018-03-31 03:30:30 +08:00
@Column('int', {nullable: true})
longitude: number;
2018-03-31 03:30:30 +08:00
@Column('int', {nullable: true})
altitude: number;
}
@Entity()
export class ImageSizeEntity implements ImageSize {
2018-03-31 03:30:30 +08:00
@Column('int')
width: number;
2018-03-31 03:30:30 +08:00
@Column('int')
height: number;
}
2017-10-20 00:08:07 +08:00
@Entity()
export class PositionMetaDataEntity implements PositionMetaData {
2016-12-28 03:55:51 +08:00
2017-10-20 00:08:07 +08:00
@Column(type => GPSMetadataEntity)
GPSData: GPSMetadataEntity;
2016-12-28 03:55:51 +08:00
2018-03-31 03:30:30 +08:00
@Column('text', {nullable: true})
2017-10-20 00:08:07 +08:00
country: string;
2016-12-28 03:55:51 +08:00
2018-03-31 03:30:30 +08:00
@Column('text', {nullable: true})
2017-10-20 00:08:07 +08:00
state: string;
2016-12-28 03:55:51 +08:00
2018-03-31 03:30:30 +08:00
@Column('text', {nullable: true})
2017-10-20 00:08:07 +08:00
city: string;
}
2016-12-28 03:55:51 +08:00
2017-10-20 00:08:07 +08:00
@Entity()
export class PhotoMetadataEntity implements PhotoMetadata {
2017-10-20 00:08:07 +08:00
2018-03-31 03:30:30 +08:00
@Column('simple-array')
keywords: Array<string>;
@Column(type => CameraMetadataEntity)
cameraData: CameraMetadataEntity;
@Column(type => PositionMetaDataEntity)
positionData: PositionMetaDataEntity;
2018-11-02 18:44:13 +08:00
@Column('tinyint', {default: OrientationTypes.TOP_LEFT})
2018-11-02 17:40:09 +08:00
orientation: OrientationTypes;
@Column(type => ImageSizeEntity)
size: ImageSizeEntity;
2018-03-31 03:30:30 +08:00
@Column('bigint')
creationDate: number;
2018-03-31 03:30:30 +08:00
@Column('int')
fileSize: number;
2017-10-20 00:08:07 +08:00
}
2016-12-28 03:55:51 +08:00
2017-10-20 00:08:07 +08:00
@Entity()
export class PhotoEntity implements PhotoDTO {
2016-12-28 03:55:51 +08:00
@PrimaryGeneratedColumn()
id: number;
2018-03-31 03:30:30 +08:00
@Column('text')
name: string;
2018-03-31 03:30:30 +08:00
@ManyToOne(type => DirectoryEntity, directory => directory.photos, {onDelete: 'CASCADE'})
directory: DirectoryEntity;
@Column(type => PhotoMetadataEntity)
metadata: PhotoMetadataEntity;
readyThumbnails: Array<number> = [];
readyIcon = false;
2016-12-28 03:55:51 +08:00
2017-10-20 00:08:07 +08:00
}