Files
OpsMastery.v5/internal/handlers/ticketHandler.go
2026-07-12 20:26:16 -04:00

85 lines
2.6 KiB
Go

package handlers
import (
"net/http"
"strconv"
"OpsMastery.v5/internal/database"
"OpsMastery.v5/internal/models"
"github.com/gofiber/fiber/v2"
"gorm.io/gorm"
)
func CreateTicket(c *fiber.Ctx) error {
var ticket models.Ticket
if err := c.BodyParser(&ticket); err != nil {
return c.Status(http.StatusBadRequest).JSON(fiber.Map{"error": err.Error()})
}
if err := database.DB().Create(&ticket).Error; err != nil {
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
}
return c.Status(http.StatusCreated).JSON(ticket)
}
func ListTickets(c *fiber.Ctx) error {
var tickets []models.Ticket
if err := database.DB().Find(&tickets).Error; err != nil {
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
}
return c.JSON(tickets)
}
func GetTicketByID(c *fiber.Ctx) error {
id := c.Params("id")
var ticket models.Ticket
ticketID, err := strconv.ParseUint(id, 10, 32)
if err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid ticket ID"})
}
if err := database.DB().First(&ticket, ticketID).Error; err != nil {
if err == gorm.ErrRecordNotFound {
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": "Ticket not found"})
}
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
}
return c.JSON(ticket)
}
func DeleteTicketByID(c *fiber.Ctx) error {
id := c.Params("id")
ticketID, err := strconv.ParseUint(id, 10, 32)
if err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid ticket ID"})
}
result := database.DB().Unscoped().Delete(&models.Ticket{}, ticketID)
if result.RowsAffected == 0 {
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": "Ticket not found"})
}
if result.Error != nil {
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{"error": result.Error.Error()})
}
return c.Status(http.StatusOK).JSON(fiber.Map{"message": "Ticket deleted successfully"})
}
func UpdateTicketByID(c *fiber.Ctx) error {
id := c.Params("id")
ticketID, err := strconv.ParseUint(id, 10, 32)
if err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid ticket ID"})
}
var ticket models.Ticket
if err := c.BodyParser(&ticket); err != nil {
return c.Status(http.StatusBadRequest).JSON(fiber.Map{"error": err.Error()})
}
if err := database.DB().Model(&models.Ticket{}).Where("id = ?", ticketID).Updates(ticket).Error; err != nil {
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
}
return c.Status(http.StatusOK).JSON(fiber.Map{"message": "Ticket updated successfully"})
}