Add returning favorites
This commit is contained in:
parent
f640db5663
commit
a8c6141a2c
|
@ -36,6 +36,7 @@ func init() {
|
||||||
ID: "20210709211508",
|
ID: "20210709211508",
|
||||||
Description: "",
|
Description: "",
|
||||||
Migrate: func(tx *xorm.Engine) error {
|
Migrate: func(tx *xorm.Engine) error {
|
||||||
|
// TODO: migrate all existing favorites
|
||||||
return tx.Sync2(taskfavorites20210709211508{})
|
return tx.Sync2(taskfavorites20210709211508{})
|
||||||
},
|
},
|
||||||
Rollback: func(tx *xorm.Engine) error {
|
Rollback: func(tx *xorm.Engine) error {
|
||||||
|
|
|
@ -19,6 +19,7 @@ package models
|
||||||
import (
|
import (
|
||||||
"code.vikunja.io/api/pkg/user"
|
"code.vikunja.io/api/pkg/user"
|
||||||
"code.vikunja.io/web"
|
"code.vikunja.io/web"
|
||||||
|
"xorm.io/builder"
|
||||||
"xorm.io/xorm"
|
"xorm.io/xorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -81,3 +82,25 @@ func isFavorite(s *xorm.Session, entityID int64, a web.Auth, kind FavoriteKind)
|
||||||
Where("task_id = ? AND user_id = ? AND kind = ?", entityID, u.ID, kind).
|
Where("task_id = ? AND user_id = ? AND kind = ?", entityID, u.ID, kind).
|
||||||
Exist(&Favorite{})
|
Exist(&Favorite{})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getFavorites(s *xorm.Session, entityIDs []int64, a web.Auth, kind FavoriteKind) (favorites map[int64]bool, err error) {
|
||||||
|
favorites = make(map[int64]bool)
|
||||||
|
u, err := user.GetFromAuth(a)
|
||||||
|
if err != nil {
|
||||||
|
// Only error GetFromAuth is if it's a link share and we want to ignore that
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
favs := []*Favorite{}
|
||||||
|
err = s.Where(builder.And(
|
||||||
|
builder.Eq{"user_id": u.ID},
|
||||||
|
builder.Eq{"kind": kind},
|
||||||
|
builder.In("entity_id", entityIDs),
|
||||||
|
)).
|
||||||
|
Find(&favs)
|
||||||
|
|
||||||
|
for _, fav := range favs {
|
||||||
|
favorites[fav.EntityID] = true
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
|
@ -209,7 +209,7 @@ func (b *Bucket) ReadAll(s *xorm.Session, auth web.Auth, search string, page int
|
||||||
taskMap[t.ID] = t
|
taskMap[t.ID] = t
|
||||||
}
|
}
|
||||||
|
|
||||||
err = addMoreInfoToTasks(s, taskMap)
|
err = addMoreInfoToTasks(s, taskMap, auth)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, 0, err
|
return nil, 0, 0, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -473,7 +473,7 @@ func getTasksForLists(s *xorm.Session, lists []*List, a web.Auth, opts *taskOpti
|
||||||
taskMap[t.ID] = t
|
taskMap[t.ID] = t
|
||||||
}
|
}
|
||||||
|
|
||||||
err = addMoreInfoToTasks(s, taskMap)
|
err = addMoreInfoToTasks(s, taskMap, a)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, 0, err
|
return nil, 0, 0, err
|
||||||
}
|
}
|
||||||
|
@ -521,7 +521,7 @@ func (bt *BulkTask) GetTasksByIDs(s *xorm.Session) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetTasksByUIDs gets all tasks from a bunch of uids
|
// GetTasksByUIDs gets all tasks from a bunch of uids
|
||||||
func GetTasksByUIDs(s *xorm.Session, uids []string) (tasks []*Task, err error) {
|
func GetTasksByUIDs(s *xorm.Session, uids []string, a web.Auth) (tasks []*Task, err error) {
|
||||||
tasks = []*Task{}
|
tasks = []*Task{}
|
||||||
err = s.In("uid", uids).Find(&tasks)
|
err = s.In("uid", uids).Find(&tasks)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -533,7 +533,7 @@ func GetTasksByUIDs(s *xorm.Session, uids []string) (tasks []*Task, err error) {
|
||||||
taskMap[t.ID] = t
|
taskMap[t.ID] = t
|
||||||
}
|
}
|
||||||
|
|
||||||
err = addMoreInfoToTasks(s, taskMap)
|
err = addMoreInfoToTasks(s, taskMap, a)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -646,7 +646,7 @@ func addRelatedTasksToTasks(s *xorm.Session, taskIDs []int64, taskMap map[int64]
|
||||||
|
|
||||||
// This function takes a map with pointers and returns a slice with pointers to tasks
|
// This function takes a map with pointers and returns a slice with pointers to tasks
|
||||||
// It adds more stuff like assignees/labels/etc to a bunch of tasks
|
// It adds more stuff like assignees/labels/etc to a bunch of tasks
|
||||||
func addMoreInfoToTasks(s *xorm.Session, taskMap map[int64]*Task) (err error) {
|
func addMoreInfoToTasks(s *xorm.Session, taskMap map[int64]*Task, a web.Auth) (err error) {
|
||||||
|
|
||||||
// No need to iterate over users and stuff if the list doesn't have tasks
|
// No need to iterate over users and stuff if the list doesn't have tasks
|
||||||
if len(taskMap) == 0 {
|
if len(taskMap) == 0 {
|
||||||
|
@ -688,6 +688,11 @@ func addMoreInfoToTasks(s *xorm.Session, taskMap map[int64]*Task) (err error) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
taskFavorites, err := getFavorites(s, taskIDs, a, FavoriteKindTask)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// Get all identifiers
|
// Get all identifiers
|
||||||
lists, err := GetListsByIDs(s, listIDs)
|
lists, err := GetListsByIDs(s, listIDs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -708,6 +713,8 @@ func addMoreInfoToTasks(s *xorm.Session, taskMap map[int64]*Task) (err error) {
|
||||||
|
|
||||||
// Build the task identifier from the list identifier and task index
|
// Build the task identifier from the list identifier and task index
|
||||||
task.setIdentifier(lists[task.ListID])
|
task.setIdentifier(lists[task.ListID])
|
||||||
|
|
||||||
|
task.IsFavorite = taskFavorites[task.ID]
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get all related tasks
|
// Get all related tasks
|
||||||
|
@ -1340,7 +1347,7 @@ func (t *Task) ReadOne(s *xorm.Session, a web.Auth) (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = addMoreInfoToTasks(s, taskMap)
|
err = addMoreInfoToTasks(s, taskMap, a)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -139,7 +139,7 @@ func (vcls *VikunjaCaldavListStorage) GetResourcesByList(rpaths []string) ([]dat
|
||||||
|
|
||||||
// GetTasksByUIDs...
|
// GetTasksByUIDs...
|
||||||
// Parse these into ressources...
|
// Parse these into ressources...
|
||||||
tasks, err := models.GetTasksByUIDs(s, uids)
|
tasks, err := models.GetTasksByUIDs(s, uids, vcls.user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = s.Rollback()
|
_ = s.Rollback()
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
Loading…
Reference in New Issue