fix delete rec folder

This commit is contained in:
m
2026-07-29 22:58:52 +02:00
parent 79ff07b7c4
commit a226c4d4fa
2 changed files with 51 additions and 7 deletions
+5 -7
View File
@@ -250,18 +250,16 @@ func (h *ResourceHandler) Get(c *gin.Context) {
func (h *ResourceHandler) Delete(c *gin.Context) {
id := c.Param("id")
storagePath, _ := h.resources.GetStoragePath(id)
variants, _ := h.resources.GetVariantsByResourceID(id)
if err := h.resources.Delete(id); err != nil {
result, err := h.resources.DeleteRecursive(id)
if err != nil {
api.Error(c, http.StatusInternalServerError, "DB_ERROR", "Failed to delete resource")
return
}
if storagePath != "" {
os.Remove(path.Clean(storagePath))
for _, p := range result.StoragePaths {
os.Remove(path.Clean(p))
}
for _, v := range variants {
for _, v := range result.Variants {
os.Remove(path.Clean(v.StorageKey))
}
+46
View File
@@ -190,11 +190,57 @@ func (s *ResourceService) Get(id string) (*model.Resource, error) {
return &m, nil
}
type DeleteResult struct {
StoragePaths []string
Variants []model.Variant
}
func (s *ResourceService) Delete(id string) error {
resourceUUID, _ := uuid.Parse(id)
return s.queries.DeleteResource(context.Background(), resourceUUID)
}
func (s *ResourceService) DeleteRecursive(id string) (*DeleteResult, error) {
resourceUUID, _ := uuid.Parse(id)
r, err := s.queries.GetResource(context.Background(), resourceUUID)
if err != nil {
return nil, fmt.Errorf("get resource: %w", err)
}
result := &DeleteResult{}
if r.IsFolder {
children, err := s.queries.ListResourcesByParentID(context.Background(), uuid.NullUUID{UUID: resourceUUID, Valid: true})
if err != nil {
return nil, fmt.Errorf("list children: %w", err)
}
for _, child := range children {
childResult, err := s.DeleteRecursive(child.ID.String())
if err != nil {
return nil, fmt.Errorf("delete child %s: %w", child.ID, err)
}
result.StoragePaths = append(result.StoragePaths, childResult.StoragePaths...)
result.Variants = append(result.Variants, childResult.Variants...)
}
}
if err := s.queries.DeleteResource(context.Background(), resourceUUID); err != nil {
return nil, fmt.Errorf("delete resource: %w", err)
}
storagePath, _ := s.GetStoragePath(id)
if storagePath != "" {
result.StoragePaths = append(result.StoragePaths, storagePath)
}
variants, _ := s.GetVariantsByResourceID(id)
result.Variants = append(result.Variants, variants...)
return result, nil
}
func (s *ResourceService) GetStoragePath(id string) (string, error) {
resourceUUID, _ := uuid.Parse(id)
placement, err := s.queries.GetServerPlacementByResource(context.Background(), resourceUUID)