db.go
package models
import (
"github.com/readysite/readysite/pkg/database"
"github.com/readysite/readysite/pkg/database/engines"
)
var (
// DB is the database connection for the website CMS.
// Automatically selects engine based on environment variables:
// - DB_URL + DB_TOKEN: Remote libSQL replica
// - DB_PATH: Local file database
// - Neither: In-memory database
DB = engines.NewAuto()
// Users is the collection for User entities.
Users = database.Manage(DB, new(User),
database.WithUniqueIndex[User]("Email"),
)
// Pages is the collection for Page entities.
Pages = database.Manage(DB, new(Page),
database.WithIndex[Page]("ParentID"),
)
// PageContents is the collection for PageContent entities (versioned content).
PageContents = database.Manage(DB, new(PageContent),
database.WithIndex[PageContent]("PageID"),
database.WithIndex[PageContent]("CreatedBy"),
)
// Collections is the collection for Collection entities (dynamic schemas).
Collections = database.Manage(DB, new(Collection))
// Documents is the collection for Document entities.
Documents = database.Manage(DB, new(Document),
database.WithIndex[Document]("CollectionID"),
)
// Conversations is the collection for Conversation entities.
Conversations = database.Manage(DB, new(Conversation),
database.WithIndex[Conversation]("UserID"),
)
// Messages is the collection for Message entities.
Messages = database.Manage(DB, new(Message),
database.WithIndex[Message]("ConversationID"),
)
// Mutations is the collection for Mutation entities.
Mutations = database.Manage(DB, new(Mutation),
database.WithIndex[Mutation]("MessageID"),
database.WithIndex[Mutation]("EntityType", "EntityID"),
)
// ACLRules is the collection for ACLRule entities.
ACLRules = database.Manage(DB, new(ACLRule),
database.WithIndex[ACLRule]("SubjectType", "SubjectID"),
database.WithIndex[ACLRule]("ResourceType", "ResourceID"),
)
// SettingsStore is the collection for Settings entities.
SettingsStore = database.Manage(DB, new(Settings),
database.WithUniqueIndex[Settings]("Key"),
)
// Files is the collection for File entities.
Files = database.Manage(DB, new(File),
database.WithIndex[File]("UserID"),
database.WithIndex[File]("MimeType"),
database.WithIndex[File]("Published"),
)
// MessageFiles is the collection for MessageFile entities.
MessageFiles = database.Manage(DB, new(MessageFile),
database.WithIndex[MessageFile]("MessageID"),
database.WithIndex[MessageFile]("FileID"),
)
// AuditLogs is the collection for AuditLog entities.
AuditLogs = database.Manage(DB, new(AuditLog),
database.WithIndex[AuditLog]("UserID"),
database.WithIndex[AuditLog]("ResourceType", "ResourceID"),
database.WithIndex[AuditLog]("Action"),
)
// Partials is the collection for Partial entities (reusable HTML components).
Partials = database.Manage(DB, new(Partial),
database.WithIndex[Partial]("Published"),
)
// Notes is the collection for Note entities (persistent AI context).
Notes = database.Manage(DB, new(Note),
database.WithIndex[Note]("Type"),
database.WithIndex[Note]("Active"),
)
// ConversationSummaries is the collection for ConversationSummary entities.
ConversationSummaries = database.Manage(DB, new(ConversationSummary),
database.WithIndex[ConversationSummary]("ConversationID"),
)
// FileContentCaches is the collection for FileContentCache entities.
FileContentCaches = database.Manage(DB, new(FileContentCache),
database.WithIndex[FileContentCache]("FileID"),
)
)