mirror of
				https://github.com/photoprism/photoprism.git
				synced 2025-10-31 12:16:39 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			89 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package api
 | |
| 
 | |
| import (
 | |
| 	"net/http"
 | |
| 
 | |
| 	"github.com/gin-gonic/gin"
 | |
| 
 | |
| 	"github.com/photoprism/photoprism/internal/auth/acl"
 | |
| 	"github.com/photoprism/photoprism/internal/entity/query"
 | |
| 	"github.com/photoprism/photoprism/internal/form"
 | |
| 	"github.com/photoprism/photoprism/internal/photoprism/get"
 | |
| 	"github.com/photoprism/photoprism/pkg/clean"
 | |
| 	"github.com/photoprism/photoprism/pkg/i18n"
 | |
| )
 | |
| 
 | |
| // BatchAlbumsDelete permanently removes multiple albums.
 | |
| //
 | |
| //	@Summary	permanently removes multiple albums
 | |
| //	@Id			BatchAlbumsDelete
 | |
| //	@Tags		Albums
 | |
| //	@Accept		json
 | |
| //	@Produce	json
 | |
| //	@Success	200					{object}	i18n.Response
 | |
| //	@Failure	400,401,403,404,429	{object}	i18n.Response
 | |
| //	@Param		albums				body		form.Selection	true	"Album Selection"
 | |
| //	@Router		/api/v1/batch/albums/delete [post]
 | |
| func BatchAlbumsDelete(router *gin.RouterGroup) {
 | |
| 	router.POST("/batch/albums/delete", func(c *gin.Context) {
 | |
| 		s := Auth(c, acl.ResourceAlbums, acl.ActionDelete)
 | |
| 
 | |
| 		if s.Abort(c) {
 | |
| 			return
 | |
| 		}
 | |
| 
 | |
| 		var frm form.Selection
 | |
| 
 | |
| 		if err := c.BindJSON(&frm); err != nil {
 | |
| 			AbortBadRequest(c)
 | |
| 			return
 | |
| 		}
 | |
| 
 | |
| 		// Get album UIDs.
 | |
| 		albumUIDs := frm.Albums
 | |
| 
 | |
| 		if len(albumUIDs) == 0 {
 | |
| 			Abort(c, http.StatusBadRequest, i18n.ErrNoAlbumsSelected)
 | |
| 			return
 | |
| 		}
 | |
| 
 | |
| 		log.Infof("albums: deleting %s", clean.Log(frm.String()))
 | |
| 
 | |
| 		// Fetch albums.
 | |
| 		albums, queryErr := query.AlbumsByUID(albumUIDs, false)
 | |
| 
 | |
| 		if queryErr != nil {
 | |
| 			log.Errorf("albums: %s (find)", queryErr)
 | |
| 		}
 | |
| 
 | |
| 		// Abort if no albums with a matching UID were found.
 | |
| 		if len(albums) == 0 {
 | |
| 			AbortEntityNotFound(c)
 | |
| 			return
 | |
| 		}
 | |
| 
 | |
| 		deleted := 0
 | |
| 		conf := get.Config()
 | |
| 
 | |
| 		// Flag matching albums as deleted.
 | |
| 		for _, a := range albums {
 | |
| 			if deleteErr := a.Delete(); deleteErr != nil {
 | |
| 				log.Errorf("albums: %s (delete)", deleteErr)
 | |
| 			} else {
 | |
| 				if conf.BackupAlbums() {
 | |
| 					SaveAlbumYaml(a)
 | |
| 				}
 | |
| 
 | |
| 				deleted++
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		// Update client config if at least one album was successfully deleted.
 | |
| 		if deleted > 0 {
 | |
| 			UpdateClientConfig()
 | |
| 		}
 | |
| 
 | |
| 		c.JSON(http.StatusOK, i18n.NewResponse(http.StatusOK, i18n.MsgAlbumsDeleted))
 | |
| 	})
 | |
| }
 | 
