sqlite

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 11, 2026 License: MIT Imports: 11 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type APIKeyRepository

type APIKeyRepository struct {
	// contains filtered or unexported fields
}

APIKeyRepository persists API keys using SQLite syntax. Implements apikey.Repository.

func NewAPIKeyRepository

func NewAPIKeyRepository(db *sql.DB) *APIKeyRepository

NewAPIKeyRepository creates a new SQLite API key repository.

func (*APIKeyRepository) CountByUserAndName

func (r *APIKeyRepository) CountByUserAndName(ctx context.Context, userID int, name string) (int, error)

CountByUserAndName returns the number of non-revoked keys for a user with the given name. Used by the domain service to prevent duplicate key names.

func (*APIKeyRepository) Create

func (r *APIKeyRepository) Create(ctx context.Context, key *apikey.APIKey) error

Create inserts a new API key record and populates key.ID with the assigned row ID.

func (*APIKeyRepository) FindByIDAndUserID

func (r *APIKeyRepository) FindByIDAndUserID(ctx context.Context, id, userID int) (*apikey.APIKey, error)

FindByIDAndUserID returns the single key matching (id, userID), or apikey.ErrKeyNotFound when no such row exists (covers nonexistent AND not-owned — identity scoping is enforced by the WHERE user_id predicate).

func (*APIKeyRepository) FindByKeyID

func (r *APIKeyRepository) FindByKeyID(ctx context.Context, keyID string) (*apikey.APIKey, error)

FindByKeyID returns the key matching the public lookup prefix keyID, INCLUDING revoked and expired rows, or apikey.ErrKeyNotFound if none. The deliberate absence of a revoked_at IS NULL filter lets the Service distinguish a verified-but-revoked key from an unknown keyID.

func (*APIKeyRepository) ListByUserID

func (r *APIKeyRepository) ListByUserID(ctx context.Context, userID int) ([]*apikey.APIKey, error)

ListByUserID returns all API keys owned by userID, newest-first. Returns an empty (non-nil) slice when the user has no keys.

func (*APIKeyRepository) RevokeByIDAndUserID

func (r *APIKeyRepository) RevokeByIDAndUserID(ctx context.Context, id, userID int, now time.Time) error

RevokeByIDAndUserID sets revoked_at = now for the matching (id, userID) row. No rows-affected check is performed — the Service guards via FindByIDAndUserID first, so a 0-row UPDATE only happens under a benign race and is harmless.

func (*APIKeyRepository) UpdateLastUsed

func (r *APIKeyRepository) UpdateLastUsed(ctx context.Context, id int, now time.Time, ip string) error

UpdateLastUsed sets last_used_at = now and last_used_ip = ip for the key id. Best-effort: no rows-affected check (the key was just verified to exist).

type ContentItem

type ContentItem struct {
	ID                 int           `json:"id"`
	UserID             int           `json:"userId"`
	Title              string        `json:"title"`
	Slug               string        `json:"slug"`
	Content            string        `json:"content"`
	Tags               string        `json:"tags"`
	Status             string        `json:"status"`
	Format             string        `json:"format"`
	PostType           string        `json:"postType"`
	MetaDescription    *string       `json:"metaDescription"`
	OGTitle            *string       `json:"ogTitle"`
	OGDescription      *string       `json:"ogDescription"`
	AllowComments      bool          `json:"allowComments"`
	CustomFields       *string       `json:"customFields"`
	Language           string        `json:"language"`
	TranslationGroupID sql.NullInt64 `json:"translationGroupId"`
	CreatedAt          time.Time     `json:"createdAt"`
	UpdatedAt          time.Time     `json:"updatedAt"`
}

ContentItem represents a content item in the database

type ContentRepository

type ContentRepository struct {
	// contains filtered or unexported fields
}

ContentRepository handles content data operations

func NewContentRepository

func NewContentRepository(db *sql.DB) *ContentRepository

NewContentRepository creates a new content repository

func (*ContentRepository) AuthorExists

func (r *ContentRepository) AuthorExists(ctx context.Context, username string) (bool, error)

func (*ContentRepository) CheckSlugUnique

func (r *ContentRepository) CheckSlugUnique(ctx context.Context, slug string, language string) (bool, error)

func (*ContentRepository) Count added in v0.8.0

func (r *ContentRepository) Count(ctx context.Context, userID int, filters contentdomain.ContentFilters) (int, error)

Count returns the number of content items matching the filters, using the same WHERE clause as ListByFilters (see buildContentFilterWhereClause). userID <= 0 counts across all users.

func (*ContentRepository) Create

func (r *ContentRepository) Create(ctx context.Context, content *contentdomain.Content) error

func (*ContentRepository) Delete

func (r *ContentRepository) Delete(ctx context.Context, id int, userID int) error

func (*ContentRepository) DeleteByID

func (r *ContentRepository) DeleteByID(ctx context.Context, id int) error

func (*ContentRepository) GetAll

func (r *ContentRepository) GetAll(ctx context.Context, limit int, offset int) ([]*contentdomain.Content, error)

func (*ContentRepository) GetByID

func (*ContentRepository) GetBySlug

func (r *ContentRepository) GetBySlug(ctx context.Context, slug string, language string) (*contentdomain.Content, error)

func (*ContentRepository) GetByUser

func (r *ContentRepository) GetByUser(ctx context.Context, userID int, limit int, offset int) ([]*contentdomain.Content, error)

func (*ContentRepository) GetLatestByPostType added in v0.4.0

func (r *ContentRepository) GetLatestByPostType(ctx context.Context, excludeID int, postType string, language string, limit int) ([]*contentdomain.Content, error)

func (*ContentRepository) GetPublished

func (r *ContentRepository) GetPublished(ctx context.Context, limit int, offset int) ([]*contentdomain.Content, error)

func (*ContentRepository) GetPublishedArchive added in v0.6.0

func (r *ContentRepository) GetPublishedArchive(ctx context.Context, postType string, languages []string) ([]*contentdomain.ArchiveMonth, error)

func (*ContentRepository) GetPublishedAuthor added in v0.7.0

func (r *ContentRepository) GetPublishedAuthor(ctx context.Context, username string) (*contentdomain.PublishedAuthor, error)

func (*ContentRepository) GetPublishedAuthors added in v0.5.0

func (*ContentRepository) GetPublishedByAuthorUsername

func (r *ContentRepository) GetPublishedByAuthorUsername(ctx context.Context, username string, languages []string, limit int, offset int) ([]*contentdomain.Content, error)

func (*ContentRepository) GetPublishedByPostType

func (r *ContentRepository) GetPublishedByPostType(ctx context.Context, postType string, languages []string, year int, month int, limit int, offset int) ([]*contentdomain.Content, error)

func (*ContentRepository) GetPublishedBySlug

func (r *ContentRepository) GetPublishedBySlug(ctx context.Context, slug string, language string) (*contentdomain.Content, error)

func (*ContentRepository) GetPublishedBySlugAny

func (r *ContentRepository) GetPublishedBySlugAny(ctx context.Context, slug string) (*contentdomain.Content, error)

func (*ContentRepository) GetPublishedByTag

func (r *ContentRepository) GetPublishedByTag(ctx context.Context, tag string, languages []string, year int, month int, limit int, offset int) ([]*contentdomain.Content, error)

func (*ContentRepository) GetPublishedCustomPostTypes

func (r *ContentRepository) GetPublishedCustomPostTypes(ctx context.Context) ([]string, error)

func (*ContentRepository) GetPublishedPages

func (r *ContentRepository) GetPublishedPages(ctx context.Context) ([]*contentdomain.Content, error)

func (*ContentRepository) GetPublishedTags added in v0.5.0

func (r *ContentRepository) GetPublishedTags(ctx context.Context) ([]string, error)

func (*ContentRepository) GetRelatedByTags added in v0.4.0

func (r *ContentRepository) GetRelatedByTags(ctx context.Context, excludeID int, tags []string, postType string, language string, limit int) ([]*contentdomain.Content, error)

func (*ContentRepository) GetTranslations

func (r *ContentRepository) GetTranslations(ctx context.Context, translationGroupID int, excludeID int) ([]*contentdomain.Content, error)

func (*ContentRepository) ListByCursor

func (r *ContentRepository) ListByCursor(ctx context.Context, userID int, limit int, beforeID int, filters contentdomain.ContentFilters) ([]*contentdomain.Content, error)

func (*ContentRepository) ListByFilters

func (r *ContentRepository) ListByFilters(ctx context.Context, userID int, filters contentdomain.ContentFilters) ([]*contentdomain.Content, error)

func (*ContentRepository) SearchPublished

func (r *ContentRepository) SearchPublished(ctx context.Context, query string, limit int) ([]*contentdomain.Content, error)

func (*ContentRepository) TranslationGroupExists

func (r *ContentRepository) TranslationGroupExists(ctx context.Context, id int) (bool, error)

func (*ContentRepository) Update

func (r *ContentRepository) Update(ctx context.Context, content *contentdomain.Content) error

type DashboardRepository

type DashboardRepository struct {
	// contains filtered or unexported fields
}

DashboardRepository handles dashboard data operations

func NewDashboardRepository

func NewDashboardRepository(db *sql.DB) *DashboardRepository

NewDashboardRepository creates a new dashboard repository

func (*DashboardRepository) GetStats

func (r *DashboardRepository) GetStats(ctx context.Context, userID int) (*dashboard.Stats, error)

GetStats retrieves aggregated statistics for the dashboard. userID <= 0 means "all users" (admin scope) and yields unfiltered content/media counts.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL