org.go

 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}