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// CreateOrg creates a new organization.
11func (d *Backend) CreateOrg(ctx context.Context, owner proto.User, name, email string) (proto.Org, error) {
12 o, err := d.store.CreateOrg(ctx, d.db, owner.ID(), name, email)
13 if err != nil {
14 return org{}, err
15 }
16 return org{o}, err
17}
18
19// ListOrgs lists all organizations for a user.
20func (d *Backend) ListOrgs(ctx context.Context, user proto.User) ([]proto.Org, error) {
21 orgs, err := d.store.ListOrgs(ctx, d.db, user.ID())
22 var r []proto.Org
23 for _, o := range orgs {
24 r = append(r, org{o})
25 }
26 return r, err
27}
28
29// FindOrganization finds an organization belonging to a user by name.
30func (d *Backend) FindOrganization(ctx context.Context, user proto.User, name string) (proto.Org, error) {
31 o, err := d.store.FindOrgByHandle(ctx, d.db, user.ID(), name)
32 return org{o}, err
33}
34
35// DeleteOrganization deletes an organization for a user.
36func (d *Backend) DeleteOrganization(ctx context.Context, user proto.User, name string) error {
37 o, err := d.store.FindOrgByHandle(ctx, d.db, user.ID(), name)
38 if err != nil {
39 return err
40 }
41 return d.store.DeleteOrgByID(ctx, d.db, user.ID(), o.ID)
42}
43
44type org struct {
45 o models.Organization
46}
47
48var _ proto.Org = org{}
49
50// DisplayName implements proto.Org.
51func (o org) DisplayName() string {
52 if o.o.Name.Valid {
53 return o.o.Name.String
54 }
55 return ""
56}
57
58// ID implements proto.Org.
59func (o org) ID() int64 {
60 return o.o.ID
61}
62
63// Handle implements proto.Org.
64func (o org) Handle() string {
65 return o.o.Handle.Handle
66}