41 lines
1.1 KiB
Go
41 lines
1.1 KiB
Go
package org
|
|
|
|
import (
|
|
"context"
|
|
|
|
"go.b0esche.cloud/backend/internal/database"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
// ResolveUserOrgs returns the organizations a user belongs to
|
|
func ResolveUserOrgs(ctx context.Context, db *database.DB, userID uuid.UUID) ([]database.Organization, error) {
|
|
return db.GetUserOrganizations(ctx, userID)
|
|
}
|
|
|
|
// CheckMembership checks if user is member of org and returns role
|
|
func CheckMembership(ctx context.Context, db *database.DB, userID, orgID uuid.UUID) (string, error) {
|
|
membership, err := db.GetUserMembership(ctx, userID, orgID)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return membership.Role, nil
|
|
}
|
|
|
|
// CreateOrg creates a new organization and adds the user as owner
|
|
func CreateOrg(ctx context.Context, db *database.DB, userID uuid.UUID, name, slug string) (*database.Organization, error) {
|
|
if slug == "" {
|
|
// Simple slug generation
|
|
slug = name // TODO: make URL safe
|
|
}
|
|
org, err := db.CreateOrg(ctx, name, slug)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
err = db.AddMembership(ctx, userID, org.ID, "owner")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return org, nil
|
|
}
|