mirror of
https://github.com/serty2005/rmser.git
synced 2026-02-04 19:02:33 -06:00
59 lines
2.3 KiB
Go
59 lines
2.3 KiB
Go
package catalog
|
||
|
||
import (
|
||
"time"
|
||
|
||
"github.com/google/uuid"
|
||
"github.com/shopspring/decimal"
|
||
)
|
||
|
||
// MeasureUnit - Единица измерения (kg, l, pcs)
|
||
type MeasureUnit struct {
|
||
ID uuid.UUID `gorm:"type:uuid;primary_key;" json:"id"`
|
||
Name string `gorm:"type:varchar(50);not null" json:"name"`
|
||
Code string `gorm:"type:varchar(50)" json:"code"`
|
||
}
|
||
|
||
// ProductContainer - Фасовка (упаковка) товара
|
||
type ProductContainer struct {
|
||
ID uuid.UUID `gorm:"type:uuid;primary_key;" json:"id"`
|
||
ProductID uuid.UUID `gorm:"type:uuid;index;not null" json:"product_id"`
|
||
Name string `gorm:"type:varchar(100);not null" json:"name"`
|
||
Count decimal.Decimal `gorm:"type:numeric(19,4);not null" json:"count"` // Коэфф. пересчета
|
||
}
|
||
|
||
// Product - Номенклатура
|
||
type Product struct {
|
||
ID uuid.UUID `gorm:"type:uuid;primary_key;" json:"id"`
|
||
ParentID *uuid.UUID `gorm:"type:uuid;index" json:"parent_id"`
|
||
Name string `gorm:"type:varchar(255);not null" json:"name"`
|
||
Type string `gorm:"type:varchar(50);index" json:"type"` // GOODS, DISH, PREPARED
|
||
Num string `gorm:"type:varchar(50)" json:"num"`
|
||
Code string `gorm:"type:varchar(50)" json:"code"`
|
||
UnitWeight decimal.Decimal `gorm:"type:numeric(19,4)" json:"unit_weight"`
|
||
UnitCapacity decimal.Decimal `gorm:"type:numeric(19,4)" json:"unit_capacity"`
|
||
|
||
// Связь с единицей измерения
|
||
MainUnitID *uuid.UUID `gorm:"type:uuid;index" json:"main_unit_id"`
|
||
MainUnit *MeasureUnit `gorm:"foreignKey:MainUnitID" json:"main_unit,omitempty"`
|
||
|
||
// Фасовки
|
||
Containers []ProductContainer `gorm:"foreignKey:ProductID;constraint:OnDelete:CASCADE" json:"containers,omitempty"`
|
||
|
||
IsDeleted bool `gorm:"default:false" json:"is_deleted"`
|
||
|
||
Parent *Product `gorm:"foreignKey:ParentID" json:"-"`
|
||
Children []*Product `gorm:"foreignKey:ParentID" json:"-"`
|
||
|
||
CreatedAt time.Time `json:"created_at"`
|
||
UpdatedAt time.Time `json:"updated_at"`
|
||
}
|
||
|
||
// Repository интерфейс для каталога
|
||
type Repository interface {
|
||
SaveMeasureUnits(units []MeasureUnit) error
|
||
SaveProducts(products []Product) error
|
||
GetAll() ([]Product, error)
|
||
GetActiveGoods() ([]Product, error)
|
||
}
|