-
Notifications
You must be signed in to change notification settings - Fork 0
/
teams.go
111 lines (90 loc) · 2.61 KB
/
teams.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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package controllers
import (
"context"
"github.com/google/uuid"
"github.com/zeiss/fiber-goth/adapters"
"github.com/zeiss/typhoon/internal/api/models"
"github.com/zeiss/typhoon/internal/api/ports"
)
// CreateTeamCommand ...
type CreateTeamCommand struct {
Name string `json:"name" validate:"required,min=3,max=255"`
Description string `json:"description" validate:"max=1024"`
}
// DeleteTeamCommand ...
type DeleteTeamCommand struct {
ID uuid.UUID `json:"id" validate:"required"`
}
// GetTeamQuery ...
type GetTeamQuery struct {
ID uuid.UUID `json:"id" validate:"required"`
}
// ListTeamsQuery ...
type ListTeamsQuery struct {
Offset int `json:"offset" validate:"required"`
Limit int `json:"limit" validate:"required"`
Sort string `json:"sort" validate:"required"`
Search string `json:"search" validate:"required"`
}
var _ TeamsController = (*teamsController)(nil)
// TeamsController ...
type TeamsController interface {
// CreateTeam ...
CreateTeam(ctx context.Context, cmd CreateTeamCommand) (adapters.GothTeam, error)
// DeleteTeam ...
DeleteTeam(ctx context.Context, cmd DeleteTeamCommand) error
// GetTeam ...
GetTeam(ctx context.Context, query GetTeamQuery) (adapters.GothTeam, error)
// ListTeams ...
ListTeams(ctx context.Context, query ListTeamsQuery) (models.Pagination[adapters.GothTeam], error)
}
type teamsController struct {
db ports.Teams
}
// NewTeamsController ...
func NewTeamsController(db ports.Teams) *teamsController {
return &teamsController{db}
}
// CreateTeam ...
func (c *teamsController) CreateTeam(ctx context.Context, cmd CreateTeamCommand) (adapters.GothTeam, error) {
team := adapters.GothTeam{
Name: cmd.Name,
Description: cmd.Description,
}
err := c.db.CreateTeam(ctx, &team)
if err != nil {
return team, err
}
return team, err
}
// DeleteTeam ...
func (c *teamsController) DeleteTeam(ctx context.Context, cmd DeleteTeamCommand) error {
team := adapters.GothTeam{
ID: cmd.ID,
}
return c.db.DeleteTeam(ctx, &team)
}
// GetTeam ...
func (c *teamsController) GetTeam(ctx context.Context, query GetTeamQuery) (adapters.GothTeam, error) {
team := adapters.GothTeam{
ID: query.ID,
}
err := c.db.GetTeam(ctx, &team)
if err != nil {
return team, err
}
return team, nil
}
// ListTeams ...
func (c *teamsController) ListTeams(ctx context.Context, query ListTeamsQuery) (models.Pagination[adapters.GothTeam], error) {
pagination := models.Pagination[adapters.GothTeam]{
Offset: query.Offset,
Limit: query.Limit,
Search: query.Search,
}
err := c.db.ListTeams(ctx, &pagination)
if err != nil {
return pagination, err
}
return pagination, nil
}