Files
fishfish/backend/handlers/item_handlers.go
T

119 lines
2.7 KiB
Go

package handlers
import (
"fmt"
"net/http"
"github.com/gin-gonic/gin"
"fishfish/database"
"fishfish/models"
)
func GetItem(c *gin.Context) {
id := c.Param("id")
var item models.Item
if err := database.DB.First(&item, id).Error; err != nil {
c.JSON(http.StatusNotFound, gin.H{"error": "Товар не найден"})
return
}
if item.AvatarURL != "" {
item.AvatarURL = fmt.Sprintf("/static/items/%s", item.AvatarURL)
} else {
item.AvatarURL = fmt.Sprintf("/static/items/background.png")
}
c.JSON(http.StatusOK, item)
}
func GetAllItems(c *gin.Context) {
var items []models.Item
if err := database.DB.Find(&items).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Не удалось загрузить данные с сервера", "message": err.Error()})
return
}
for i := range items {
if items[i].AvatarURL != "" {
items[i].AvatarURL = fmt.Sprintf("/static/items/%s", items[i].AvatarURL)
} else {
items[i].AvatarURL = fmt.Sprintf("/static/items/background.png")
}
}
c.JSON(http.StatusOK, items)
}
func UpdateItem(c *gin.Context) {
id := c.Param("id")
var item models.Item
if err := database.DB.First(&item, id).Error; err != nil {
c.JSON(http.StatusNotFound, gin.H{"error": "Товар не найден"})
return
}
var input models.Item
if err := c.ShouldBindJSON(&input); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Неверно введеные данные"})
return
}
database.DB.Model(&item).Updates(models.Item{
Name: input.Name,
Unit: input.Unit,
City: input.City,
Price: input.Price,
})
c.JSON(http.StatusOK, item)
}
func AddItem(c *gin.Context) {
var input models.Item
if err := c.ShouldBindJSON(&input); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Неверные данные"})
return
}
if err := database.DB.Create(&input).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Не удалось создать товар"})
return
}
c.JSON(http.StatusCreated, input)
}
func DeleteItem(c *gin.Context) {
id := c.Param("id")
var item models.Item
if err := database.DB.First(&item, id).Error; err != nil {
c.JSON(http.StatusNotFound, gin.H{"error": "Указанный товар не найден"})
return
}
database.DB.Delete(&item)
c.JSON(http.StatusOK, gin.H{"message": "Товар успешно удален"})
}
func GetCategories(c *gin.Context) {
var item models.Item
categories := make([]string, 0)
err := database.DB.Model(&item).Where("category IS NOT NULL AND category != ''").Distinct().Pluck("category", &categories).Error
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, categories)
}