/
handlers.go
82 lines (72 loc) · 1.91 KB
/
handlers.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
package handlers
import (
"golang.org/x/net/context"
//"os"
"github.com/pkg/errors"
//sql "github.com/adamryman/ambition-users/sqlite"
sql "github.com/adamryman/ambition-users/mysql"
pb "github.com/adamryman/ambition-users/users-service"
"github.com/adamryman/kit/dbconn"
)
// NewService returns a naïve, stateless implementation of Service.
func NewService() pb.UsersServer {
//database, err := sql.Open(os.Getenv("SQLITE3"))
database, err := sql.Open(dbconn.FromENV("MYSQL").MySQL())
if err != nil {
// TODO: Do not panic, start something to try connection over and over.
// Maybe 100 times?
// DEBUG_SVC=1 then do like 3.
// There will also need to be retry logic for the database methods
panic(err)
}
return usersService{
db: database,
}
}
type usersService struct {
db *sql.Database
}
// CreateUser implements Service.
// TODO:
func (s usersService) CreateUser(ctx context.Context, in *pb.User) (*pb.User, error) {
// TODO: input validation
u, err := s.db.CreateUser(in)
if err != nil {
return nil, errors.Wrap(err, "cannot create user")
}
return u, nil
}
// ReadUser implements Service.
func (s usersService) ReadUser(ctx context.Context, in *pb.User) (*pb.User, error) {
if id := in.GetID(); id != 0 {
return s.db.ReadUserByID(id)
}
if id := in.GetTrello().GetID(); id != "" {
return s.db.ReadUserByTrelloID(id)
}
return nil, errors.New("cannot read action, need ID or TrelloInfo.ID")
}
// UpdateUser implements Service.
// TODO: non-MVP
func (s usersService) UpdateUser(ctx context.Context, in *pb.User) (*pb.User, error) {
// TODO: input validation
var resp pb.User
resp = pb.User{
// ID:
// Info:
// Trello:
}
return &resp, nil
}
// DeleteUser implements Service.
// TODO: non-MVP
func (s usersService) DeleteUser(ctx context.Context, in *pb.User) (*pb.User, error) {
// TODO: input validation
var resp pb.User
resp = pb.User{
// ID:
// Info:
// Trello:
}
return &resp, nil
}