/
project.go
74 lines (64 loc) · 1.7 KB
/
project.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
package entgo
import (
"context"
"math/rand"
"time"
"github.com/DanielTitkov/teams-bot-example/internal/domain"
"github.com/DanielTitkov/teams-bot-example/internal/repository/entgo/ent"
"github.com/DanielTitkov/teams-bot-example/internal/repository/entgo/ent/user"
)
func (r *EntgoRepository) CreateProject(u *domain.User, p *domain.Project) (*domain.Project, error) {
project, err := r.client.Project.
Create().
SetUserID(u.ID).
SetTitle(p.Title).
SetDueDate(p.DueDate).
Save(context.Background())
if err != nil {
return nil, err
}
return r.entToDomainProject(u, project), nil
}
func (r *EntgoRepository) GetUserProjects(u *domain.User) ([]*domain.Project, error) {
projects, err := r.client.User.
Query().
Where(user.UsernameEQ(u.Username)).
QueryProjects().
All(context.Background())
if err != nil {
return nil, err
}
var res []*domain.Project
for _, p := range projects {
res = append(res, r.entToDomainProject(u, p))
}
return res, nil
}
func (r *EntgoRepository) GetRandomProjectByUser() ([]*domain.Project, error) {
users, err := r.client.User.
Query().
WithProjects().
All(context.Background())
if err != nil {
return nil, err
}
var res []*domain.Project
for _, u := range users {
projects := u.Edges.Projects
rnd := rand.New(rand.NewSource(time.Now().Unix()))
if len(projects) < 1 {
continue
}
project := projects[rnd.Intn(len(projects))]
res = append(res, r.entToDomainProject(&domain.User{Username: u.Username}, project))
}
return res, nil
}
func (r *EntgoRepository) entToDomainProject(u *domain.User, p *ent.Project) *domain.Project {
return &domain.Project{
ID: p.ID,
User: u.Username,
Title: p.Title,
DueDate: p.DueDate,
}
}