/
Arsinenko
/
CompClubAPI_Go
Обзор
Документация
Войти
/
Arsinenko
/
CompClubAPI_Go
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
internal/handlers/tariff_handler.go
180 строк
6 KB
Arsinenko
Update
08 ноя 2025, 13:12
08 ноя 2025, 13:12
2f36b0f
Код
Авторство
О чём код?
package handlers import ( "CompClubAPI/internal/middleware" "CompClubAPI/internal/services" "net/http" "strings" "github.com/gin-gonic/gin" ) // CreateTariffHandler godoc // @Summary Create a new tariff // @Description Creates a new pricing tariff (e.g., hourly rate for club usage) // @Tags tariffs // @Accept json // @Produce json // @Param tariff body services.TariffModel true "Tariff data" // @Success 201 {object} map[string]interface{} "Tariff created successfully" // @Failure 400 {object} map[string]string "Invalid request body or tariff already exists" // @Failure 500 {object} map[string]string "Internal server error" // @Router /tariffs/ [post] func CreateTariffHandler(s services.TariffService) gin.HandlerFunc { return func(c *gin.Context) { var model services.TariffModel if err := c.ShouldBindJSON(&model); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } tariff, err := s.CreateTariff(model) if err != nil { if err.Error() == "tariff already exists" { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } if strings.Contains(err.Error(), "bad request") { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusCreated, gin.H{"tariff": tariff}) } } // GetTariffsHandler godoc // @Summary Get all tariffs // @Description Retrieves a list of all available tariffs // @Tags tariffs // @Produce json // @Success 200 {object} map[string]interface{} "List of tariffs" // @Failure 404 {object} map[string]string "No tariffs found" // @Failure 500 {object} map[string]string "Internal server error" // @Router /tariffs/ [get] func GetTariffsHandler(s services.TariffService) gin.HandlerFunc { return func(c *gin.Context) { tariffs, err := s.GetTariffs() if err != nil { if err.Error() == "tariffs not found" { c.JSON(http.StatusNotFound, gin.H{"error": err.Error()}) return } c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, gin.H{"tariffs": tariffs}) } } // GetTariffHandler godoc // @Summary Get tariff by name // @Description Retrieves a specific tariff by its name // @Tags tariffs // @Produce json // @Param name path string true "Name of the tariff" // @Success 200 {object} map[string]interface{} "Tariff details" // @Failure 400 {object} map[string]string "Name parameter missing" // @Failure 404 {object} map[string]string "Tariff not found" // @Failure 500 {object} map[string]string "Internal server error" // @Router /tariffs/{name} [get] func GetTariffHandler(s services.TariffService) gin.HandlerFunc { return func(c *gin.Context) { name := c.Param("name") if name == "" { c.JSON(http.StatusBadRequest, gin.H{"error": "name is required"}) return } tariff, err := s.GetTariff(name) if err != nil { if err.Error() == "tariff not found" { c.JSON(http.StatusNotFound, gin.H{"error": err.Error()}) return } c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, gin.H{"tariff": tariff}) } } // UpdateTariffHandler godoc // @Summary Update an existing tariff // @Description Updates tariff details (name must match an existing tariff) // @Tags tariffs // @Accept json // @Produce json // @Param tariff body services.TariffModel true "Updated tariff data" // @Success 200 {object} map[string]interface{} "Tariff updated successfully" // @Failure 400 {object} map[string]string "Invalid request body" // @Failure 404 {object} map[string]string "Tariff not found" // @Failure 500 {object} map[string]string "Internal server error" // @Router /tariffs/ [put] func UpdateTariffHandler(s services.TariffService) gin.HandlerFunc { return func(c *gin.Context) { var model services.TariffModel if err := c.ShouldBindJSON(&model); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } tariff, err := s.UpdateTariff(model) if err != nil { if err.Error() == "tariff not found" { c.JSON(http.StatusNotFound, gin.H{"error": err.Error()}) return } if strings.Contains(err.Error(), "bad request") { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, gin.H{"tariff": tariff}) } } // DeleteTariffHandler godoc // @Summary Delete a tariff // @Description Removes a tariff from the system by name // @Tags tariffs // @Produce json // @Param name path string true "Name of the tariff to delete" // @Success 200 {object} map[string]string "Tariff deleted successfully" // @Failure 400 {object} map[string]string "Name parameter missing" // @Failure 404 {object} map[string]string "Tariff not found" // @Failure 500 {object} map[string]string "Internal server error" // @Router /tariffs/{name} [delete] func DeleteTariffHandler(s services.TariffService) gin.HandlerFunc { return func(c *gin.Context) { name := c.Param("name") if name == "" { c.JSON(http.StatusBadRequest, gin.H{"error": "name is required"}) return } err := s.DeleteTariff(name) if err != nil { if err.Error() == "tariff not found" { c.JSON(http.StatusNotFound, gin.H{"error": err.Error()}) return } c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, gin.H{"message": "tariff deleted"}) } } // InitTariffRouters initializes tariff-related routes // All endpoints are protected by AdminMiddleware func InitTariffRouters(r *gin.RouterGroup, s services.TariffService) { jwtMiddleware := middleware.NewJwtMiddleware() r.Use(middleware.AdminMiddleware(jwtMiddleware)) r.POST("/", CreateTariffHandler(s)) r.PUT("/", UpdateTariffHandler(s)) r.GET("/", GetTariffsHandler(s)) r.GET("/:name", GetTariffHandler(s)) r.DELETE("/:name", DeleteTariffHandler(s)) }