All checks were successful
Deploy on Master Change / deploy (push) Successful in 44s
149 lines
4.5 KiB
Go
149 lines
4.5 KiB
Go
package handlers
|
|
|
|
import (
|
|
"strconv"
|
|
"server/internal/models"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// GET /api/public/app-downloads
|
|
func ListAppDownloadsPublicHandler(db *gorm.DB) fiber.Handler {
|
|
return func(c *fiber.Ctx) error {
|
|
var apps []models.AppDownload
|
|
if err := db.Order("created_at desc").Find(&apps).Error; err != nil {
|
|
return c.Status(500).JSON(fiber.Map{"error": "Không thể tải danh sách ứng dụng"})
|
|
}
|
|
return c.JSON(fiber.Map{"data": apps})
|
|
}
|
|
}
|
|
|
|
// GET /api/app-downloads
|
|
func ListAppDownloadsHandler(db *gorm.DB) fiber.Handler {
|
|
return func(c *fiber.Ctx) error {
|
|
var apps []models.AppDownload
|
|
if err := db.Order("created_at desc").Find(&apps).Error; err != nil {
|
|
return c.Status(500).JSON(fiber.Map{"error": "Không thể tải danh sách ứng dụng"})
|
|
}
|
|
return c.JSON(fiber.Map{"data": apps})
|
|
}
|
|
}
|
|
|
|
// POST /api/app-downloads
|
|
func CreateAppDownloadHandler(db *gorm.DB) fiber.Handler {
|
|
return func(c *fiber.Ctx) error {
|
|
if !isSuperAdmin(c) {
|
|
return c.Status(403).JSON(fiber.Map{"error": "Bạn không có quyền thực hiện chức năng này"})
|
|
}
|
|
|
|
type Request struct {
|
|
Name string `json:"name"`
|
|
Description string `json:"description"`
|
|
DownloadURL string `json:"downloadUrl"`
|
|
Platform string `json:"platform"`
|
|
}
|
|
var req Request
|
|
if err := c.BodyParser(&req); err != nil {
|
|
return c.Status(400).JSON(fiber.Map{"error": "Invalid request body"})
|
|
}
|
|
if req.Name == "" || req.DownloadURL == "" {
|
|
return c.Status(400).JSON(fiber.Map{"error": "Tên ứng dụng và đường dẫn tải không được để trống"})
|
|
}
|
|
|
|
app := models.AppDownload{
|
|
Name: req.Name,
|
|
Description: req.Description,
|
|
DownloadURL: req.DownloadURL,
|
|
Platform: req.Platform,
|
|
}
|
|
if err := db.Create(&app).Error; err != nil {
|
|
return c.Status(500).JSON(fiber.Map{"error": "Lưu ứng dụng thất bại"})
|
|
}
|
|
|
|
return c.JSON(fiber.Map{"ok": true, "data": app})
|
|
}
|
|
}
|
|
|
|
// PUT /api/app-downloads/:id
|
|
func UpdateAppDownloadHandler(db *gorm.DB) fiber.Handler {
|
|
return func(c *fiber.Ctx) error {
|
|
if !isSuperAdmin(c) {
|
|
return c.Status(403).JSON(fiber.Map{"error": "Bạn không có quyền thực hiện chức năng này"})
|
|
}
|
|
|
|
idParam := c.Params("id")
|
|
id, err := strconv.ParseUint(idParam, 10, 32)
|
|
if err != nil {
|
|
return c.Status(400).JSON(fiber.Map{"error": "Invalid ID"})
|
|
}
|
|
|
|
var app models.AppDownload
|
|
if err := db.First(&app, uint(id)).Error; err != nil {
|
|
return c.Status(404).JSON(fiber.Map{"error": "Không tìm thấy ứng dụng"})
|
|
}
|
|
|
|
type Request struct {
|
|
Name string `json:"name"`
|
|
Description string `json:"description"`
|
|
DownloadURL string `json:"downloadUrl"`
|
|
Platform string `json:"platform"`
|
|
}
|
|
var req Request
|
|
if err := c.BodyParser(&req); err != nil {
|
|
return c.Status(400).JSON(fiber.Map{"error": "Invalid request body"})
|
|
}
|
|
if req.Name == "" || req.DownloadURL == "" {
|
|
return c.Status(400).JSON(fiber.Map{"error": "Tên ứng dụng và đường dẫn tải không được để trống"})
|
|
}
|
|
|
|
app.Name = req.Name
|
|
app.Description = req.Description
|
|
app.DownloadURL = req.DownloadURL
|
|
app.Platform = req.Platform
|
|
|
|
if err := db.Save(&app).Error; err != nil {
|
|
return c.Status(500).JSON(fiber.Map{"error": "Cập nhật ứng dụng thất bại"})
|
|
}
|
|
|
|
return c.JSON(fiber.Map{"ok": true, "data": app})
|
|
}
|
|
}
|
|
|
|
// DELETE /api/app-downloads/:id
|
|
func DeleteAppDownloadHandler(db *gorm.DB) fiber.Handler {
|
|
return func(c *fiber.Ctx) error {
|
|
if !isSuperAdmin(c) {
|
|
return c.Status(403).JSON(fiber.Map{"error": "Bạn không có quyền thực hiện chức năng này"})
|
|
}
|
|
|
|
idParam := c.Params("id")
|
|
id, err := strconv.ParseUint(idParam, 10, 32)
|
|
if err != nil {
|
|
return c.Status(400).JSON(fiber.Map{"error": "Invalid ID"})
|
|
}
|
|
|
|
var app models.AppDownload
|
|
if err := db.First(&app, uint(id)).Error; err != nil {
|
|
return c.Status(404).JSON(fiber.Map{"error": "Không tìm thấy ứng dụng"})
|
|
}
|
|
|
|
if err := db.Delete(&app).Error; err != nil {
|
|
return c.Status(500).JSON(fiber.Map{"error": "Xóa ứng dụng thất bại"})
|
|
}
|
|
|
|
return c.JSON(fiber.Map{"ok": true})
|
|
}
|
|
}
|
|
|
|
// GET /api/public/guide-links
|
|
func ListGuideLinksPublicHandler(db *gorm.DB) fiber.Handler {
|
|
return func(c *fiber.Ctx) error {
|
|
var links []models.GuideLink
|
|
if err := db.Order("created_at desc").Find(&links).Error; err != nil {
|
|
return c.Status(500).JSON(fiber.Map{"error": "Không thể tải danh sách tài liệu"})
|
|
}
|
|
return c.JSON(fiber.Map{"data": links})
|
|
}
|
|
}
|