fix(kanban): reset done and default bucket when the bucket itself is deleted
Resolves https://github.com/go-vikunja/vikunja/issues/234
This commit is contained in:
parent
e1c972d64d
commit
5b2b7f7bdc
@ -310,7 +310,7 @@ func (b *Bucket) Update(s *xorm.Session, _ web.Auth) (err error) {
|
|||||||
// @Failure 404 {object} web.HTTPError "The bucket does not exist."
|
// @Failure 404 {object} web.HTTPError "The bucket does not exist."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /projects/{projectID}/buckets/{bucketID} [delete]
|
// @Router /projects/{projectID}/buckets/{bucketID} [delete]
|
||||||
func (b *Bucket) Delete(s *xorm.Session, _ web.Auth) (err error) {
|
func (b *Bucket) Delete(s *xorm.Session, a web.Auth) (err error) {
|
||||||
|
|
||||||
// Prevent removing the last bucket
|
// Prevent removing the last bucket
|
||||||
total, err := s.Where("project_id = ?", b.ProjectID).Count(&Bucket{})
|
total, err := s.Where("project_id = ?", b.ProjectID).Count(&Bucket{})
|
||||||
@ -324,17 +324,27 @@ func (b *Bucket) Delete(s *xorm.Session, _ web.Auth) (err error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove the bucket itself
|
|
||||||
_, err = s.Where("id = ?", b.ID).Delete(&Bucket{})
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the default bucket
|
// Get the default bucket
|
||||||
p, err := GetProjectSimpleByID(s, b.ProjectID)
|
p, err := GetProjectSimpleByID(s, b.ProjectID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
var updateProject bool
|
||||||
|
if b.ID == p.DefaultBucketID {
|
||||||
|
p.DefaultBucketID = 0
|
||||||
|
updateProject = true
|
||||||
|
}
|
||||||
|
if b.ID == p.DoneBucketID {
|
||||||
|
p.DoneBucketID = 0
|
||||||
|
updateProject = true
|
||||||
|
}
|
||||||
|
if updateProject {
|
||||||
|
err = p.Update(s, a)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
defaultBucketID, err := getDefaultBucketID(s, p)
|
defaultBucketID, err := getDefaultBucketID(s, p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -345,5 +355,11 @@ func (b *Bucket) Delete(s *xorm.Session, _ web.Auth) (err error) {
|
|||||||
Where("bucket_id = ?", b.ID).
|
Where("bucket_id = ?", b.ID).
|
||||||
Cols("bucket_id").
|
Cols("bucket_id").
|
||||||
Update(&Task{BucketID: defaultBucketID})
|
Update(&Task{BucketID: defaultBucketID})
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove the bucket itself
|
||||||
|
_, err = s.Where("id = ?", b.ID).Delete(&Bucket{})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -197,6 +197,23 @@ func TestBucket_Delete(t *testing.T) {
|
|||||||
"project_id": 18,
|
"project_id": 18,
|
||||||
}, false)
|
}, false)
|
||||||
})
|
})
|
||||||
|
t.Run("done bucket should be reset", func(t *testing.T) {
|
||||||
|
db.LoadAndAssertFixtures(t)
|
||||||
|
s := db.NewSession()
|
||||||
|
defer s.Close()
|
||||||
|
|
||||||
|
b := &Bucket{
|
||||||
|
ID: 3,
|
||||||
|
ProjectID: 1,
|
||||||
|
}
|
||||||
|
err := b.Delete(s, user)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
db.AssertMissing(t, "projects", map[string]interface{}{
|
||||||
|
"id": 1,
|
||||||
|
"done_bucket_id": 3,
|
||||||
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBucket_Update(t *testing.T) {
|
func TestBucket_Update(t *testing.T) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user