first commit

This commit is contained in:
i.smyshlyaev
2025-10-16 12:55:36 +03:00
commit 65c3add95e
24 changed files with 932 additions and 0 deletions

View File

@@ -0,0 +1,45 @@
package handler
import (
"strconv"
"code.linberg.su/linberg/awesome-cli/awesome-back/internal/service"
"code.linberg.su/linberg/awesome-cli/awesome-back/pkg/errors"
"github.com/gin-gonic/gin"
)
type CoffeeHandler struct {
coffeeService *service.CoffeeService
}
func NewCoffeeHandler(coffeeService *service.CoffeeService) *CoffeeHandler {
return &CoffeeHandler{coffeeService: coffeeService}
}
func (h *CoffeeHandler) GetCoffees(c *gin.Context) {
coffees, err := h.coffeeService.GetAllCoffees()
if err != nil {
Error(c, err)
return
}
Success(c, coffees)
}
func (h *CoffeeHandler) GetCoffeeByID(c *gin.Context) {
idStr := c.Param("id")
id, err := strconv.Atoi(idStr)
if err != nil {
Error(c, errors.NewInvalidError("invalid coffee ID format"))
return
}
coffee, err := h.coffeeService.GetCoffeeByID(id)
if err != nil {
Error(c, err)
return
}
Success(c, coffee)
}

View File

@@ -0,0 +1,62 @@
package handler
import (
"strconv"
"code.linberg.su/linberg/awesome-cli/awesome-back/internal/domain/entities"
"code.linberg.su/linberg/awesome-cli/awesome-back/internal/service"
"code.linberg.su/linberg/awesome-cli/awesome-back/pkg/errors"
"github.com/gin-gonic/gin"
)
type OrderHandler struct {
orderService *service.OrderService
}
func NewOrderHandler(orderService *service.OrderService) *OrderHandler {
return &OrderHandler{orderService: orderService}
}
func (h *OrderHandler) GetOrders(c *gin.Context) {
orders, err := h.orderService.GetAllOrders()
if err != nil {
Error(c, err)
return
}
Success(c, orders)
}
func (h *OrderHandler) GetOrderByID(c *gin.Context) {
idStr := c.Param("id")
id, err := strconv.Atoi(idStr)
if err != nil {
Error(c, errors.NewInvalidError("invalid order ID format"))
return
}
order, err := h.orderService.GetOrderByID(id)
if err != nil {
Error(c, err)
return
}
Success(c, order)
}
func (h *OrderHandler) CreateOrder(c *gin.Context) {
var order entities.Order
if err := c.ShouldBindJSON(&order); err != nil {
Error(c, errors.NewInvalidError("invalid order data"))
return
}
err := h.orderService.CreateOrder(&order)
if err != nil {
Error(c, err)
return
}
Created(c, order)
}

View File

@@ -0,0 +1,61 @@
package handler
import (
"strconv"
"code.linberg.su/linberg/awesome-cli/awesome-back/internal/service"
"code.linberg.su/linberg/awesome-cli/awesome-back/pkg/errors"
"github.com/gin-gonic/gin"
)
type PastryHandler struct {
pastryService *service.PastryService
}
func NewPastryHandler(pastryService *service.PastryService) *PastryHandler {
return &PastryHandler{pastryService: pastryService}
}
func (h *PastryHandler) GetPastries(c *gin.Context) {
pastries, err := h.pastryService.GetAllPastries()
if err != nil {
Error(c, err)
return
}
Success(c, pastries)
}
func (h *PastryHandler) GetPastryByID(c *gin.Context) {
idStr := c.Param("id")
id, err := strconv.Atoi(idStr)
if err != nil {
Error(c, errors.NewInvalidError("invalid pastry ID format"))
return
}
pastry, err := h.pastryService.GetPastryByID(id)
if err != nil {
Error(c, err)
return
}
Success(c, pastry)
}
func (h *PastryHandler) GetPastriesByCategory(c *gin.Context) {
category := c.Param("category")
if category == "" {
Error(c, errors.NewInvalidError("category parameter is required"))
return
}
pastries, err := h.pastryService.GetPastriesByCategory(category)
if err != nil {
Error(c, err)
return
}
Success(c, pastries)
}

View File

@@ -0,0 +1,55 @@
package handler
import (
"errors"
"net/http"
appErr "code.linberg.su/linberg/awesome-cli/awesome-back/pkg/errors"
"github.com/gin-gonic/gin"
)
type Response struct {
Success bool `json:"success"`
Data interface{} `json:"data,omitempty"`
Error string `json:"error,omitempty"`
Message string `json:"message,omitempty"`
}
func Success(c *gin.Context, data interface{}) {
c.JSON(http.StatusOK, Response{
Success: true,
Data: data,
})
}
func Created(c *gin.Context, data interface{}) {
c.JSON(http.StatusCreated, Response{
Success: true,
Data: data,
})
}
func Error(c *gin.Context, err error) {
var appErr *appErr.AppError
if errors.As(err, &appErr) {
statusCode := appErr.Code
if statusCode == 0 {
statusCode = http.StatusInternalServerError
}
c.JSON(statusCode, Response{
Success: false,
Error: appErr.Message,
})
return
}
// Ошибка по умолчанию
c.JSON(http.StatusInternalServerError, Response{
Success: false,
Error: "Internal server error",
})
}
// Аналогично для PastryHandler и OrderHandler...