package recommendations import ( "time" "github.com/google/uuid" ) // Типы проблем const ( TypeUnused = "UNUSED_IN_RECIPES" // Товар не используется в техкартах TypeNoIncoming = "NO_INCOMING" // Ингредиент (GOODS) в техкарте, но нет приходов TypeStale = "STALE_GOODS" // Есть приходы, но нет продаж TypeDishInRecipe = "DISH_IN_RECIPE" // Блюдо (DISH) в составе другого блюда TypePurchasedButUnused = "PURCHASED_BUT_UNUSED" // Активно закупается, но нет в техкартах TypeUsageNoIncoming = "USAGE_NO_INCOMING" // Есть расходы, но нет приходов ) // Recommendation - Результат анализа type Recommendation struct { ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()"` RMSServerID uuid.UUID `gorm:"type:uuid;not null;index"` Type string `gorm:"type:varchar(50);index"` ProductID uuid.UUID `gorm:"type:uuid;index"` ProductName string `gorm:"type:varchar(255)"` Reason string `gorm:"type:text"` CreatedAt time.Time } // Repository отвечает за аналитические выборки и хранение результатов type Repository interface { // Методы анализа — добавить serverID FindUnusedGoods(serverID uuid.UUID) ([]Recommendation, error) FindNoIncomingIngredients(serverID uuid.UUID, days int) ([]Recommendation, error) FindStaleGoods(serverID uuid.UUID, days int) ([]Recommendation, error) FindDishesInRecipes(serverID uuid.UUID) ([]Recommendation, error) FindPurchasedButUnused(serverID uuid.UUID, days int) ([]Recommendation, error) FindUsageWithoutPurchase(serverID uuid.UUID, days int) ([]Recommendation, error) // Методы хранения — добавить serverID SaveAll(serverID uuid.UUID, items []Recommendation) error GetAll(serverID uuid.UUID) ([]Recommendation, error) }