Files
drive/apps/backend/internal/organization/organization.go

59 lines
1.3 KiB
Go

package organization
import (
"encoding/json"
"time"
"github.com/google/uuid"
"github.com/uptrace/bun"
)
type Kind string
const (
KindPersonal Kind = "personal"
KindTeam Kind = "team"
)
type Organization struct {
bun.BaseModel `bun:"organizations" swaggerignore:"true"`
ID uuid.UUID `bun:",pk,type:uuid" json:"id"`
Kind Kind `bun:"kind,notnull" json:"kind" example:"personal"`
Name string `bun:"name,notnull" json:"name" example:"Personal"`
Slug *string `bun:"slug" json:"slug,omitempty" example:"test-org"`
CreatedAt time.Time `bun:"created_at,notnull,nullzero" json:"createdAt"`
UpdatedAt time.Time `bun:"updated_at,notnull,nullzero" json:"updatedAt"`
}
func (o Organization) MarshalJSON() ([]byte, error) {
type organizationJSON struct {
ID uuid.UUID `json:"id"`
Kind Kind `json:"kind"`
Name string `json:"name"`
Slug *string `json:"slug,omitempty"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
}
slug := o.Slug
if o.Kind == KindPersonal {
s := ReservedSlug
slug = &s
}
return json.Marshal(organizationJSON{
ID: o.ID,
Kind: o.Kind,
Name: o.Name,
Slug: slug,
CreatedAt: o.CreatedAt,
UpdatedAt: o.UpdatedAt,
})
}
func newOrganizationID() (uuid.UUID, error) {
return uuid.NewV7()
}