mirror of
https://github.com/get-drexa/drive.git
synced 2026-02-02 21:31:18 +00:00
59 lines
1.3 KiB
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()
|
|
}
|