add tai lieu system
All checks were successful
Deploy on Master Change / deploy (push) Successful in 43s
All checks were successful
Deploy on Master Change / deploy (push) Successful in 43s
This commit is contained in:
124
server/internal/handlers/handlers_guide_links.go
Normal file
124
server/internal/handlers/handlers_guide_links.go
Normal file
@@ -0,0 +1,124 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"server/internal/models"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// Helper check email
|
||||
func isSuperAdmin(c *fiber.Ctx) bool {
|
||||
email, ok := c.Locals("staffEmail").(string)
|
||||
return ok && email == "phuocntb@rikkeiacademy.com"
|
||||
}
|
||||
|
||||
// GET /api/guide-links
|
||||
func ListGuideLinksHandler(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})
|
||||
}
|
||||
}
|
||||
|
||||
// POST /api/guide-links
|
||||
func CreateGuideLinkHandler(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 {
|
||||
Title string `json:"title"`
|
||||
URL string `json:"url"`
|
||||
}
|
||||
var req Request
|
||||
if err := c.BodyParser(&req); err != nil {
|
||||
return c.Status(400).JSON(fiber.Map{"error": "Invalid request body"})
|
||||
}
|
||||
if req.Title == "" || req.URL == "" {
|
||||
return c.Status(400).JSON(fiber.Map{"error": "Tiêu đề và đường dẫn không được để trống"})
|
||||
}
|
||||
|
||||
link := models.GuideLink{
|
||||
Title: req.Title,
|
||||
URL: req.URL,
|
||||
}
|
||||
if err := db.Create(&link).Error; err != nil {
|
||||
return c.Status(500).JSON(fiber.Map{"error": "Lưu tài liệu thất bại"})
|
||||
}
|
||||
|
||||
return c.JSON(fiber.Map{"ok": true, "data": link})
|
||||
}
|
||||
}
|
||||
|
||||
// PUT /api/guide-links/:id
|
||||
func UpdateGuideLinkHandler(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 link models.GuideLink
|
||||
if err := db.First(&link, uint(id)).Error; err != nil {
|
||||
return c.Status(404).JSON(fiber.Map{"error": "Không tìm thấy tài liệu"})
|
||||
}
|
||||
|
||||
type Request struct {
|
||||
Title string `json:"title"`
|
||||
URL string `json:"url"`
|
||||
}
|
||||
var req Request
|
||||
if err := c.BodyParser(&req); err != nil {
|
||||
return c.Status(400).JSON(fiber.Map{"error": "Invalid request body"})
|
||||
}
|
||||
if req.Title == "" || req.URL == "" {
|
||||
return c.Status(400).JSON(fiber.Map{"error": "Tiêu đề và đường dẫn không được để trống"})
|
||||
}
|
||||
|
||||
link.Title = req.Title
|
||||
link.URL = req.URL
|
||||
|
||||
if err := db.Save(&link).Error; err != nil {
|
||||
return c.Status(500).JSON(fiber.Map{"error": "Cập nhật tài liệu thất bại"})
|
||||
}
|
||||
|
||||
return c.JSON(fiber.Map{"ok": true, "data": link})
|
||||
}
|
||||
}
|
||||
|
||||
// DELETE /api/guide-links/:id
|
||||
func DeleteGuideLinkHandler(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 link models.GuideLink
|
||||
if err := db.First(&link, uint(id)).Error; err != nil {
|
||||
return c.Status(404).JSON(fiber.Map{"error": "Không tìm thấy tài liệu"})
|
||||
}
|
||||
|
||||
if err := db.Delete(&link).Error; err != nil {
|
||||
return c.Status(500).JSON(fiber.Map{"error": "Xóa tài liệu thất bại"})
|
||||
}
|
||||
|
||||
return c.JSON(fiber.Map{"ok": true})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user