1package backend
2
3import (
4 "context"
5
6 "github.com/charmbracelet/soft-serve/pkg/db/models"
7 "github.com/charmbracelet/soft-serve/pkg/proto"
8)
9
10// CreateTeam creates a new team for an organization.
11func (d *Backend) CreateTeam(ctx context.Context, org proto.Org, owner proto.User, name string) (proto.Team, error) {
12 m, err := d.store.CreateTeam(ctx, d.db, owner.ID(), org.ID(), name)
13 if err != nil {
14 return team{}, err
15 }
16 return team{m}, err
17}
18
19// ListTeams lists all teams for a user.
20func (d *Backend) ListTeams(ctx context.Context, user proto.User) ([]proto.Team, error) {
21 teams, err := d.store.ListTeams(ctx, d.db, user.ID())
22 var r []proto.Team
23 for _, m := range teams {
24 r = append(r, team{m})
25 }
26 return r, err
27}
28
29// GetTeam gets a team by organization id and team name.
30func (d *Backend) GetTeam(ctx context.Context, user proto.User, org proto.Org, name string) (proto.Team, error) {
31 m, err := d.store.FindTeamByOrgName(ctx, d.db, user.ID(), org.ID(), name)
32 if err != nil {
33 return team{}, err
34 }
35 return team{m}, err
36}
37
38// FindTeam finds a team by name.
39func (d *Backend) FindTeam(ctx context.Context, user proto.User, name string) ([]proto.Team, error) {
40 m, err := d.store.FindTeamByName(ctx, d.db, user.ID(), name)
41 var r []proto.Team
42 for _, m := range m {
43 r = append(r, team{m})
44 }
45 return r, err
46}
47
48// DeleteTeam deletes a team.
49func (d *Backend) DeleteTeam(ctx context.Context, _ proto.User, team proto.Team) error {
50 return d.store.DeleteTeamByID(ctx, d.db, team.ID())
51}
52
53type team struct {
54 t models.Team
55}
56
57var _ proto.Team = team{}
58
59// ID implements proto.Team.
60func (t team) ID() int64 {
61 return t.t.ID
62}
63
64// Name implements proto.Team.
65func (t team) Name() string {
66 return t.t.Name
67}
68
69// Org implements proto.Team.
70func (t team) Org() int64 {
71 return t.t.OrganizationID
72}