Add export / import routes

This commit is contained in:
2026-03-20 14:05:29 +01:00
parent ce3925423f
commit 55bd127254
4 changed files with 86 additions and 6 deletions

View File

@@ -142,3 +142,31 @@ func (h *Handler) AdminForceDelete(c *gin.Context) {
c.Redirect(301, "/admin")
}
func (h *Handler) Import(c *gin.Context) {
var records []ImportFileRecord
if err := c.ShouldBindJSON(&records); err != nil {
c.JSON(400, gin.H{"error": "invalid JSON"})
return
}
if err := h.service.ImportFiles(records); err != nil {
c.JSON(500, gin.H{"error": err.Error()})
return
}
c.JSON(200, gin.H{
"imported": len(records),
})
}
func (h *Handler) Export(c *gin.Context) {
records, err := h.service.GetAllFiles()
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, records)
}

View File

@@ -16,3 +16,15 @@ type FileRecord struct {
Deleted bool `json:"deleted"`
CreatedAt time.Time `json:"created_at"`
}
type ImportFileRecord struct {
ID string `json:"id"`
DeletionID string `json:"deletion_id"`
Filename string `json:"filename"`
ExpiresAt time.Time `json:"expires_at"`
DeleteAfterDownload bool `json:"delete_after_download"`
Size int64 `json:"size"`
DownloadCount int `json:"download_count"`
Deleted bool `json:"deleted"`
CreatedAt time.Time `json:"created_at"`
}

View File

@@ -14,15 +14,18 @@ func RegisterRoutes(r *gin.RouterGroup, h *Handler) {
files.GET("/delete/:del_id", h.Delete)
adminRoutes := files.Group("/")
adminRoutes := files.Group("/admin")
adminRoutes.Use(middleware.AuthMiddleware())
adminRoutes.Use(middleware.RequireRole("admin"))
adminRoutes.GET("/admin", h.AdminList)
adminRoutes.GET("/admin/:id", h.AdminGet)
adminRoutes.GET("/", h.AdminList)
adminRoutes.GET("/:id", h.AdminGet)
adminRoutes.GET("/admin/download/:id", h.AdminGet)
adminRoutes.GET("/download/:id", h.AdminGet)
adminRoutes.GET("/admin/delete/:id", h.AdminDelete)
adminRoutes.GET("/admin/delete/fr/:id", h.AdminForceDelete)
adminRoutes.GET("/delete/:id", h.AdminDelete)
adminRoutes.GET("/delete/fr/:id", h.AdminForceDelete)
adminRoutes.POST("/import", h.Import)
adminRoutes.GET("/export", h.Export)
}

View File

@@ -142,3 +142,40 @@ func (s *Service) GetFileByID(id string) (*FileRecord, error) {
func (s *Service) GetFileByDeletionID(delID string) (*FileRecord, error) {
return s.repo.GetByDeletionID(delID)
}
func (s *Service) ImportFiles(records []ImportFileRecord) error {
for _, r := range records {
existing, _ := s.repo.GetByID(r.ID)
if existing != nil {
continue
}
record := &FileRecord{
ID: r.ID,
DeletionID: r.DeletionID,
Filename: r.Filename,
Path: s.buildPath(r.ID, r.Filename),
ExpiresAt: r.ExpiresAt,
DeleteAfterDownload: r.DeleteAfterDownload,
Size: r.Size,
DownloadCount: r.DownloadCount,
Deleted: r.Deleted,
CreatedAt: r.CreatedAt,
}
if err := s.repo.Create(record); err != nil {
return err
}
}
return nil
}
func (s *Service) buildPath(id, filename string) string {
return s.storageDir + "/" + id + "/" + filename
}
func (s *Service) GetAllFiles() ([]FileRecord, error) {
return s.repo.GetAll()
}