Add export / import routes
This commit is contained in:
@@ -142,3 +142,31 @@ func (h *Handler) AdminForceDelete(c *gin.Context) {
|
|||||||
|
|
||||||
c.Redirect(301, "/admin")
|
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"`
|
Deleted bool `json:"deleted"`
|
||||||
CreatedAt time.Time `json:"created_at"`
|
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)
|
files.GET("/delete/:del_id", h.Delete)
|
||||||
|
|
||||||
adminRoutes := files.Group("/")
|
adminRoutes := files.Group("/admin")
|
||||||
adminRoutes.Use(middleware.AuthMiddleware())
|
adminRoutes.Use(middleware.AuthMiddleware())
|
||||||
adminRoutes.Use(middleware.RequireRole("admin"))
|
adminRoutes.Use(middleware.RequireRole("admin"))
|
||||||
|
|
||||||
adminRoutes.GET("/admin", h.AdminList)
|
adminRoutes.GET("/", h.AdminList)
|
||||||
adminRoutes.GET("/admin/:id", h.AdminGet)
|
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("/delete/:id", h.AdminDelete)
|
||||||
adminRoutes.GET("/admin/delete/fr/:id", h.AdminForceDelete)
|
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) {
|
func (s *Service) GetFileByDeletionID(delID string) (*FileRecord, error) {
|
||||||
return s.repo.GetByDeletionID(delID)
|
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