Documentation
¶
Index ¶
- type APIKeyRepository
- func (r *APIKeyRepository) CountByUserAndName(ctx context.Context, userID int, name string) (int, error)
- func (r *APIKeyRepository) Create(ctx context.Context, key *apikey.APIKey) error
- func (r *APIKeyRepository) FindByIDAndUserID(ctx context.Context, id, userID int) (*apikey.APIKey, error)
- func (r *APIKeyRepository) FindByKeyID(ctx context.Context, keyID string) (*apikey.APIKey, error)
- func (r *APIKeyRepository) ListByUserID(ctx context.Context, userID int) ([]*apikey.APIKey, error)
- func (r *APIKeyRepository) RevokeByIDAndUserID(ctx context.Context, id, userID int, now time.Time) error
- func (r *APIKeyRepository) UpdateLastUsed(ctx context.Context, id int, now time.Time, ip string) error
- type ContentItem
- type ContentRepository
- func (r *ContentRepository) AuthorExists(ctx context.Context, username string) (bool, error)
- func (r *ContentRepository) CheckSlugUnique(ctx context.Context, slug string, language string) (bool, error)
- func (r *ContentRepository) Count(ctx context.Context, userID int, filters contentdomain.ContentFilters) (int, error)
- func (r *ContentRepository) Create(ctx context.Context, content *contentdomain.Content) error
- func (r *ContentRepository) Delete(ctx context.Context, id int, userID int) error
- func (r *ContentRepository) DeleteByID(ctx context.Context, id int) error
- func (r *ContentRepository) GetAll(ctx context.Context, limit int, offset int) ([]*contentdomain.Content, error)
- func (r *ContentRepository) GetByID(ctx context.Context, id int) (*contentdomain.Content, error)
- func (r *ContentRepository) GetBySlug(ctx context.Context, slug string, language string) (*contentdomain.Content, error)
- func (r *ContentRepository) GetByUser(ctx context.Context, userID int, limit int, offset int) ([]*contentdomain.Content, error)
- func (r *ContentRepository) GetLatestByPostType(ctx context.Context, excludeID int, postType string, language string, ...) ([]*contentdomain.Content, error)
- func (r *ContentRepository) GetPublished(ctx context.Context, limit int, offset int) ([]*contentdomain.Content, error)
- func (r *ContentRepository) GetPublishedArchive(ctx context.Context, postType string, languages []string) ([]*contentdomain.ArchiveMonth, error)
- func (r *ContentRepository) GetPublishedAuthor(ctx context.Context, username string) (*contentdomain.PublishedAuthor, error)
- func (r *ContentRepository) GetPublishedAuthors(ctx context.Context, filters contentdomain.PublishedAuthorFilters) ([]*contentdomain.PublishedAuthor, error)
- func (r *ContentRepository) GetPublishedByAuthorUsername(ctx context.Context, username string, languages []string, limit int, ...) ([]*contentdomain.Content, error)
- func (r *ContentRepository) GetPublishedByPostType(ctx context.Context, postType string, languages []string, year int, month int, ...) ([]*contentdomain.Content, error)
- func (r *ContentRepository) GetPublishedBySlug(ctx context.Context, slug string, language string) (*contentdomain.Content, error)
- func (r *ContentRepository) GetPublishedBySlugAny(ctx context.Context, slug string) (*contentdomain.Content, error)
- func (r *ContentRepository) GetPublishedByTag(ctx context.Context, tag string, languages []string, year int, month int, ...) ([]*contentdomain.Content, error)
- func (r *ContentRepository) GetPublishedCustomPostTypes(ctx context.Context) ([]string, error)
- func (r *ContentRepository) GetPublishedPages(ctx context.Context) ([]*contentdomain.Content, error)
- func (r *ContentRepository) GetPublishedTags(ctx context.Context) ([]string, error)
- func (r *ContentRepository) GetRelatedByTags(ctx context.Context, excludeID int, tags []string, postType string, ...) ([]*contentdomain.Content, error)
- func (r *ContentRepository) GetTranslations(ctx context.Context, translationGroupID int, excludeID int) ([]*contentdomain.Content, error)
- func (r *ContentRepository) ListByCursor(ctx context.Context, userID int, limit int, beforeID int, ...) ([]*contentdomain.Content, error)
- func (r *ContentRepository) ListByFilters(ctx context.Context, userID int, filters contentdomain.ContentFilters) ([]*contentdomain.Content, error)
- func (r *ContentRepository) SearchPublished(ctx context.Context, query string, limit int) ([]*contentdomain.Content, error)
- func (r *ContentRepository) TranslationGroupExists(ctx context.Context, id int) (bool, error)
- func (r *ContentRepository) Update(ctx context.Context, content *contentdomain.Content) error
- type DashboardRepository
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 ¶
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 ¶
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 ¶
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 (*ContentRepository) CheckSlugUnique ¶
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) 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 (r *ContentRepository) GetByID(ctx context.Context, id int) (*contentdomain.Content, error)
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 (r *ContentRepository) GetPublishedAuthors(ctx context.Context, filters contentdomain.PublishedAuthorFilters) ([]*contentdomain.PublishedAuthor, error)
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 (*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 (*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 (*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 (*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