mirror of
https://github.com/serty2005/rmser.git
synced 2026-02-04 19:02:33 -06:00
пересчет поправил редактирование с перепроведением галка автопроведения работает рекомендации починил
65 lines
2.1 KiB
Go
65 lines
2.1 KiB
Go
package handlers
|
||
|
||
import (
|
||
"net/http"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
"github.com/google/uuid"
|
||
"go.uber.org/zap"
|
||
|
||
"rmser/internal/domain/account"
|
||
"rmser/internal/services/recommend"
|
||
"rmser/pkg/logger"
|
||
)
|
||
|
||
type RecommendationsHandler struct {
|
||
service *recommend.Service
|
||
accountRepo account.Repository
|
||
}
|
||
|
||
func NewRecommendationsHandler(service *recommend.Service, accountRepo account.Repository) *RecommendationsHandler {
|
||
return &RecommendationsHandler{
|
||
service: service,
|
||
accountRepo: accountRepo,
|
||
}
|
||
}
|
||
|
||
// GetRecommendations godoc
|
||
// @Summary Получить список рекомендаций
|
||
// @Description Возвращает сгенерированные рекомендации (проблемные зоны учета) для активного сервера
|
||
// @Tags recommendations
|
||
// @Produce json
|
||
// @Success 200 {array} recommendations.Recommendation
|
||
// @Failure 500 {object} map[string]string
|
||
func (h *RecommendationsHandler) GetRecommendations(c *gin.Context) {
|
||
userID := c.MustGet("userID").(uuid.UUID)
|
||
|
||
// Получаем активный сервер пользователя
|
||
server, err := h.accountRepo.GetActiveServer(userID)
|
||
if err != nil {
|
||
logger.Log.Error("Ошибка получения активного сервера", zap.Error(err))
|
||
c.JSON(http.StatusInternalServerError, gin.H{"error": "failed to get active server"})
|
||
return
|
||
}
|
||
if server == nil {
|
||
c.JSON(http.StatusNotFound, gin.H{"error": "no active server"})
|
||
return
|
||
}
|
||
|
||
// Сначала обновляем рекомендации
|
||
if err := h.service.RefreshRecommendations(server.ID); err != nil {
|
||
logger.Log.Error("Ошибка обновления рекомендаций", zap.Error(err))
|
||
// Не прерываем выполнение, продолжаем с текущими данными
|
||
}
|
||
|
||
// Затем получаем рекомендации
|
||
recs, err := h.service.GetRecommendations(server.ID)
|
||
if err != nil {
|
||
logger.Log.Error("Ошибка получения рекомендаций", zap.Error(err))
|
||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||
return
|
||
}
|
||
|
||
c.JSON(http.StatusOK, recs)
|
||
}
|