Documentation
¶
Index ¶
- Variables
- func ValidateTransition(from, to Status) error
- type AccessRequest
- func (m *AccessRequest) DecodeFields(r model.FieldReader)
- func (m *AccessRequest) EncodeFields(w model.FieldWriter)
- func (m *AccessRequest) IsNil() bool
- func (m *AccessRequest) ModelName() string
- func (m *AccessRequest) Pointers() []any
- func (m *AccessRequest) Schema() []model.Field
- func (m *AccessRequest) Validate(action byte) error
- type AccessRequestList
- func (s *AccessRequestList) Append() model.Fielder
- func (s *AccessRequestList) At(i int) model.Fielder
- func (s *AccessRequestList) DecodeFields(_ model.FieldReader)
- func (s *AccessRequestList) EncodeFields(_ model.FieldWriter)
- func (s *AccessRequestList) IsNil() bool
- func (s *AccessRequestList) Len() int
- func (s *AccessRequestList) Pointers() []any
- func (s *AccessRequestList) Schema() []model.Field
- type Deps
- type Module
- func (m *Module) AcceptRequest(id string) error
- func (m *Module) AddMember(siteID, userID string, role Role) (*SiteMember, error)
- func (m *Module) CreatePlan(p *Plan) error
- func (m *Module) CreateSite(site *Site) error
- func (m *Module) DirtySites() (SiteList, error)
- func (m *Module) MarkDirty(siteID string) error
- func (m *Module) MarkPublished(siteID, ref string) error
- func (m *Module) MemberOf(userID, siteID string) (Role, bool)
- func (m *Module) ModelName() string
- func (m *Module) MountOps(reg router.OpRegistry)
- func (m *Module) PendingRequests() ([]AccessRequest, error)
- func (m *Module) PlanOf(siteID string) (Plan, error)
- func (m *Module) Request(email, name, message string) (req AccessRequest, created bool, err error)
- func (m *Module) RequestByID(id string) (AccessRequest, error)
- func (m *Module) SiteByID(siteID string) (*Site, error)
- func (m *Module) SitesOf(userID string) ([]Site, error)
- func (m *Module) UpdateSiteStatus(siteID string, newStatus Status) error
- type Plan
- type PlanList
- func (s *PlanList) Append() model.Fielder
- func (s *PlanList) At(i int) model.Fielder
- func (s *PlanList) DecodeFields(_ model.FieldReader)
- func (s *PlanList) EncodeFields(_ model.FieldWriter)
- func (s *PlanList) IsNil() bool
- func (s *PlanList) Len() int
- func (s *PlanList) Pointers() []any
- func (s *PlanList) Schema() []model.Field
- type RequestStatus
- type Role
- type Site
- type SiteList
- func (s *SiteList) Append() model.Fielder
- func (s *SiteList) At(i int) model.Fielder
- func (s *SiteList) DecodeFields(_ model.FieldReader)
- func (s *SiteList) EncodeFields(_ model.FieldWriter)
- func (s *SiteList) IsNil() bool
- func (s *SiteList) Len() int
- func (s *SiteList) Pointers() []any
- func (s *SiteList) Schema() []model.Field
- type SiteMember
- func (m *SiteMember) DecodeFields(r model.FieldReader)
- func (m *SiteMember) EncodeFields(w model.FieldWriter)
- func (m *SiteMember) IsNil() bool
- func (m *SiteMember) ModelName() string
- func (m *SiteMember) Pointers() []any
- func (m *SiteMember) Schema() []model.Field
- func (m *SiteMember) SchemaExt() []model.FieldExt
- func (m *SiteMember) Validate(action byte) error
- type SiteMemberList
- func (s *SiteMemberList) Append() model.Fielder
- func (s *SiteMemberList) At(i int) model.Fielder
- func (s *SiteMemberList) DecodeFields(_ model.FieldReader)
- func (s *SiteMemberList) EncodeFields(_ model.FieldWriter)
- func (s *SiteMemberList) IsNil() bool
- func (s *SiteMemberList) Len() int
- func (s *SiteMemberList) Pointers() []any
- func (s *SiteMemberList) Schema() []model.Field
- type Status
Constants ¶
This section is empty.
Variables ¶
var ( ErrNotFound = fmt.Err("site_manager", "not", "found") ErrAlreadyExists = fmt.Err("site_manager", "already", "exists") ErrInvalidTransition = fmt.Err("site_manager", "invalid", "transition") ErrInvalidData = fmt.Err("site_manager", "invalid", "data") ErrNilDependency = fmt.Err("site_manager", "nil", "dependency") )
var AccessRequestModel = model.Definition{ Name: "access_request", Fields: model.Fields{ {Name: "id", Type: model.Text(), DB: &model.FieldDB{PK: true}}, {Name: "email", Type: model.Text(), NotNull: true}, {Name: "name", Type: model.Text()}, {Name: "message", Type: model.Text()}, {Name: "created_at", Type: model.Int()}, {Name: "status", Type: model.Int()}, }, }
var AccessRequest_ = struct { Id string Email string Name string Message string CreatedAt string Status string }{ Id: "id", Email: "email", Name: "name", Message: "message", CreatedAt: "created_at", Status: "status", }
var PlanModel = model.Definition{ Name: "plan", Fields: model.Fields{ {Name: "name", Type: model.Text(), DB: &model.FieldDB{PK: true}}, {Name: "max_pages", Type: model.Int()}, {Name: "max_images", Type: model.Int()}, {Name: "custom_domain", Type: model.Bool()}, }, }
var Plan_ = struct { Name string MaxPages string MaxImages string CustomDomain string }{ Name: "name", MaxPages: "max_pages", MaxImages: "max_images", CustomDomain: "custom_domain", }
var SiteMemberModel = model.Definition{ Name: "site_member", Fields: model.Fields{ {Name: "id", Type: model.Text(), DB: &model.FieldDB{PK: true}}, {Name: "site_id", Type: model.Text(), NotNull: true, Ref: &SiteModel, DB: &model.FieldDB{RefColumn: "id"}}, {Name: "user_id", Type: model.Text(), NotNull: true}, {Name: "role", Type: model.Int()}, }, }
var SiteMember_ = struct { Id string SiteId string UserId string Role string }{ Id: "id", SiteId: "site_id", UserId: "user_id", Role: "role", }
var SiteModel = model.Definition{ Name: "site", Fields: model.Fields{ {Name: "id", Type: model.Text(), DB: &model.FieldDB{PK: true}}, {Name: "slug", Type: model.Text(), NotNull: true, DB: &model.FieldDB{Unique: true}}, {Name: "name", Type: model.Text(), NotNull: true}, {Name: "domain", Type: model.Text()}, {Name: "domain_expires_at", Type: model.Int()}, {Name: "plan", Type: model.Text()}, {Name: "theme", Type: model.Text(), NotNull: true}, {Name: "status", Type: model.Int()}, {Name: "dirty", Type: model.Bool()}, {Name: "published_at", Type: model.Int()}, {Name: "published_ref", Type: model.Text()}, }, }
var Site_ = struct { Id string Slug string Name string Domain string DomainExpiresAt string Plan string Theme string Status string Dirty string PublishedAt string PublishedRef string }{ Id: "id", Slug: "slug", Name: "name", Domain: "domain", DomainExpiresAt: "domain_expires_at", Plan: "plan", Theme: "theme", Status: "status", Dirty: "dirty", PublishedAt: "published_at", PublishedRef: "published_ref", }
Functions ¶
func ValidateTransition ¶ added in v0.1.0
Types ¶
type AccessRequest ¶ added in v0.1.0
type AccessRequest struct {
Id string
Email string
Name string
Message string
CreatedAt int64
Status int64
}
func ReadOneAccessRequest ¶ added in v0.1.0
func ReadOneAccessRequest(qb *orm.QB, model *AccessRequest) (*AccessRequest, error)
func (*AccessRequest) DecodeFields ¶ added in v0.1.0
func (m *AccessRequest) DecodeFields(r model.FieldReader)
func (*AccessRequest) EncodeFields ¶ added in v0.1.0
func (m *AccessRequest) EncodeFields(w model.FieldWriter)
func (*AccessRequest) IsNil ¶ added in v0.1.0
func (m *AccessRequest) IsNil() bool
func (*AccessRequest) ModelName ¶ added in v0.1.0
func (m *AccessRequest) ModelName() string
func (*AccessRequest) Pointers ¶ added in v0.1.0
func (m *AccessRequest) Pointers() []any
func (*AccessRequest) Schema ¶ added in v0.1.0
func (m *AccessRequest) Schema() []model.Field
func (*AccessRequest) Validate ¶ added in v0.1.0
func (m *AccessRequest) Validate(action byte) error
type AccessRequestList ¶ added in v0.1.0
type AccessRequestList []*AccessRequest
func ReadAllAccessRequest ¶ added in v0.1.0
func ReadAllAccessRequest(qb *orm.QB) (AccessRequestList, error)
func (*AccessRequestList) Append ¶ added in v0.1.0
func (s *AccessRequestList) Append() model.Fielder
func (*AccessRequestList) DecodeFields ¶ added in v0.1.0
func (s *AccessRequestList) DecodeFields(_ model.FieldReader)
func (*AccessRequestList) EncodeFields ¶ added in v0.1.0
func (s *AccessRequestList) EncodeFields(_ model.FieldWriter)
func (*AccessRequestList) IsNil ¶ added in v0.1.0
func (s *AccessRequestList) IsNil() bool
func (*AccessRequestList) Len ¶ added in v0.1.0
func (s *AccessRequestList) Len() int
func (*AccessRequestList) Pointers ¶ added in v0.1.0
func (s *AccessRequestList) Pointers() []any
func (*AccessRequestList) Schema ¶ added in v0.1.0
func (s *AccessRequestList) Schema() []model.Field
type Module ¶ added in v0.1.0
type Module struct {
// contains filtered or unexported fields
}
func (*Module) AcceptRequest ¶ added in v0.1.0
AcceptRequest accepts an access request by setting its status to RequestAccepted. Note: Accepting an AccessRequest creates ZERO SiteMember entries.
func (*Module) AddMember ¶ added in v0.1.0
func (m *Module) AddMember(siteID, userID string, role Role) (*SiteMember, error)
AddMember adds a user membership to a site.
func (*Module) CreatePlan ¶ added in v0.3.0
CreatePlan registra un plan con sus límites.
func (*Module) CreateSite ¶ added in v0.1.0
CreateSite creates a new site ensuring slug uniqueness.
func (*Module) DirtySites ¶ added in v0.2.0
DirtySites devuelve los sitios pendientes de publicar, excluyendo los suspendidos.
func (*Module) MarkDirty ¶ added in v0.2.0
MarkDirty marca el sitio como pendiente de publicar. Es idempotente: si ya estaba sucio no vuelve a escribir.
func (*Module) MarkPublished ¶ added in v0.2.0
MarkPublished registra una publicación exitosa: limpia Dirty, guarda cuándo y con qué referencia, y promueve el sitio a Live si era un borrador.
Ventana conocida: si el cliente guarda contenido mientras CI construye, MarkPublished limpiará un Dirty que corresponde a un cambio más nuevo, y ese cambio esperará al cron diario de publicación. Resolverlo de verdad exige versionar el contenido, que hoy no existe.
func (*Module) MemberOf ¶ added in v0.1.0
MemberOf responds whether a user can touch a site, and with what role. It is the ONLY way to answer this question.
func (*Module) MountOps ¶ added in v0.1.0
func (m *Module) MountOps(reg router.OpRegistry)
func (*Module) PendingRequests ¶ added in v0.4.0
func (m *Module) PendingRequests() ([]AccessRequest, error)
PendingRequests devuelve las solicitudes de acceso sin resolver, de la más antigua a la más reciente. Nota: Deja el orden natural de inserción que en mem/D1 coincide con el de creación.
func (*Module) Request ¶ added in v0.1.0
func (m *Module) Request(email, name, message string) (req AccessRequest, created bool, err error)
Request registers an access request. If a pending request already exists for that email, returns the existing one and created=false.
func (*Module) RequestByID ¶ added in v0.4.0
func (m *Module) RequestByID(id string) (AccessRequest, error)
RequestByID devuelve la solicitud de acceso con ese id.
type Plan ¶ added in v0.1.0
func (*Plan) DecodeFields ¶ added in v0.1.0
func (m *Plan) DecodeFields(r model.FieldReader)
func (*Plan) EncodeFields ¶ added in v0.1.0
func (m *Plan) EncodeFields(w model.FieldWriter)
type PlanList ¶ added in v0.1.0
type PlanList []*Plan
func (*PlanList) DecodeFields ¶ added in v0.1.0
func (s *PlanList) DecodeFields(_ model.FieldReader)
func (*PlanList) EncodeFields ¶ added in v0.1.0
func (s *PlanList) EncodeFields(_ model.FieldWriter)
type RequestStatus ¶ added in v0.1.0
type RequestStatus uint8
const ( RequestPending RequestStatus = iota // ZERO VALUE RequestAccepted RequestRejected )
func (RequestStatus) String ¶ added in v0.1.0
func (s RequestStatus) String() string
type Site ¶ added in v0.1.0
type Site struct {
Id string
Slug string
Name string
Domain string
DomainExpiresAt int64
Plan string
Theme string
Status int64
Dirty bool
PublishedAt int64
PublishedRef string
}
func (*Site) DecodeFields ¶ added in v0.1.0
func (m *Site) DecodeFields(r model.FieldReader)
func (*Site) EncodeFields ¶ added in v0.1.0
func (m *Site) EncodeFields(w model.FieldWriter)
type SiteList ¶ added in v0.1.0
type SiteList []*Site
func (*SiteList) DecodeFields ¶ added in v0.1.0
func (s *SiteList) DecodeFields(_ model.FieldReader)
func (*SiteList) EncodeFields ¶ added in v0.1.0
func (s *SiteList) EncodeFields(_ model.FieldWriter)
type SiteMember ¶ added in v0.1.0
func ReadOneSiteMember ¶ added in v0.1.0
func ReadOneSiteMember(qb *orm.QB, model *SiteMember) (*SiteMember, error)
func (*SiteMember) DecodeFields ¶ added in v0.1.0
func (m *SiteMember) DecodeFields(r model.FieldReader)
func (*SiteMember) EncodeFields ¶ added in v0.1.0
func (m *SiteMember) EncodeFields(w model.FieldWriter)
func (*SiteMember) IsNil ¶ added in v0.1.0
func (m *SiteMember) IsNil() bool
func (*SiteMember) ModelName ¶ added in v0.1.0
func (m *SiteMember) ModelName() string
func (*SiteMember) Pointers ¶ added in v0.1.0
func (m *SiteMember) Pointers() []any
func (*SiteMember) Schema ¶ added in v0.1.0
func (m *SiteMember) Schema() []model.Field
func (*SiteMember) SchemaExt ¶ added in v0.1.0
func (m *SiteMember) SchemaExt() []model.FieldExt
func (*SiteMember) Validate ¶ added in v0.1.0
func (m *SiteMember) Validate(action byte) error
type SiteMemberList ¶ added in v0.1.0
type SiteMemberList []*SiteMember
func ReadAllSiteMember ¶ added in v0.1.0
func ReadAllSiteMember(qb *orm.QB) (SiteMemberList, error)
func (*SiteMemberList) Append ¶ added in v0.1.0
func (s *SiteMemberList) Append() model.Fielder
func (*SiteMemberList) DecodeFields ¶ added in v0.1.0
func (s *SiteMemberList) DecodeFields(_ model.FieldReader)
func (*SiteMemberList) EncodeFields ¶ added in v0.1.0
func (s *SiteMemberList) EncodeFields(_ model.FieldWriter)
func (*SiteMemberList) IsNil ¶ added in v0.1.0
func (s *SiteMemberList) IsNil() bool
func (*SiteMemberList) Len ¶ added in v0.1.0
func (s *SiteMemberList) Len() int
func (*SiteMemberList) Pointers ¶ added in v0.1.0
func (s *SiteMemberList) Pointers() []any
func (*SiteMemberList) Schema ¶ added in v0.1.0
func (s *SiteMemberList) Schema() []model.Field