-
Notifications
You must be signed in to change notification settings - Fork 0
/
user.go
69 lines (53 loc) · 1.87 KB
/
user.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
package dq
import (
"context"
"time"
)
// User represents a user.
type User struct {
ID int
Email string
Password string
Collections []*Collection
EmailVerifiedAt time.Time
CreatedAt time.Time
UpdatedAt time.Time
}
// UserService represents a service for managing users.
type UserService interface {
// FindUserByID retrieves a user by ID along with their associated auth objects.
// Returns ENOTFOUND if user does not exist.
FindUserByID(ctx context.Context, id int, include UserInclude) (*User, error)
// FindUsers retrieves a list of users by filter. Also returns total count of matching
// users which may differ from returned results if filter.Limit is specified.
FindUsers(ctx context.Context, filter UserFilter, include UserInclude) ([]*User, int, error)
// FindUser retrieves a single user based on a filter
FindUser(ctx context.Context, filter UserFilter, include UserInclude) (*User, error)
// CreateUser creates a new user.
CreateUser(ctx context.Context, user *User) (*User, error)
// UpdateUser updates a user object. Returns EUNAUTHORIZED if current user is not
// the user that is being updated. Returns ENOTFOUND if user does not exist.
UpdateUser(ctx context.Context, id int, upd UserUpdate) (*User, error)
// DeleteUser permanently deletes a user and all owned dials. Returns EUNAUTHORIZED
// if current user is not the user being deleted. Returns ENOTFOUND if
// user does not exist.
DeleteUser(ctx context.Context, id int) error
}
// UserFilter represents a filter passed to FindUsers().
type UserFilter struct {
// Filtering fields.
ID *int
Email *string
// Restrict to subset of results.
Offset int
Limit int
}
// UserUpdate represents a set of fields to be updated via UpdateUser().
type UserUpdate struct {
Email *string
Password *string
EmailVerifiedAt *time.Time
}
type UserInclude struct {
Collections bool
}