Add export / import routes
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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"`
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user