refactor: убрать categoryRepo из ExportService, порядок из DefaultCategories

Категория лота приходит из прайслиста — запрашивать её из серверной БД
нарушало принцип local-first. Сигнатура NewExportService упрощена,
все call-sites обновлены.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-24 19:06:39 +03:00
parent ff262822e1
commit ddc00523e0
4 changed files with 23 additions and 34 deletions

View File

@@ -13,20 +13,17 @@ import (
"git.mchus.pro/mchus/quoteforge/internal/config"
"git.mchus.pro/mchus/quoteforge/internal/localdb"
"git.mchus.pro/mchus/quoteforge/internal/models"
"git.mchus.pro/mchus/quoteforge/internal/repository"
)
type ExportService struct {
config config.ExportConfig
categoryRepo *repository.CategoryRepository
localDB *localdb.LocalDB
config config.ExportConfig
localDB *localdb.LocalDB
}
func NewExportService(cfg config.ExportConfig, categoryRepo *repository.CategoryRepository, local *localdb.LocalDB) *ExportService {
func NewExportService(cfg config.ExportConfig, local *localdb.LocalDB) *ExportService {
return &ExportService{
config: cfg,
categoryRepo: categoryRepo,
localDB: local,
config: cfg,
localDB: local,
}
}
@@ -127,15 +124,7 @@ func (s *ExportService) ToCSV(w io.Writer, data *ProjectExportData) error {
return fmt.Errorf("failed to write header: %w", err)
}
// Build category order: start from DefaultCategories, override with live DB values if available.
categoryOrder := defaultCategoryOrder()
if s.categoryRepo != nil {
if categories, err := s.categoryRepo.GetAll(); err == nil {
for _, cat := range categories {
categoryOrder[cat.Code] = cat.DisplayOrder
}
}
}
for i, block := range data.Configs {
lineNo := block.Line

View File

@@ -33,7 +33,7 @@ func newTestProjectData(items []ExportItem, article string, serverCount int) *Pr
}
func TestToCSV_UTF8BOM(t *testing.T) {
svc := NewExportService(config.ExportConfig{}, nil, nil)
svc := NewExportService(config.ExportConfig{}, nil)
data := newTestProjectData([]ExportItem{
{
@@ -63,7 +63,7 @@ func TestToCSV_UTF8BOM(t *testing.T) {
}
func TestToCSV_SemicolonDelimiter(t *testing.T) {
svc := NewExportService(config.ExportConfig{}, nil, nil)
svc := NewExportService(config.ExportConfig{}, nil)
data := newTestProjectData([]ExportItem{
{
@@ -130,7 +130,7 @@ func TestToCSV_SemicolonDelimiter(t *testing.T) {
}
func TestToCSV_ServerRow(t *testing.T) {
svc := NewExportService(config.ExportConfig{}, nil, nil)
svc := NewExportService(config.ExportConfig{}, nil)
data := newTestProjectData([]ExportItem{
{LotName: "LOT-001", Category: "CAT", Quantity: 1, UnitPrice: 100.0, TotalPrice: 100.0},
@@ -175,7 +175,7 @@ func TestToCSV_ServerRow(t *testing.T) {
}
func TestToCSV_CategorySorting(t *testing.T) {
svc := NewExportService(config.ExportConfig{}, nil, nil)
svc := NewExportService(config.ExportConfig{}, nil)
data := newTestProjectData([]ExportItem{
{LotName: "LOT-001", Category: "CAT-A", Quantity: 1, UnitPrice: 100.0, TotalPrice: 100.0},
@@ -214,7 +214,7 @@ func TestToCSV_CategorySorting(t *testing.T) {
}
func TestToCSV_EmptyData(t *testing.T) {
svc := NewExportService(config.ExportConfig{}, nil, nil)
svc := NewExportService(config.ExportConfig{}, nil)
data := &ProjectExportData{
Configs: []ConfigExportBlock{},
@@ -247,7 +247,7 @@ func TestToCSV_EmptyData(t *testing.T) {
}
func TestToCSVBytes_BackwardCompat(t *testing.T) {
svc := NewExportService(config.ExportConfig{}, nil, nil)
svc := NewExportService(config.ExportConfig{}, nil)
data := newTestProjectData([]ExportItem{
{LotName: "LOT-001", Category: "CAT", Quantity: 1, UnitPrice: 100.0, TotalPrice: 100.0},
@@ -270,7 +270,7 @@ func TestToCSVBytes_BackwardCompat(t *testing.T) {
}
func TestToCSV_WriterError(t *testing.T) {
svc := NewExportService(config.ExportConfig{}, nil, nil)
svc := NewExportService(config.ExportConfig{}, nil)
data := newTestProjectData([]ExportItem{
{LotName: "LOT-001", Category: "CAT", Quantity: 1, UnitPrice: 100.0, TotalPrice: 100.0},
@@ -284,7 +284,7 @@ func TestToCSV_WriterError(t *testing.T) {
}
func TestToCSV_MultipleBlocks(t *testing.T) {
svc := NewExportService(config.ExportConfig{}, nil, nil)
svc := NewExportService(config.ExportConfig{}, nil)
data := &ProjectExportData{
Configs: []ConfigExportBlock{
@@ -359,7 +359,7 @@ func TestToCSV_MultipleBlocks(t *testing.T) {
}
func TestProjectToExportData_SortsByLine(t *testing.T) {
svc := NewExportService(config.ExportConfig{}, nil, nil)
svc := NewExportService(config.ExportConfig{}, nil)
configs := []models.Configuration{
{
@@ -445,7 +445,7 @@ func TestFormatPriceComma(t *testing.T) {
}
func TestToPricingCSV_UsesSelectedColumns(t *testing.T) {
svc := NewExportService(config.ExportConfig{}, nil, nil)
svc := NewExportService(config.ExportConfig{}, nil)
data := &ProjectPricingExportData{
Configs: []ProjectPricingExportConfig{
{
@@ -519,7 +519,7 @@ func TestToPricingCSV_UsesSelectedColumns(t *testing.T) {
}
func TestProjectToPricingExportData_UsesCartRowsWithoutBOM(t *testing.T) {
svc := NewExportService(config.ExportConfig{}, nil, nil)
svc := NewExportService(config.ExportConfig{}, nil)
configs := []models.Configuration{
{
UUID: "cfg-1",