-
Notifications
You must be signed in to change notification settings - Fork 0
/
user.go
78 lines (64 loc) · 1.7 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
70
71
72
73
74
75
76
77
78
package anor
import (
"context"
"strings"
"time"
)
const (
userKey = "userKey"
)
// NewContextWithUser NewContext returns a new Context that carries value u.
func NewContextWithUser(ctx context.Context, u *User) context.Context {
return context.WithValue(ctx, userKey, u)
}
// UserFromContext FromContext returns the User value stored in ctx, if any.
func UserFromContext(ctx context.Context) *User {
u, ok := ctx.Value(userKey).(*User)
if !ok {
return nil
}
return u
}
type UserStatus string
const (
UserStatusBlocked UserStatus = "Blocked"
UserStatusRegistrationPending UserStatus = "RegistrationPending"
UserStatusActive UserStatus = "Active"
)
type Role string
const (
RoleCustomer Role = "customer"
RoleSeller Role = "seller"
RoleAdmin Role = "admin"
)
type User struct {
ID int64
Email string
Password string
PhoneNumber string
FullName string
Status UserStatus
CreatedAt time.Time
UpdatedAt time.Time
Roles []Role
Cart *Cart
//Wishlist Wishlist
Orders []Order
ActivityCounts UserActivityCounts
}
type UserActivityCounts struct {
CartItemsCount int
WishlistItemsCount int
ActiveOrdersCount int
}
func (u User) GetFirstname() string {
return strings.Fields(u.FullName)[0]
}
type UserService interface {
CreateUser(ctx context.Context, user User) error
GetUser(ctx context.Context, id int64) (User, error)
GetUserByEmail(ctx context.Context, email string) (User, error)
UpdateUserStatusByEmail(ctx context.Context, status UserStatus, email string) error
UpdateUserPassword(ctx context.Context, id int64, password string) error
GetUserActivityCounts(ctx context.Context, id int64) (UserActivityCounts, error)
}