parent
2ae1da473e
commit
cf05de19b3
3 changed files with 106 additions and 89 deletions
|
@ -540,12 +540,10 @@ func (l *List) CheckIsArchived(s *xorm.Session) (err error) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateOrUpdateList updates a list or creates it if it doesn't exist
|
func checkListBeforeUpdateOrDelete(s *xorm.Session, list *List) error {
|
||||||
func CreateOrUpdateList(s *xorm.Session, list *List, auth web.Auth) (err error) {
|
|
||||||
|
|
||||||
// Check if the namespace exists
|
// Check if the namespace exists
|
||||||
if list.NamespaceID > 0 {
|
if list.NamespaceID > 0 {
|
||||||
_, err = GetNamespaceByID(s, list.NamespaceID)
|
_, err := GetNamespaceByID(s, list.NamespaceID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -565,7 +563,29 @@ func CreateOrUpdateList(s *xorm.Session, list *List, auth web.Auth) (err error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if list.ID == 0 {
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateList(s *xorm.Session, list *List, auth web.Auth) (err error) {
|
||||||
|
err = list.CheckIsArchived(s)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
doer, err := user.GetFromAuth(auth)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
list.OwnerID = doer.ID
|
||||||
|
list.Owner = doer
|
||||||
|
list.ID = 0 // Otherwise only the first time a new list would be created
|
||||||
|
|
||||||
|
err = checkListBeforeUpdateOrDelete(s, list)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
_, err = s.Insert(list)
|
_, err = s.Insert(list)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
@ -581,20 +601,45 @@ func CreateOrUpdateList(s *xorm.Session, list *List, auth web.Auth) (err error)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
|
// Create a new first bucket for this list
|
||||||
|
b := &Bucket{
|
||||||
|
ListID: list.ID,
|
||||||
|
Title: "Backlog",
|
||||||
|
}
|
||||||
|
err = b.Create(s, auth)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
return events.Dispatch(&ListCreatedEvent{
|
||||||
|
List: list,
|
||||||
|
Doer: doer,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func UpdateList(s *xorm.Session, list *List, auth web.Auth, updateListBackground bool) (err error) {
|
||||||
|
err = checkListBeforeUpdateOrDelete(s, list)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// We need to specify the cols we want to update here to be able to un-archive lists
|
// We need to specify the cols we want to update here to be able to un-archive lists
|
||||||
colsToUpdate := []string{
|
colsToUpdate := []string{
|
||||||
"title",
|
"title",
|
||||||
"is_archived",
|
"is_archived",
|
||||||
"identifier",
|
"identifier",
|
||||||
"hex_color",
|
"hex_color",
|
||||||
"background_file_id",
|
|
||||||
"position",
|
"position",
|
||||||
}
|
}
|
||||||
if list.Description != "" {
|
if list.Description != "" {
|
||||||
colsToUpdate = append(colsToUpdate, "description")
|
colsToUpdate = append(colsToUpdate, "description")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if updateListBackground {
|
||||||
|
colsToUpdate = append(colsToUpdate, "background_file_id")
|
||||||
|
}
|
||||||
|
|
||||||
wasFavorite, err := isFavorite(s, list.ID, auth, FavoriteKindList)
|
wasFavorite, err := isFavorite(s, list.ID, auth, FavoriteKindList)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -618,6 +663,13 @@ func CreateOrUpdateList(s *xorm.Session, list *List, auth web.Auth) (err error)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = events.Dispatch(&ListUpdatedEvent{
|
||||||
|
List: list,
|
||||||
|
Doer: auth,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
l, err := GetListSimpleByID(s, list.ID)
|
l, err := GetListSimpleByID(s, list.ID)
|
||||||
|
@ -664,15 +716,7 @@ func (l *List) Update(s *xorm.Session, a web.Auth) (err error) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
err = CreateOrUpdateList(s, l, a)
|
return UpdateList(s, l, a, false)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return events.Dispatch(&ListUpdatedEvent{
|
|
||||||
List: l,
|
|
||||||
Doer: a,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateListLastUpdated(s *xorm.Session, list *List) error {
|
func updateListLastUpdated(s *xorm.Session, list *List) error {
|
||||||
|
@ -705,39 +749,12 @@ func updateListByTaskID(s *xorm.Session, taskID int64) (err error) {
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /namespaces/{namespaceID}/lists [put]
|
// @Router /namespaces/{namespaceID}/lists [put]
|
||||||
func (l *List) Create(s *xorm.Session, a web.Auth) (err error) {
|
func (l *List) Create(s *xorm.Session, a web.Auth) (err error) {
|
||||||
err = l.CheckIsArchived(s)
|
err = CreateList(s, l, a)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
doer, err := user.GetFromAuth(a)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
l.OwnerID = doer.ID
|
|
||||||
l.Owner = doer
|
|
||||||
l.ID = 0 // Otherwise only the first time a new list would be created
|
|
||||||
|
|
||||||
err = CreateOrUpdateList(s, l, a)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a new first bucket for this list
|
return l.ReadOne(s, a)
|
||||||
b := &Bucket{
|
|
||||||
ListID: l.ID,
|
|
||||||
Title: "Backlog",
|
|
||||||
}
|
|
||||||
err = b.Create(s, a)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
return events.Dispatch(&ListCreatedEvent{
|
|
||||||
List: l,
|
|
||||||
Doer: doer,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete implements the delete method of CRUDable
|
// Delete implements the delete method of CRUDable
|
||||||
|
|
|
@ -75,7 +75,7 @@ func (ld *ListDuplicate) Create(s *xorm.Session, doer web.Auth) (err error) {
|
||||||
ld.List.Identifier = "" // Reset the identifier to trigger regenerating a new one
|
ld.List.Identifier = "" // Reset the identifier to trigger regenerating a new one
|
||||||
// Set the owner to the current user
|
// Set the owner to the current user
|
||||||
ld.List.OwnerID = doer.GetID()
|
ld.List.OwnerID = doer.GetID()
|
||||||
if err := CreateOrUpdateList(s, ld.List, doer); err != nil {
|
if err := CreateList(s, ld.List, doer); err != nil {
|
||||||
// If there is no available unique list identifier, just reset it.
|
// If there is no available unique list identifier, just reset it.
|
||||||
if IsErrListIdentifierIsNotUnique(err) {
|
if IsErrListIdentifierIsNotUnique(err) {
|
||||||
ld.List.Identifier = ""
|
ld.List.Identifier = ""
|
||||||
|
|
|
@ -300,7 +300,7 @@ func RemoveListBackground(c echo.Context) error {
|
||||||
|
|
||||||
list.BackgroundFileID = 0
|
list.BackgroundFileID = 0
|
||||||
list.BackgroundInformation = nil
|
list.BackgroundInformation = nil
|
||||||
err = list.Update(s, auth)
|
err = models.UpdateList(s, list, auth, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue