0202-финиш перед десктопом

пересчет поправил
редактирование с перепроведением
галка автопроведения работает
рекомендации починил
This commit is contained in:
2026-02-02 13:53:38 +03:00
parent 10882f55c8
commit 88620f3fb6
37 changed files with 1905 additions and 11162 deletions

View File

@@ -1,6 +1,7 @@
package main
import (
"context"
"log"
"os"
"time"
@@ -17,8 +18,8 @@ import (
"rmser/internal/services/auth"
"rmser/internal/transport/http/middleware"
"rmser/internal/transport/ws"
tgBot "rmser/internal/transport/telegram"
"rmser/internal/transport/ws"
// Repositories
accountPkg "rmser/internal/infrastructure/repository/account"
@@ -43,6 +44,7 @@ import (
photosServicePkg "rmser/internal/services/photos"
recServicePkg "rmser/internal/services/recommend"
"rmser/internal/services/sync"
"rmser/internal/services/worker"
// Handlers
"rmser/internal/transport/http/handlers"
@@ -100,13 +102,21 @@ func main() {
ykClient := yookassa.NewClient(cfg.YooKassa.ShopID, cfg.YooKassa.SecretKey)
billingService := billingServicePkg.NewService(billingRepo, accountRepo, ykClient)
syncService := sync.NewService(rmsFactory, accountRepo, catalogRepo, recipesRepo, invoicesRepo, opsRepo, supplierRepo)
syncService := sync.NewService(rmsFactory, cryptoManager, accountRepo, catalogRepo, recipesRepo, invoicesRepo, opsRepo, supplierRepo)
// Создаем сервис рекомендаций до SyncWorker, так как он нужен для обновления рекомендаций
recService := recServicePkg.NewService(recRepo)
// 6.1 SyncWorker для фоновой синхронизации
syncWorker := worker.NewSyncWorker(syncService, accountRepo, rmsFactory, recService, logger.Log)
workerCtx, workerCancel := context.WithCancel(context.Background())
go syncWorker.Run(workerCtx)
defer workerCancel()
ocrService := ocrServicePkg.NewService(ocrRepo, catalogRepo, draftsRepo, accountRepo, photosRepo, pyClient, cfg.App.StoragePath)
// Устанавливаем DevIDs для OCR сервиса
ocrService.SetDevIDs(cfg.App.DevIDs)
draftsService := draftsServicePkg.NewService(draftsRepo, ocrRepo, catalogRepo, accountRepo, supplierRepo, photosRepo, invoicesRepo, rmsFactory, billingService)
invoicesService := invoicesServicePkg.NewService(invoicesRepo, draftsRepo, supplierRepo, rmsFactory)
invoicesService := invoicesServicePkg.NewService(invoicesRepo, draftsRepo, supplierRepo, accountRepo, rmsFactory)
photosService := photosServicePkg.NewService(photosRepo, draftsRepo, accountRepo)
// 7. WebSocket сервер для desktop авторизации
@@ -121,7 +131,7 @@ func main() {
billingHandler := handlers.NewBillingHandler(billingService)
ocrHandler := handlers.NewOCRHandler(ocrService)
photosHandler := handlers.NewPhotosHandler(photosService)
recommendHandler := handlers.NewRecommendationsHandler(recService)
recommendHandler := handlers.NewRecommendationsHandler(recService, accountRepo)
settingsHandler := handlers.NewSettingsHandler(accountRepo, catalogRepo)
settingsHandler.SetRMSFactory(rmsFactory)
invoicesHandler := handlers.NewInvoiceHandler(invoicesService, syncService)
@@ -215,6 +225,7 @@ func main() {
api.GET("/ocr/search", ocrHandler.SearchProducts)
// Invoices
api.GET("/invoices/stats", invoicesHandler.GetStats)
api.GET("/invoices/:id", invoicesHandler.GetInvoice)
api.POST("/invoices/sync", invoicesHandler.SyncInvoices)
@@ -225,8 +236,36 @@ func main() {
// Запускаем в горутине, чтобы не держать соединение
go func() {
if err := syncService.SyncAllData(userID, force); err != nil {
logger.Log.Error("Manual sync failed", zap.Error(err))
logger.Log.Error("Manual sync failed",
zap.String("user_id", userID.String()),
zap.Error(err))
return
}
// Обновляем рекомендации после успешной синхронизации
// Получаем активный сервер пользователя
server, err := accountRepo.GetActiveServer(userID)
if err != nil {
logger.Log.Error("Ошибка получения активного сервера для обновления рекомендаций",
zap.String("user_id", userID.String()),
zap.Error(err))
return
}
if server != nil {
if err := recService.RefreshRecommendations(server.ID); err != nil {
logger.Log.Error("Ошибка обновления рекомендаций после ручной синхронизации",
zap.String("user_id", userID.String()),
zap.String("server_id", server.ID.String()),
zap.Error(err))
}
if err := accountRepo.UpdateLastSync(server.ID); err != nil {
logger.Log.Error("Ошибка обновления времени синхронизации",
zap.String("user_id", userID.String()),
zap.String("server_id", server.ID.String()),
zap.Error(err))
}
}
}()
c.JSON(200, gin.H{"status": "sync_started", "message": "Синхронизация запущена в фоне"})
})