|
|
@@ -1,117 +1,113 @@
|
|
|
-# Базовый класс для всех сущностей
|
|
|
+# app/types/data.coffee
|
|
|
class DomainEntity
|
|
|
- constructor: ->
|
|
|
- @_id = ''
|
|
|
- @_rev = ''
|
|
|
- @type = ''
|
|
|
- @domains = []
|
|
|
- @createdAt = new Date().toISOString()
|
|
|
- @updatedAt = new Date().toISOString()
|
|
|
- @active = true
|
|
|
- @createdBy = ''
|
|
|
- @updatedBy = ''
|
|
|
+ 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 Product extends DomainEntity
|
|
|
- constructor: ->
|
|
|
- super()
|
|
|
- @type = 'product'
|
|
|
- @name = ''
|
|
|
- @sku = ''
|
|
|
- @price = 0
|
|
|
- @oldPrice = null
|
|
|
- @category = ''
|
|
|
- @brand = ''
|
|
|
- @description = ''
|
|
|
- @shortDescription = ''
|
|
|
- @attributes = {}
|
|
|
- @images = []
|
|
|
- @richContent = null
|
|
|
- @inStock = true
|
|
|
- @stockQuantity = 0
|
|
|
- @weight = 0
|
|
|
- @volume = 0
|
|
|
- @dimensions = {}
|
|
|
- @seo = {}
|
|
|
- @tags = []
|
|
|
- @relatedProducts = []
|
|
|
-
|
|
|
-# Категория
|
|
|
class Category extends DomainEntity
|
|
|
- constructor: ->
|
|
|
- super()
|
|
|
+ constructor: (data = {}) ->
|
|
|
+ super(data)
|
|
|
@type = 'category'
|
|
|
- @name = ''
|
|
|
- @slug = ''
|
|
|
- @parent = null
|
|
|
- @order = 0
|
|
|
- @image = ''
|
|
|
- @description = ''
|
|
|
- @seo = {}
|
|
|
- @attributesConfig = {} # Конфигурация атрибутов для категории
|
|
|
+ @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: ->
|
|
|
- super()
|
|
|
+ constructor: (data = {}) ->
|
|
|
+ super(data)
|
|
|
@type = 'hero_slide'
|
|
|
- @title = ''
|
|
|
- @subtitle = ''
|
|
|
- @image = ''
|
|
|
- @buttonText = 'В каталог'
|
|
|
- @buttonLink = '/catalog'
|
|
|
- @order = 0
|
|
|
- @active = true
|
|
|
+ @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: ->
|
|
|
- super()
|
|
|
+ constructor: (data = {}) ->
|
|
|
+ super(data)
|
|
|
@type = 'domain_settings'
|
|
|
- @domain = ''
|
|
|
- @companyName = ''
|
|
|
- @companyLogo = ''
|
|
|
- @languages = ['ru']
|
|
|
- @defaultLanguage = 'ru'
|
|
|
- @theme = 'light'
|
|
|
- @contacts = {}
|
|
|
- @seo = {}
|
|
|
- @social = {}
|
|
|
- @paymentMethods = []
|
|
|
- @shippingMethods = []
|
|
|
+ @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: ->
|
|
|
- super()
|
|
|
+ constructor: (data = {}) ->
|
|
|
+ super(data)
|
|
|
@type = 'user'
|
|
|
- @username = ''
|
|
|
- @email = ''
|
|
|
- @role = 'user' # user, admin, manager
|
|
|
- @firstName = ''
|
|
|
- @lastName = ''
|
|
|
- @phone = ''
|
|
|
- @address = {}
|
|
|
- @orders = []
|
|
|
- @favorites = []
|
|
|
- @cart = []
|
|
|
+ @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: ->
|
|
|
- super()
|
|
|
+ constructor: (data = {}) ->
|
|
|
+ super(data)
|
|
|
@type = 'order'
|
|
|
- @userId = ''
|
|
|
- @items = []
|
|
|
- @total = 0
|
|
|
- @status = 'pending' # pending, confirmed, shipped, delivered, cancelled
|
|
|
- @paymentStatus = 'pending'
|
|
|
- @shippingAddress = {}
|
|
|
- @billingAddress = {}
|
|
|
- @paymentMethod = ''
|
|
|
- @shippingMethod = ''
|
|
|
- @trackingNumber = ''
|
|
|
- @notes = ''
|
|
|
+ @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,
|