package handlers import ( "net/http" "github.com/gin-gonic/gin" "github.com/google/uuid" "go.uber.org/zap" "rmser/internal/services/drafts" invService "rmser/internal/services/invoices" "rmser/pkg/logger" ) type InvoiceHandler struct { service *invService.Service draftsService *drafts.Service } func NewInvoiceHandler(service *invService.Service) *InvoiceHandler { return &InvoiceHandler{service: service} } // SendInvoice godoc // @Summary Создать приходную накладную в iikoRMS // @Description Принимает JSON с данными накладной и отправляет их в iiko // @Tags invoices // @Accept json // @Produce json // @Param input body invService.CreateRequestDTO true "Invoice Data" // @Success 200 {object} map[string]string "created_number" // @Failure 400 {object} map[string]string // @Failure 500 {object} map[string]string func (h *InvoiceHandler) SendInvoice(c *gin.Context) { var req invService.CreateRequestDTO if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "Неверный формат JSON: " + err.Error()}) return } userID := c.MustGet("userID").(uuid.UUID) docNum, err := h.service.SendInvoiceToRMS(req, userID) if err != nil { logger.Log.Error("Ошибка отправки накладной", zap.Error(err)) // Возвращаем 502 Bad Gateway, т.к. ошибка скорее всего на стороне RMS c.JSON(http.StatusBadGateway, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, gin.H{ "status": "ok", "created_number": docNum, }) } // GetInvoice godoc // @Summary Получить детали накладной // @Description Возвращает детали синхронизированной накладной по ID // @Tags invoices // @Produce json // @Param id path string true "Invoice ID" // @Success 200 {object} invService.InvoiceDetailsDTO // @Failure 400 {object} map[string]string // @Failure 404 {object} map[string]string // @Failure 500 {object} map[string]string func (h *InvoiceHandler) GetInvoice(c *gin.Context) { id := c.Param("id") if id == "" { c.JSON(http.StatusBadRequest, gin.H{"error": "ID накладной обязателен"}) return } uuidID, err := uuid.Parse(id) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "Неверный формат ID"}) return } dto, err := h.service.GetInvoice(uuidID) if err != nil { logger.Log.Error("Ошибка получения накладной", zap.Error(err), zap.String("id", id)) c.JSON(http.StatusInternalServerError, gin.H{"error": "Ошибка получения накладной"}) return } c.JSON(http.StatusOK, dto) }