Удалён мёртвый серверный слой управления компонентами/категориями, который дублировал источники категории LOT. В рантайме категория всегда берётся из local_pricelist_items.lot_category (наполняется синком из qt_pricelist_items.lot_category). Удалено: - repository: UnifiedRepo/DataSource, ComponentRepository, CategoryRepository - services: старый ConfigurationService (заменён LocalConfigurationService), ComponentService, ComponentToLocal, ImportFromLot, ParsePartNumber - quote.go: недостижимый online-блок (qt_categories) + componentRepo/ pricingService/priceResolver Сохранены живые типы: models.Category/DefaultCategories (для /api/categories), ComponentView/ComponentListResult, CreateConfigRequest/ArticlePreviewRequest/ ConfigurationGetter/ErrConfig*. bible-local/03-database.md: зафиксирован единственный источник категории LOT; qt_categories/qt_lot_metadata перенесены в server-side only. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
46 lines
1.9 KiB
Go
46 lines
1.9 KiB
Go
package services
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"git.mchus.pro/mchus/quoteforge/internal/models"
|
|
)
|
|
|
|
var (
|
|
ErrConfigNotFound = errors.New("configuration not found")
|
|
ErrConfigForbidden = errors.New("access to configuration forbidden")
|
|
)
|
|
|
|
// ConfigurationGetter is an interface for services that can retrieve configurations.
|
|
// Used by handlers to work with LocalConfigurationService.
|
|
type ConfigurationGetter interface {
|
|
GetByUUID(uuid string, ownerUsername string) (*models.Configuration, error)
|
|
GetByUUIDNoAuth(uuid string) (*models.Configuration, error)
|
|
}
|
|
|
|
type CreateConfigRequest struct {
|
|
Name string `json:"name"`
|
|
Items models.ConfigItems `json:"items"`
|
|
ProjectUUID *string `json:"project_uuid,omitempty"`
|
|
CustomPrice *float64 `json:"custom_price"`
|
|
Notes string `json:"notes"`
|
|
IsTemplate bool `json:"is_template"`
|
|
ServerCount int `json:"server_count"`
|
|
ServerModel string `json:"server_model,omitempty"`
|
|
SupportCode string `json:"support_code,omitempty"`
|
|
Article string `json:"article,omitempty"`
|
|
PricelistID *uint `json:"pricelist_id,omitempty"`
|
|
WarehousePricelistID *uint `json:"warehouse_pricelist_id,omitempty"`
|
|
CompetitorPricelistID *uint `json:"competitor_pricelist_id,omitempty"`
|
|
ConfigType string `json:"config_type,omitempty"` // "server" | "storage"
|
|
DisablePriceRefresh bool `json:"disable_price_refresh"`
|
|
OnlyInStock bool `json:"only_in_stock"`
|
|
}
|
|
|
|
type ArticlePreviewRequest struct {
|
|
Items models.ConfigItems `json:"items"`
|
|
ServerModel string `json:"server_model"`
|
|
SupportCode string `json:"support_code,omitempty"`
|
|
PricelistID *uint `json:"pricelist_id,omitempty"`
|
|
}
|