/
user_bookmark.go
59 lines (49 loc) · 1.99 KB
/
user_bookmark.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package api
import (
"context"
"net/http"
"github.com/ovh/cds/engine/api/project"
"github.com/ovh/cds/engine/api/workflow"
"github.com/ovh/cds/engine/service"
"github.com/ovh/cds/sdk"
)
// postUserFavoriteHandler post favorite user for workflow or project
func (api *API) postUserFavoriteHandler() service.Handler {
return func(ctx context.Context, w http.ResponseWriter, r *http.Request) error {
params := sdk.FavoriteParams{}
if err := service.UnmarshalBody(r, ¶ms); err != nil {
return err
}
consumer := getUserConsumer(ctx)
p, err := project.Load(ctx, api.mustDB(), params.ProjectKey,
project.LoadOptions.WithIntegrations,
project.LoadOptions.WithFavorites(consumer.AuthConsumerUser.AuthentifiedUser.ID),
)
if err != nil {
return sdk.WrapError(err, "unable to load projet")
}
switch params.Type {
case "workflow":
wf, err := workflow.Load(ctx, api.mustDB(), api.Cache, *p, params.WorkflowName, workflow.LoadOptions{})
if err != nil {
return sdk.WrapError(err, "cannot load workflow %s/%s", params.ProjectKey, params.WorkflowName)
}
wf.Favorite, err = workflow.IsFavorite(api.mustDB(), wf, consumer.AuthConsumerUser.AuthentifiedUserID)
if err != nil {
return sdk.WrapError(err, "cannot load workflow favorite %s/%s", params.ProjectKey, params.WorkflowName)
}
if err := workflow.UpdateFavorite(api.mustDB(), wf.ID, consumer.AuthConsumerUser.AuthentifiedUser.ID, !wf.Favorite); err != nil {
return sdk.WrapError(err, "cannot change workflow %s/%s favorite", params.ProjectKey, params.WorkflowName)
}
wf.Favorite = !wf.Favorite
return service.WriteJSON(w, wf, http.StatusOK)
case "project":
if err := project.UpdateFavorite(api.mustDB(), p.ID, consumer.AuthConsumerUser.AuthentifiedUser.ID, !p.Favorite); err != nil {
return sdk.WrapError(err, "cannot change workflow %s favorite", p.Key)
}
p.Favorite = !p.Favorite
return service.WriteJSON(w, p, http.StatusOK)
}
return sdk.WithStack(sdk.ErrInvalidFavoriteType)
}
}