readysite / website / models / db.go
3.5 KB
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"),
	)
)
← Back