import { BSON, Object, ObjectSchema } from 'realm'; import { Tag } from './tag'; enum MEME_TYPE { IMAGE = 'Image', GIF = 'GIF', VIDEO = 'Video', AUDIO = 'Audio', TEXT = 'Text', } const memeTypePlural = { [MEME_TYPE.IMAGE]: 'Images', [MEME_TYPE.GIF]: 'GIFs', [MEME_TYPE.VIDEO]: 'Videos', [MEME_TYPE.AUDIO]: 'Audio', [MEME_TYPE.TEXT]: 'Text', }; // eslint-disable-next-line @typescript-eslint/naming-convention class Meme extends Object { id!: BSON.UUID; type!: MEME_TYPE; uri!: string; mimeType!: string; size!: number; title!: string; isFavorite!: boolean; tags!: Realm.List; tagsLength!: number; dateCreated!: Date; dateModified!: Date; dateUsed?: Date; timesUsed!: number; static schema: ObjectSchema = { name: 'Meme', primaryKey: 'id', properties: { id: { type: 'uuid', default: () => new BSON.UUID() }, type: { type: 'string', indexed: true }, uri: 'string', mimeType: 'string', size: 'int', title: 'string', isFavorite: { type: 'bool', indexed: true, default: false }, tags: { type: 'list', objectType: 'Tag', default: [] }, tagsLength: { type: 'int', default: 0 }, dateCreated: { type: 'date', default: () => new Date() }, dateModified: { type: 'date', default: () => new Date() }, dateUsed: 'date?', timesUsed: { type: 'int', default: 0 }, }, }; } export { MEME_TYPE, memeTypePlural, Meme };