# app/types/data.coffee class DomainEntity constructor: (data = {}) -> @_id = data._id or '' @_rev = data._rev or '' @type = data.type or '' @domains = data.domains or [] @createdAt = data.createdAt or new Date().toISOString() @updatedAt = data.updatedAt or new Date().toISOString() @active = if data.active? then data.active else true @createdBy = data.createdBy or '' @updatedBy = data.updatedBy or '' class Category extends DomainEntity constructor: (data = {}) -> super(data) @type = 'category' @name = data.name or '' @slug = data.slug or '' @parent = data.parent or null @order = data.order or 0 @image = data.image or '' @description = data.description or '' @seo = data.seo or {} @attributesConfig = data.attributesConfig or {} # Добавляем поле children для иерархической структуры @children = data.children or [] class Product extends DomainEntity constructor: (data = {}) -> super(data) @type = 'product' @name = data.name or '' @sku = data.sku or '' @price = data.price or 0 @oldPrice = data.oldPrice or null @category = data.category or '' @brand = data.brand or '' @description = data.description or '' @shortDescription = data.shortDescription or '' @attributes = data.attributes or {} @images = data.images or [] @richContent = data.richContent or null @inStock = if data.inStock? then data.inStock else true @stockQuantity = data.stockQuantity or 0 @weight = data.weight or 0 @volume = data.volume or 0 @dimensions = data.dimensions or {} @seo = data.seo or {} @tags = data.tags or [] @relatedProducts = data.relatedProducts or [] class HeroSlide extends DomainEntity constructor: (data = {}) -> super(data) @type = 'hero_slide' @title = data.title or '' @subtitle = data.subtitle or '' @image = data.image or '' @buttonText = data.buttonText or 'В каталог' @buttonLink = data.buttonLink or '/catalog' @order = data.order or 0 @active = if data.active? then data.active else true class DomainSettings extends DomainEntity constructor: (data = {}) -> super(data) @type = 'domain_settings' @domain = data.domain or '' @companyName = data.companyName or '' @companyLogo = data.companyLogo or '' @languages = data.languages or ['ru'] @defaultLanguage = data.defaultLanguage or 'ru' @theme = data.theme or 'light' @contacts = data.contacts or {} @seo = data.seo or {} @social = data.social or {} @paymentMethods = data.paymentMethods or [] @shippingMethods = data.shippingMethods or [] class User extends DomainEntity constructor: (data = {}) -> super(data) @type = 'user' @username = data.username or '' @email = data.email or '' @role = data.role or 'user' @firstName = data.firstName or '' @lastName = data.lastName or '' @phone = data.phone or '' @address = data.address or {} @orders = data.orders or [] @favorites = data.favorites or [] @cart = data.cart or [] class Order extends DomainEntity constructor: (data = {}) -> super(data) @type = 'order' @userId = data.userId or '' @items = data.items or [] @total = data.total or 0 @status = data.status or 'pending' @paymentStatus = data.paymentStatus or 'pending' @shippingAddress = data.shippingAddress or {} @billingAddress = data.billingAddress or {} @paymentMethod = data.paymentMethod or '' @shippingMethod = data.shippingMethod or '' @trackingNumber = data.trackingNumber or '' @notes = data.notes or '' module.exports = { DomainEntity, Product, Category, HeroSlide, DomainSettings, User, Order }