new-g
This commit is contained in:
@@ -0,0 +1,262 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"gitea.d3m0k1d.ru/d3m0k1d/rostpoliplast/backend/internal/storage"
|
||||
)
|
||||
|
||||
type LineHandlers struct {
|
||||
Repo storage.RepositoryInterface
|
||||
}
|
||||
|
||||
func (h *LineHandlers) RegisterRoutes(g *gin.RouterGroup) {
|
||||
line := g.Group("/line")
|
||||
{
|
||||
line.GET("/stages", h.GetLineStages)
|
||||
line.GET("/stages/:id", h.GetLineStageByID)
|
||||
line.POST("/stages", h.CreateLineStage)
|
||||
line.PUT("/stages/:id", h.UpdateLineStage)
|
||||
line.DELETE("/stages/:id", h.DeleteLineStage)
|
||||
}
|
||||
|
||||
sensors := g.Group("/sensors")
|
||||
{
|
||||
sensors.POST("/readings", h.CreateSensorReading)
|
||||
sensors.GET("/readings/stage/:id", h.GetSensorReadingsByStage)
|
||||
}
|
||||
|
||||
events := g.Group("/events")
|
||||
{
|
||||
events.POST("", h.CreateProductionEvent)
|
||||
events.GET("/stage/:id", h.GetProductionEventsByStage)
|
||||
}
|
||||
|
||||
g.GET("/line/stats", h.GetLineStats)
|
||||
}
|
||||
|
||||
// GetLineStages Получить все этапы линии
|
||||
// @Summary Получить все этапы линии
|
||||
// @Description Возвращает список всех этапов производственной линии
|
||||
// @Tags line
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Success 200 {array} storage.LineStage
|
||||
// @Router /line/stages [get]
|
||||
func (h *LineHandlers) GetLineStages(c *gin.Context) {
|
||||
stages, err := h.Repo.GetLineStages(c.Request.Context())
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, stages)
|
||||
}
|
||||
|
||||
// GetLineStageByID Получить этап линии по ID
|
||||
// @Summary Получить этап линии по ID
|
||||
// @Description Возвращает этап линии по ID
|
||||
// @Tags line
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param id path int true "ID этапа"
|
||||
// @Success 200 {object} storage.LineStage
|
||||
// @Router /line/stages/{id} [get]
|
||||
func (h *LineHandlers) GetLineStageByID(c *gin.Context) {
|
||||
id, err := strconv.Atoi(c.Param("id"))
|
||||
if err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "invalid id"})
|
||||
return
|
||||
}
|
||||
stage, err := h.Repo.GetLineStageByID(c.Request.Context(), id)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusNotFound, gin.H{"error": "not found"})
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, stage)
|
||||
}
|
||||
|
||||
// CreateLineStage Создать этап линии
|
||||
// @Summary Создать этап линии
|
||||
// @Description Создаёт новый этап производственной линии
|
||||
// @Tags line
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param stage body storage.LineStage true "Данные этапа"
|
||||
// @Success 201 {object} storage.LineStage
|
||||
// @Router /line/stages [post]
|
||||
func (h *LineHandlers) CreateLineStage(c *gin.Context) {
|
||||
var input storage.LineStage
|
||||
if err := c.ShouldBindJSON(&input); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
stage, err := h.Repo.CreateLineStage(c.Request.Context(), input)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusCreated, stage)
|
||||
}
|
||||
|
||||
// UpdateLineStage Обновить этап линии
|
||||
// @Summary Обновить этап линии
|
||||
// @Description Обновляет данные этапа линии по ID
|
||||
// @Tags line
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param id path int true "ID этапа"
|
||||
// @Param stage body storage.LineStage true "Данные этапа"
|
||||
// @Success 200 {object} storage.LineStage
|
||||
// @Router /line/stages/{id} [put]
|
||||
func (h *LineHandlers) UpdateLineStage(c *gin.Context) {
|
||||
id, err := strconv.Atoi(c.Param("id"))
|
||||
if err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "invalid id"})
|
||||
return
|
||||
}
|
||||
var input storage.LineStage
|
||||
if err := c.ShouldBindJSON(&input); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
stage, err := h.Repo.UpdateLineStage(c.Request.Context(), id, input)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, stage)
|
||||
}
|
||||
|
||||
// DeleteLineStage Удалить этап линии
|
||||
// @Summary Удалить этап линии
|
||||
// @Description Удаляет этап линии по ID
|
||||
// @Tags line
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param id path int true "ID этапа"
|
||||
// @Success 200 {object} map[string]bool
|
||||
// @Router /line/stages/{id} [delete]
|
||||
func (h *LineHandlers) DeleteLineStage(c *gin.Context) {
|
||||
id, err := strconv.Atoi(c.Param("id"))
|
||||
if err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "invalid id"})
|
||||
return
|
||||
}
|
||||
if err := h.Repo.DeleteLineStage(c.Request.Context(), id); err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, gin.H{"deleted": true})
|
||||
}
|
||||
|
||||
// CreateSensorReading Создать показание датчика
|
||||
// @Summary Создать показание датчика
|
||||
// @Description Создаёт новое показание датчика для этапа линии
|
||||
// @Tags sensors
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param reading body storage.SensorReading true "Данные показания"
|
||||
// @Success 201 {object} storage.SensorReading
|
||||
// @Router /sensors/readings [post]
|
||||
func (h *LineHandlers) CreateSensorReading(c *gin.Context) {
|
||||
var input storage.SensorReading
|
||||
if err := c.ShouldBindJSON(&input); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
reading, err := h.Repo.CreateSensorReading(c.Request.Context(), input)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusCreated, reading)
|
||||
}
|
||||
|
||||
// GetSensorReadingsByStage Получить показания датчиков по этапу
|
||||
// @Summary Получить показания датчиков по этапу
|
||||
// @Description Возвращает последние 100 показаний датчиков для указанного этапа
|
||||
// @Tags sensors
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param id path int true "ID этапа"
|
||||
// @Success 200 {array} storage.SensorReading
|
||||
// @Router /sensors/readings/stage/{id} [get]
|
||||
func (h *LineHandlers) GetSensorReadingsByStage(c *gin.Context) {
|
||||
id, err := strconv.Atoi(c.Param("id"))
|
||||
if err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "invalid id"})
|
||||
return
|
||||
}
|
||||
readings, err := h.Repo.GetSensorReadingsByStage(c.Request.Context(), id)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, readings)
|
||||
}
|
||||
|
||||
// CreateProductionEvent Создать событие на линии
|
||||
// @Summary Создать событие на линии
|
||||
// @Description Создаёт новое событие на этапе производственной линии
|
||||
// @Tags events
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param event body storage.ProductionEvent true "Данные события"
|
||||
// @Success 201 {object} storage.ProductionEvent
|
||||
// @Router /events [post]
|
||||
func (h *LineHandlers) CreateProductionEvent(c *gin.Context) {
|
||||
var input storage.ProductionEvent
|
||||
if err := c.ShouldBindJSON(&input); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
event, err := h.Repo.CreateProductionEvent(c.Request.Context(), input)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusCreated, event)
|
||||
}
|
||||
|
||||
// GetProductionEventsByStage Получить события по этапу
|
||||
// @Summary Получить события по этапу
|
||||
// @Description Возвращает последние 100 событий для указанного этапа
|
||||
// @Tags events
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param id path int true "ID этапа"
|
||||
// @Success 200 {array} storage.ProductionEvent
|
||||
// @Router /events/stage/{id} [get]
|
||||
func (h *LineHandlers) GetProductionEventsByStage(c *gin.Context) {
|
||||
id, err := strconv.Atoi(c.Param("id"))
|
||||
if err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "invalid id"})
|
||||
return
|
||||
}
|
||||
events, err := h.Repo.GetProductionEventsByStage(c.Request.Context(), id)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, events)
|
||||
}
|
||||
|
||||
// GetLineStats Получить статистику линии
|
||||
// @Summary Получить статистику линии
|
||||
// @Description Возвращает сводную статистику работы производственной линии
|
||||
// @Tags line
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Success 200 {object} storage.LineStats
|
||||
// @Router /line/stats [get]
|
||||
func (h *LineHandlers) GetLineStats(c *gin.Context) {
|
||||
stats, err := h.Repo.GetLineStats(c.Request.Context())
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, stats)
|
||||
}
|
||||
Reference in New Issue
Block a user