data.coffee 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. # app/types/data.coffee
  2. class DomainEntity
  3. constructor: (data = {}) ->
  4. @_id = data._id or ''
  5. @_rev = data._rev or ''
  6. @type = data.type or ''
  7. @domains = data.domains or []
  8. @createdAt = data.createdAt or new Date().toISOString()
  9. @updatedAt = data.updatedAt or new Date().toISOString()
  10. @active = if data.active? then data.active else true
  11. @createdBy = data.createdBy or ''
  12. @updatedBy = data.updatedBy or ''
  13. class Category extends DomainEntity
  14. constructor: (data = {}) ->
  15. super(data)
  16. @type = 'category'
  17. @name = data.name or ''
  18. @slug = data.slug or ''
  19. @parent = data.parent or null
  20. @order = data.order or 0
  21. @image = data.image or ''
  22. @description = data.description or ''
  23. @seo = data.seo or {}
  24. @attributesConfig = data.attributesConfig or {}
  25. # Добавляем поле children для иерархической структуры
  26. @children = data.children or []
  27. class Product extends DomainEntity
  28. constructor: (data = {}) ->
  29. super(data)
  30. @type = 'product'
  31. @name = data.name or ''
  32. @sku = data.sku or ''
  33. @price = data.price or 0
  34. @oldPrice = data.oldPrice or null
  35. @category = data.category or ''
  36. @brand = data.brand or ''
  37. @description = data.description or ''
  38. @shortDescription = data.shortDescription or ''
  39. @attributes = data.attributes or {}
  40. @images = data.images or []
  41. @richContent = data.richContent or null
  42. @inStock = if data.inStock? then data.inStock else true
  43. @stockQuantity = data.stockQuantity or 0
  44. @weight = data.weight or 0
  45. @volume = data.volume or 0
  46. @dimensions = data.dimensions or {}
  47. @seo = data.seo or {}
  48. @tags = data.tags or []
  49. @relatedProducts = data.relatedProducts or []
  50. class HeroSlide extends DomainEntity
  51. constructor: (data = {}) ->
  52. super(data)
  53. @type = 'hero_slide'
  54. @title = data.title or ''
  55. @subtitle = data.subtitle or ''
  56. @image = data.image or ''
  57. @buttonText = data.buttonText or 'В каталог'
  58. @buttonLink = data.buttonLink or '/catalog'
  59. @order = data.order or 0
  60. @active = if data.active? then data.active else true
  61. class DomainSettings extends DomainEntity
  62. constructor: (data = {}) ->
  63. super(data)
  64. @type = 'domain_settings'
  65. @domain = data.domain or ''
  66. @companyName = data.companyName or ''
  67. @companyLogo = data.companyLogo or ''
  68. @languages = data.languages or ['ru']
  69. @defaultLanguage = data.defaultLanguage or 'ru'
  70. @theme = data.theme or 'light'
  71. @contacts = data.contacts or {}
  72. @seo = data.seo or {}
  73. @social = data.social or {}
  74. @paymentMethods = data.paymentMethods or []
  75. @shippingMethods = data.shippingMethods or []
  76. class User extends DomainEntity
  77. constructor: (data = {}) ->
  78. super(data)
  79. @type = 'user'
  80. @username = data.username or ''
  81. @email = data.email or ''
  82. @role = data.role or 'user'
  83. @firstName = data.firstName or ''
  84. @lastName = data.lastName or ''
  85. @phone = data.phone or ''
  86. @address = data.address or {}
  87. @orders = data.orders or []
  88. @favorites = data.favorites or []
  89. @cart = data.cart or []
  90. class Order extends DomainEntity
  91. constructor: (data = {}) ->
  92. super(data)
  93. @type = 'order'
  94. @userId = data.userId or ''
  95. @items = data.items or []
  96. @total = data.total or 0
  97. @status = data.status or 'pending'
  98. @paymentStatus = data.paymentStatus or 'pending'
  99. @shippingAddress = data.shippingAddress or {}
  100. @billingAddress = data.billingAddress or {}
  101. @paymentMethod = data.paymentMethod or ''
  102. @shippingMethod = data.shippingMethod or ''
  103. @trackingNumber = data.trackingNumber or ''
  104. @notes = data.notes or ''
  105. module.exports = {
  106. DomainEntity,
  107. Product,
  108. Category,
  109. HeroSlide,
  110. DomainSettings,
  111. User,
  112. Order
  113. }