Files
zsp-project/backend/internal/handler/company_handler.go
2026-06-03 20:59:39 +08:00

177 lines
5.6 KiB
Go
Executable File

package handler
import (
"encoding/json"
"net/http"
"strconv"
"github.com/gin-gonic/gin"
"github.com/rovina/zsp-backend/internal/service"
)
type CompanyHandler struct {
service service.CompanyService
}
func NewCompanyHandler(s service.CompanyService) *CompanyHandler {
return &CompanyHandler{service: s}
}
func (h *CompanyHandler) ListFolders(c *gin.Context) {
list, err := h.service.ListFolders()
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"success": false, "message": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"success": true, "data": list})
}
func (h *CompanyHandler) CreateFolder(c *gin.Context) {
var body struct {
Name string `json:"name" binding:"required"`
Description string `json:"description"`
Category string `json:"category"`
}
if err := c.ShouldBindJSON(&body); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"success": false, "message": err.Error()})
return
}
f, err := h.service.CreateFolder(body.Name, body.Description, body.Category)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"success": false, "message": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"success": true, "data": f})
}
func (h *CompanyHandler) UpdateFolder(c *gin.Context) {
id, err := strconv.ParseUint(c.Param("id"), 10, 32)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"success": false, "message": "invalid id"})
return
}
var body struct {
Name string `json:"name" binding:"required"`
Description string `json:"description"`
Category string `json:"category"`
}
if err := c.ShouldBindJSON(&body); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"success": false, "message": err.Error()})
return
}
if err := h.service.UpdateFolder(uint(id), body.Name, body.Description, body.Category); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"success": false, "message": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"success": true, "message": "updated"})
}
func (h *CompanyHandler) DeleteFolder(c *gin.Context) {
id, err := strconv.ParseUint(c.Param("id"), 10, 32)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"success": false, "message": "invalid id"})
return
}
if err := h.service.DeleteFolder(uint(id)); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"success": false, "message": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"success": true, "message": "deleted"})
}
func (h *CompanyHandler) ListFiles(c *gin.Context) {
var folderID *uint
if idStr := c.Query("folderId"); idStr != "" {
if id, err := strconv.ParseUint(idStr, 10, 32); err == nil {
uid := uint(id)
folderID = &uid
}
}
list, err := h.service.ListFiles(folderID)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"success": false, "message": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"success": true, "data": list})
}
func (h *CompanyHandler) UploadFiles(c *gin.Context) {
form, err := c.MultipartForm()
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"success": false, "message": err.Error()})
return
}
files := form.File["files"]
if len(files) == 0 {
c.JSON(http.StatusBadRequest, gin.H{"success": false, "message": "no files"})
return
}
var dataStr string
if v := form.Value["data"]; len(v) > 0 {
dataStr = v[0]
}
var data struct {
CompanyName string `json:"companyName"`
FileCategory string `json:"fileCategory"`
ExpireDate string `json:"expireDate"`
Description string `json:"description"`
FolderID string `json:"folderId"`
}
if dataStr != "" {
_ = json.Unmarshal([]byte(dataStr), &data)
}
var folderID *uint
if data.FolderID != "" {
if id, err := strconv.ParseUint(data.FolderID, 10, 32); err == nil {
uid := uint(id)
folderID = &uid
}
}
count, err := h.service.UploadFiles(folderID, data.CompanyName, data.FileCategory, data.ExpireDate, data.Description, files)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"success": false, "message": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"success": true, "data": gin.H{"uploadedCount": count}, "message": "uploaded"})
}
func (h *CompanyHandler) UpdateFile(c *gin.Context) {
id, err := strconv.ParseUint(c.Param("id"), 10, 32)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"success": false, "message": "invalid id"})
return
}
var body struct {
CompanyName string `json:"companyName"`
FileCategory string `json:"fileCategory"`
ExpireDate string `json:"expireDate"`
Description string `json:"description"`
FolderID *uint `json:"folderId"`
}
if err := c.ShouldBindJSON(&body); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"success": false, "message": err.Error()})
return
}
if err := h.service.UpdateFile(uint(id), body.CompanyName, body.FileCategory, body.ExpireDate, body.Description, body.FolderID); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"success": false, "message": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"success": true, "message": "updated"})
}
func (h *CompanyHandler) DeleteFile(c *gin.Context) {
id, err := strconv.ParseUint(c.Param("id"), 10, 32)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"success": false, "message": "invalid id"})
return
}
if err := h.service.DeleteFile(uint(id)); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"success": false, "message": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"success": true, "message": "deleted"})
}