-
Notifications
You must be signed in to change notification settings - Fork 0
/
setconfig.go
90 lines (74 loc) · 2.35 KB
/
setconfig.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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package server
import (
"context"
"fmt"
"log"
"time"
"github.com/brotherlogic/gramophile/config"
pb "github.com/brotherlogic/gramophile/proto"
)
func (s *Server) SetConfig(ctx context.Context, req *pb.SetConfigRequest) (*pb.SetConfigResponse, error) {
u, err := s.getUser(ctx)
if err != nil {
return nil, fmt.Errorf("unable to get user: %w", err)
}
log.Printf("Got user: %v", u.GetUser())
log.Printf("Down to: %v", s.di.ForUser(u.GetUser()))
fields, err := s.di.ForUser(u.GetUser()).GetFields(ctx)
if err != nil {
return nil, fmt.Errorf("unable to promote di to user (or get fields): %w", err)
}
log.Printf("got these fields: %v", fields)
folders, moves, verr := config.ValidateConfig(ctx, u, fields, req.GetConfig())
if verr != nil {
return nil, fmt.Errorf("bad validate: %w", verr)
}
log.Printf("got folders: %v", folders)
for _, folder := range folders {
s.qc.Enqueue(ctx, &pb.EnqueueRequest{
Element: &pb.QueueElement{
RunDate: time.Now().UnixNano(),
Auth: u.GetAuth().GetToken(),
BackoffInSeconds: 60,
Entry: &pb.QueueElement_AddFolderUpdate{
AddFolderUpdate: &pb.AddFolderUpdate{FolderName: folder.GetName()},
},
}})
}
u.Moves = append(u.Moves, moves...)
u.Config = req.GetConfig()
u.LastConfigUpdate = time.Now().UnixNano()
log.Printf("Updated user: %v", u)
// Apply the config
keys, err := s.d.GetRecords(ctx, u.GetUser().GetDiscogsUserId())
if err != nil {
return nil, fmt.Errorf("error getting records: %w", err)
}
for _, key := range keys {
r, err := s.d.GetRecord(ctx, u.GetUser().GetDiscogsUserId(), key)
if err != nil {
return nil, fmt.Errorf("error getting record from key: %v -> %w", key, err)
}
err = config.Apply(u.Config, r)
if err != nil {
return nil, fmt.Errorf("unable to apply config: %w", err)
}
err = s.d.SaveRecord(ctx, u.GetUser().GetDiscogsUserId(), r)
if err != nil {
return nil, fmt.Errorf("unable to save record: %w", err)
}
}
_, err = s.qc.Enqueue(ctx, &pb.EnqueueRequest{
Element: &pb.QueueElement{
RunDate: time.Now().UnixNano(),
Auth: u.GetAuth().GetToken(),
BackoffInSeconds: 60,
Entry: &pb.QueueElement_MoveRecords{
MoveRecords: &pb.MoveRecords{},
},
}})
if err != nil {
return nil, fmt.Errorf("unable to enqueue: %w", err)
}
return &pb.SetConfigResponse{}, s.d.SaveUser(ctx, u)
}