import User from "./user"; import ItemStatus from "./vo/itemStatus.vo"; import ItemType from "./vo/itemType.vo"; export interface ItemData { id: string, name: string, description: string, onClickRedirect?: string, type: ItemType, price: number, image: string, link?: string, dueDate?: Date, user?: User, availableStock?: number, couponsAvailable?: number, couponsTaken?: number, assigned?: number, totalCodes?: number, visible?: boolean } export default class Item { availableStock?: number; id: string; name: string; description: string; onClickRedirect?: string; type: ItemType; status: ItemStatus; price: number; image: string; link?: string; dueDate?: Date; assigned: number; couponsAvailable?: number; totalCodes?: number; couponsTaken?: number; visible: boolean; constructor(data: ItemData) { this.id = data.id; this.name = data.name; this.description = data.description; this.type = data.type; this.dueDate = data.dueDate; this.image = data.image; this.link = data.link; this.price = data.price; this.status = this.statusForUser(data.user); this.availableStock = data.availableStock; this.assigned = data.assigned || 0; this.visible = data.visible === undefined ? true : data.visible; this.couponsAvailable = data.couponsAvailable; this.couponsTaken = data.couponsTaken; this.totalCodes = data.totalCodes; this.onClickRedirect = data.onClickRedirect; } hasStock = (quantity = 1) => { this.availableStock || 0 >= quantity; }; statusForUser = (user?: User): ItemStatus => { if (!user) return ItemStatus.UNAVAILABLE; return user.level >= this.price ? ItemStatus.AVAILABLE : ItemStatus.UNAVAILABLE; }; }