Documentation
¶
Overview ¶
Package models4datatug holds this extension's database objects and the dalgo keys they are stored under. Like the rest of the module it depends on dal-go only — no database client, no platform package.
Index ¶
- Constants
- func NewAIUsageKey(accountID, periodID string) *record.Key
- func NewCurrentPlanKey(accountID string) *record.Key
- func NewGithubProjectID(org, repo, folder string) string
- func NewProjectKey(projectID string) *record.Key
- func NewTestPlanKey(accountID string) *record.Key
- func NewUserExtKey(userID, extID string) *record.Key
- type AIUsageRecord
- type Created
- type PlanLimits
- type PlanRecord
- type Project
- type ProjectBrief
- type StoreBrief
- type UserExt
Constants ¶
const ( SpacesCollection = "spaces" PlanCollection = "plan" AIUsageCollection = "aiUsage" )
const ( // ProjectsCollection stores DataTug projects. ProjectsCollection = "datatug_projects" // UsersCollection is the platform's users collection. UsersCollection = "users" // UserExtCollection is the platform's collection of per-extension user // documents: users/{userID}/ext/{extID}. The DataTug extension's user data // (which stores and projects the user can see) lives there, never inline in // the core users/{userID} document. This mirrors the key that // sneat-core-modules' dal4userus.NewUserExtKey builds; the module builds it // itself so that it depends on dal-go only. UserExtCollection = "ext" // FirestoreStoreID is the store id of the DataTug cloud store. It is what // the web client sends as `?store=` and the key of the store brief in the // user's index. FirestoreStoreID = "firestore" // FirestoreStoreTitle is the human-readable title of the cloud store. FirestoreStoreTitle = "DataTug cloud" // GithubStoreID is the store id of a project hosted in a GitHub repository — // the id the web client's GitHub reader and navigation use. GithubStoreID = "github.com" // GithubStoreType is the store type reported for GitHub-hosted projects. GithubStoreType = "github" // GithubStoreTitle is the human-readable title of the GitHub store. GithubStoreTitle = "GitHub" // DefaultGithubProjectFolder is the repo folder a project lives in when the // user does not name one — the same default the web client's // parseGithubProjectId() applies. DefaultGithubProjectFolder = "datatug" // AccessPrivate means only the userIDs listed on the project can read it. AccessPrivate = "private" )
Variables ¶
This section is empty.
Functions ¶
func NewAIUsageKey ¶ added in v0.4.0
func NewCurrentPlanKey ¶ added in v0.4.0
NewCurrentPlanKey names only the live entitlement document. Test-mode reconciliation deliberately uses a different key and never feeds readers.
func NewGithubProjectID ¶ added in v0.2.0
NewGithubProjectID builds the id a GitHub-hosted project is addressed by: `repo@org@folder` — the format the web client's parseGithubProjectId() expects.
func NewProjectKey ¶
NewProjectKey builds the dalgo key of a project record.
func NewTestPlanKey ¶ added in v0.4.0
func NewUserExtKey ¶
NewUserExtKey builds the dalgo key of a user's DataTug index record: users/{userID}/ext/{extID}.
Types ¶
type AIUsageRecord ¶ added in v0.4.0
type AIUsageRecord struct {
V int `json:"v" firestore:"v"`
PeriodID string `json:"periodId" firestore:"periodId"`
Used int64 `json:"used" firestore:"used"`
Questions int64 `json:"questions" firestore:"questions"`
ByMember map[string]int64 `json:"byMember,omitempty" firestore:"byMember,omitempty"`
Capped bool `json:"capped,omitempty" firestore:"capped,omitempty"`
ResetsAt *time.Time `json:"resetsAt,omitempty" firestore:"resetsAt,omitempty"`
UpdatedAt *time.Time `json:"updatedAt,omitempty" firestore:"updatedAt,omitempty"`
}
AIUsageRecord is the version-1 UTC-month usage document.
type PlanLimits ¶ added in v0.4.0
type PlanLimits struct {
Contributors int64 `json:"contributors" firestore:"contributors"`
ProjectGuests int64 `json:"projectGuests" firestore:"projectGuests"`
ProjectContributors *int64 `json:"projectContributors,omitempty" firestore:"projectContributors,omitempty"`
AIQuestions int64 `json:"aiQuestions" firestore:"aiQuestions"`
AIModelClasses []string `json:"aiModelClasses" firestore:"aiModelClasses"`
AIPaysFor string `json:"aiPaysFor" firestore:"aiPaysFor"`
}
PlanLimits is the version-1 allowance carried by a paid plan or a response. A Free allowance comes from host configuration, never from a stored plan.
type PlanRecord ¶ added in v0.4.0
type PlanRecord struct {
V int `json:"v" firestore:"v"`
Plan string `json:"plan" firestore:"plan"`
Status string `json:"status" firestore:"status"`
Period string `json:"period" firestore:"period"`
PaidUntil *time.Time `json:"paidUntil,omitempty" firestore:"paidUntil,omitempty"`
EndsAt *time.Time `json:"endsAt,omitempty" firestore:"endsAt,omitempty"`
EndedReason string `json:"endedReason,omitempty" firestore:"endedReason,omitempty"`
Founding bool `json:"founding" firestore:"founding"`
Limits *PlanLimits `json:"limits,omitempty" firestore:"limits,omitempty"`
AIExtraQuestions int64 `json:"aiExtraQuestions,omitempty" firestore:"aiExtraQuestions,omitempty"`
UpdatedAt *time.Time `json:"updatedAt,omitempty" firestore:"updatedAt,omitempty"`
}
PlanRecord is the version-1 plan/current document. Test-mode reconciliation writes plan/test instead; readers of live entitlements never use that path.
type Project ¶
type Project struct {
Title string `json:"title" firestore:"title"`
Access string `json:"access,omitempty" firestore:"access,omitempty"`
UserIDs []string `json:"userIDs,omitempty" firestore:"userIDs,omitempty"`
Created *Created `json:"created,omitempty" firestore:"created,omitempty"`
}
Project is the data stored in a datatug_projects/{projectID} record.
type ProjectBrief ¶
type ProjectBrief struct {
Title string `json:"title" firestore:"title"`
Access string `json:"access,omitempty" firestore:"access,omitempty"`
}
ProjectBrief is a brief of one project in a user's DataTug index.
type StoreBrief ¶
type StoreBrief struct {
Title string `json:"title" firestore:"title"`
Type string `json:"type" firestore:"type"`
URL string `json:"url,omitempty" firestore:"url,omitempty"`
Projects map[string]*ProjectBrief `json:"projects,omitempty" firestore:"projects,omitempty"`
}
StoreBrief is a brief of one store in a user's DataTug index.
type UserExt ¶
type UserExt struct {
Stores map[string]*StoreBrief `json:"stores,omitempty" firestore:"stores,omitempty"`
}
UserExt is the DataTug extension data of one user: the index of the DataTug stores the user can see, and the project briefs inside each of them. It is the data of the users/{userID}/ext/datatug record.