Ctrl K
ComunidadGuías…

store/driver.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package store

import (
	"context"
	"database/sql"
)

// Driver is an interface for store driver.
// It contains all methods that store database driver should implement.
type Driver interface {
	GetDB() *sql.DB
	Close() error

	IsInitialized(ctx context.Context) (bool, error)

	// GetDatabaseSize returns the database size in bytes, or -1 if unavailable.
	// A non-nil error indicates a hard failure; -1 with nil error means the
	// driver cannot report a size from the underlying database.
	GetDatabaseSize(ctx context.Context) (int64, error)

	// Attachment model related methods.
	CreateAttachment(ctx context.Context, create *Attachment) (*Attachment, error)
	ListAttachments(ctx context.Context, find *FindAttachment) ([]*Attachment, error)
	GetAttachmentStorageUsage(ctx context.Context, creatorID int32) (int64, error)
	UpdateAttachment(ctx context.Context, update *UpdateAttachment) error
	DeleteAttachment(ctx context.Context, delete *DeleteAttachment) error
	DeleteAttachments(ctx context.Context, deletes []*DeleteAttachment) error
	DeleteAttachmentsWithPolicy(ctx context.Context, policy *AttachmentDeletionPolicy, attachmentIDs []int32) error
	ApplyMemoMutation(ctx context.Context, mutation *MemoMutation) error

	// Memo model related methods.
	CreateMemo(ctx context.Context, create *Memo) (*Memo, error)
	ListMemos(ctx context.Context, find *FindMemo) ([]*Memo, error)
	UpdateMemo(ctx context.Context, update *UpdateMemo) error
	RefreshMemoDerivedPayload(ctx context.Context, refresh *RefreshMemoDerivedPayload) error
	DeleteMemo(ctx context.Context, delete *DeleteMemo) error
	DeleteMemoWithPolicy(ctx context.Context, delete *DeleteMemoWithPolicy) (*DeleteMemoWithPolicyResult, error)
	// CountUserMemos counts the memos a user created, comments included, in every row status and Space.
	CountUserMemos(ctx context.Context, creatorID int32) (int64, error)

	// Space model related methods.
	CreateSpace(ctx context.Context, create *Space, creatorID int32) (*Space, error)
	ListSpaces(ctx context.Context, find *FindSpace) ([]*Space, error)
	UpdateSpace(ctx context.Context, update *UpdateSpace, actorUserID int32) (*Space, error)
	DeleteSpace(ctx context.Context, delete *DeleteSpace) (*DeleteSpaceResult, error)
	ListSpaceMembers(ctx context.Context, find *FindSpaceMember) ([]*SpaceMember, error)
	UpdateSpaceMember(ctx context.Context, update *UpdateSpaceMember, actorUserID int32) (*SpaceMember, error)
	DeleteSpaceMember(ctx context.Context, delete *DeleteSpaceMember, actorUserID int32) error
	CreateSpaceInvitation(ctx context.Context, create *SpaceInvitation, actorUserID int32) (*SpaceInvitation, error)
	ListSpaceInvitations(ctx context.Context, find *FindSpaceInvitation) ([]*SpaceInvitation, error)
	AcceptSpaceInvitation(ctx context.Context, accept *AcceptSpaceInvitation, actorUserID int32) (*SpaceMember, error)
	DeclineSpaceInvitation(ctx context.Context, decline *DeclineSpaceInvitation, actorUserID int32) error
	RevokeSpaceInvitation(ctx context.Context, revoke *RevokeSpaceInvitation, actorUserID int32) error

	// MemoRelation model related methods.
	UpsertMemoRelation(ctx context.Context, create *MemoRelation) (*MemoRelation, error)
	ListMemoRelations(ctx context.Context, find *FindMemoRelation) ([]*MemoRelation, error)
	DeleteMemoRelation(ctx context.Context, delete *DeleteMemoRelation) error

	// InstanceSetting model related methods.
	// CreateInstanceSettingIfNotExists atomically creates the setting when its name is absent and reports whether it inserted the row.
	CreateInstanceSettingIfNotExists(ctx context.Context, create *InstanceSetting) (bool, error)
	// UpdateInstanceSettingIfUnchanged replaces the value only when the stored value still equals oldValue, and reports whether it did.
	UpdateInstanceSettingIfUnchanged(ctx context.Context, name, oldValue, newValue string) (bool, error)
	// GetInstanceSettingTx reads one setting within tx, locking its row where the database supports row locks, or returns nil when it is absent.
	GetInstanceSettingTx(ctx context.Context, tx *sql.Tx, name string) (*InstanceSetting, error)
	// CreateInstanceSettingIfNotExistsTx is CreateInstanceSettingIfNotExists within tx.
	CreateInstanceSettingIfNotExistsTx(ctx context.Context, tx *sql.Tx, create *InstanceSetting) (bool, error)
	// UpdateInstanceSettingIfUnchangedTx is UpdateInstanceSettingIfUnchanged within tx.
	UpdateInstanceSettingIfUnchangedTx(ctx context.Context, tx *sql.Tx, name, oldValue, newValue string) (bool, error)
	UpsertInstanceSetting(ctx context.Context, upsert *InstanceSetting) (*InstanceSetting, error)
	// UpsertInstanceSettingTx writes the setting within tx, for callers that must commit it together with other statements.
	UpsertInstanceSettingTx(ctx context.Context, tx *sql.Tx, upsert *InstanceSetting) error
	ListInstanceSettings(ctx context.Context, find *FindInstanceSetting) ([]*InstanceSetting, error)
	DeleteInstanceSetting(ctx context.Context, delete *DeleteInstanceSetting) error
	DeleteInstanceSettingTx(ctx context.Context, tx *sql.Tx, delete *DeleteInstanceSetting) error

	// User model related methods.
	CreateUser(ctx context.Context, create *User) (*User, error)
	UpdateUser(ctx context.Context, update *UpdateUser) (*User, error)
	ListUsers(ctx context.Context, find *FindUser) ([]*User, error)
	// CreateUserTx, UpdateUserTx, and ListUsersTx are the same methods within tx.
	CreateUserTx(ctx context.Context, tx *sql.Tx, create *User) (*User, error)
	UpdateUserTx(ctx context.Context, tx *sql.Tx, update *UpdateUser) (*User, error)
	ListUsersTx(ctx context.Context, tx *sql.Tx, find *FindUser) ([]*User, error)
	DeleteUser(ctx context.Context, delete *DeleteUser) (*DeleteUserResult, error)

	// UserSetting model related methods.
	UpsertUserSetting(ctx context.Context, upsert *UserSetting) (*UserSetting, error)
	ListUserSettings(ctx context.Context, find *FindUserSetting) ([]*UserSetting, error)
	DeleteUserSettings(ctx context.Context, delete *DeleteUserSetting) error
	// GetUserByPATHash returns the token matching tokenHash with its owner ID, or
	// (nil, nil) when no stored token matches. An error means the lookup itself
	// failed, including a stored row that cannot be decoded.
	GetUserByPATHash(ctx context.Context, tokenHash string) (*PATQueryResult, error)

	// IdentityProvider model related methods.
	CreateIdentityProvider(ctx context.Context, create *IdentityProvider) (*IdentityProvider, error)
	ListIdentityProviders(ctx context.Context, find *FindIdentityProvider) ([]*IdentityProvider, error)
	UpdateIdentityProvider(ctx context.Context, update *UpdateIdentityProvider) (*IdentityProvider, error)
	DeleteIdentityProvider(ctx context.Context, delete *DeleteIdentityProvider) error
	// The identity provider methods within tx.
	CreateIdentityProviderTx(ctx context.Context, tx *sql.Tx, create *IdentityProvider) (*IdentityProvider, error)
	ListIdentityProvidersTx(ctx context.Context, tx *sql.Tx, find *FindIdentityProvider) ([]*IdentityProvider, error)
	UpdateIdentityProviderTx(ctx context.Context, tx *sql.Tx, update *UpdateIdentityProvider) (*IdentityProvider, error)
	DeleteIdentityProviderTx(ctx context.Context, tx *sql.Tx, delete *DeleteIdentityProvider) error
	// ApplyAuthenticationConfigMutationTx reads the authentication configuration, validates the mutation, and applies it within tx.
	ApplyAuthenticationConfigMutationTx(ctx context.Context, tx *sql.Tx, mutation *AuthenticationConfigMutation) error

	// IsRetryableTransactionError reports whether err is a serialization or locking conflict that running the transaction again can resolve.
	IsRetryableTransactionError(err error) bool

	// Inbox model related methods.
	CreateInbox(ctx context.Context, create *Inbox) (*Inbox, error)
	ListInboxes(ctx context.Context, find *FindInbox) ([]*Inbox, error)
	UpdateInbox(ctx context.Context, update *UpdateInbox) (*Inbox, error)
	DeleteInbox(ctx context.Context, delete *DeleteInbox) error

	// Reaction model related methods.
	UpsertReaction(ctx context.Context, create *Reaction) (*Reaction, error)
	ListReactions(ctx context.Context, find *FindReaction) ([]*Reaction, error)
	GetReaction(ctx context.Context, find *FindReaction) (*Reaction, error)
	DeleteReaction(ctx context.Context, delete *DeleteReaction) error

	// MemoShare model related methods.
	CreateMemoShare(ctx context.Context, create *MemoShare) (*MemoShare, error)
	ListMemoShares(ctx context.Context, find *FindMemoShare) ([]*MemoShare, error)
	GetMemoShare(ctx context.Context, find *FindMemoShare) (*MemoShare, error)
	DeleteMemoShare(ctx context.Context, delete *DeleteMemoShare) error

	// UserIdentity model related methods.
	CreateUserIdentity(ctx context.Context, create *UserIdentity) (*UserIdentity, error)
	CreateUserWithIdentity(ctx context.Context, createUser *User, createIdentity *UserIdentity) (*User, error)
	ListUserIdentities(ctx context.Context, find *FindUserIdentity) ([]*UserIdentity, error)
	DeleteUserIdentities(ctx context.Context, delete *DeleteUserIdentity) error
	// The identity link methods within tx.
	CreateUserIdentityTx(ctx context.Context, tx *sql.Tx, create *UserIdentity) (*UserIdentity, error)
	ListUserIdentitiesTx(ctx context.Context, tx *sql.Tx, find *FindUserIdentity) ([]*UserIdentity, error)
	DeleteUserIdentitiesTx(ctx context.Context, tx *sql.Tx, delete *DeleteUserIdentity) error
}