Documentation
¶
Index ¶
- Constants
- type NewStoreOptions
- type Record
- func (o *Record) Contents() string
- func (o *Record) CreatedAt() string
- func (o *Record) DeletedAt() string
- func (o *Record) Extension() string
- func (o *Record) ID() string
- func (o *Record) IsDirectory() bool
- func (o *Record) IsFile() bool
- func (o *Record) Name() string
- func (o *Record) ParentID() string
- func (o *Record) Path() string
- func (o *Record) SetContents(fileContents string) *Record
- func (o *Record) SetCreatedAt(createdAt string) *Record
- func (o *Record) SetDeletedAt(deletedAt string) *Record
- func (o *Record) SetExtension(extension string) *Record
- func (o *Record) SetID(id string) *Record
- func (o *Record) SetName(name string) *Record
- func (o *Record) SetParentID(parentID string) *Record
- func (o *Record) SetPath(filePath string) *Record
- func (o *Record) SetSize(fileSize string) *Record
- func (o *Record) SetType(fileType string) *Record
- func (o *Record) SetUpdatedAt(updatedAt string) *Record
- func (o *Record) Size() string
- func (o *Record) Type() string
- func (o *Record) UpdatedAt() string
- type RecordQueryOptions
- type Store
- func (st *Store) EnableDebug(debug bool)
- func (store *Store) MigrateDown(ctx context.Context, tx ...*sql.Tx) error
- func (store *Store) MigrateUp(ctx context.Context, tx ...*sql.Tx) error
- func (st *Store) RecordCount(ctx context.Context, options RecordQueryOptions) (int64, error)
- func (store *Store) RecordCreate(ctx context.Context, record *Record) error
- func (store *Store) RecordDelete(ctx context.Context, record *Record) error
- func (store *Store) RecordDeleteByID(ctx context.Context, id string) error
- func (store *Store) RecordFindByID(ctx context.Context, id string, options RecordQueryOptions) (*Record, error)
- func (store *Store) RecordFindByPath(ctx context.Context, path string, options RecordQueryOptions) (*Record, error)
- func (store *Store) RecordList(ctx context.Context, options RecordQueryOptions) ([]Record, error)
- func (store *Store) RecordRecalculatePath(ctx context.Context, record *Record, parentRecord *Record) error
- func (store *Store) RecordSoftDelete(ctx context.Context, record *Record) error
- func (store *Store) RecordSoftDeleteByID(ctx context.Context, id string) error
- func (store *Store) RecordUpdate(ctx context.Context, record *Record) error
Constants ¶
const ( COLUMN_ID = "id" COLUMN_PARENT_ID = "parent_id" COLUMN_NAME = "name" COLUMN_PATH = "path" COLUMN_TYPE = "type" COLUMN_SIZE = "size" COLUMN_EXTENSION = "extension" COLUMN_CONTENTS = "contents" COLUMN_CREATED_AT = "created_at" COLUMN_UPDATED_AT = "updated_at" COLUMN_DELETED_AT = "deleted_at" )
Database column names used in the file records table.
const PATH_SEPARATOR = "/"
PATH_SEPARATOR is the path delimiter used throughout the file store.
const ROOT_ID = "0"
ROOT_ID is the ID of the root directory record.
const ROOT_PATH = PATH_SEPARATOR
ROOT_PATH is the path of the root directory.
const TYPE_DIRECTORY = "directory"
TYPE_DIRECTORY is the record type value for directories.
const TYPE_FILE = "file"
TYPE_FILE is the record type value for files.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type NewStoreOptions ¶
type NewStoreOptions struct {
TableName string
DB *sql.DB
DbDriverName string
AutomigrateEnabled bool
DebugEnabled bool
}
NewStoreOptions defines the configuration options for creating a new Store. All fields are optional except TableName and DB which are required.
type Record ¶
type Record struct {
dataobject.DataObject
}
Record represents a file or directory entry in the hierarchical file store. It embeds DataObject for field storage and provides typed accessors for file-system attributes like path, size, contents, and timestamps.
func NewDirectory ¶
func NewDirectory() *Record
NewDirectory creates a new Record preconfigured as a directory. It sets type to "directory", size to "0", and clears contents and extension.
func NewFile ¶
func NewFile() *Record
NewFile creates a new Record preconfigured as a file. It sets type to "file". Size, contents, and other fields must be set separately.
func NewRecord ¶
func NewRecord() *Record
NewRecord creates a new Record with default values. It generates a unique ID and sets created_at, updated_at, and deleted_at timestamps.
func NewRecordFromExistingData ¶
NewRecordFromExistingData creates a Record from a map of existing data. Used internally when hydrating records from database query results.
func (*Record) IsDirectory ¶
IsDirectory returns true if this record represents a directory.
func (*Record) SetContents ¶
func (*Record) SetCreatedAt ¶
func (*Record) SetDeletedAt ¶
func (*Record) SetExtension ¶
func (*Record) SetParentID ¶
func (*Record) SetPath ¶
SetPath sets the file path. As all paths must start with "/" adds a "/" if not present. Any trailing spaces is also trimmed
func (*Record) SetUpdatedAt ¶
type RecordQueryOptions ¶
type RecordQueryOptions struct {
ID string
IDIn []string
ParentID string
Type string
Path string
PathStartsWith string
CreatedAtLessThan string
CreatedAtGreaterThan string
UpdatedAtLessThan string
UpdatedAtGreaterThan string
Columns []string
Offset int
Limit int
SortOrder string
OrderBy string
CountOnly bool
WithSoftDeleted bool
}
RecordQueryOptions defines the available filters and options for record queries. Use this struct with RecordList, RecordCount, RecordFindByID, and RecordFindByPath.
type Store ¶
type Store struct {
// contains filtered or unexported fields
}
Store provides a hierarchical file-system-like storage in a SQL database. It handles record creation, querying, soft deletion, and path recalculation for nested directories and files, while keeping a root directory available out of the box.
func NewStore ¶
func NewStore(opts NewStoreOptions) (*Store, error)
NewStore creates a new file store instance with the provided options.
Required options:
- TableName: the database table name for storing records
- DB: a *sql.DB database connection
Optional options:
- DbDriverName: auto-detected if not provided
- AutomigrateEnabled: if true, creates table and root directory automatically
- DebugEnabled: if true, logs all SQL statements
Returns an error if required options are missing or if auto-migration fails.
func (*Store) EnableDebug ¶
EnableDebug enables or disables SQL debug logging. When enabled, generated SQL statements are printed to stdout.
func (*Store) MigrateDown ¶ added in v1.4.0
MigrateDown drops the sqlfilestore table
func (*Store) MigrateUp ¶ added in v1.4.0
MigrateUp creates the database table if it doesn't exist and ensures a root directory record is present. It runs automatically if AutomigrateEnabled is set to true in NewStoreOptions.
func (*Store) RecordCount ¶
RecordCount returns the count of records matching the provided query options.
It builds a COUNT query based on the filter criteria in options (ID, ParentID, Type, Path filters, timestamps, soft delete status, etc.). The CountOnly flag is always set internally regardless of the input options.
Returns:
- (count, nil) on success, where count is the number of matching records (0 or more)
- (0, error) if query building fails, database query fails, or count parsing fails
Note: This function never returns negative counts. All error cases return 0 as the count value. The original implementation returned -1 on some errors, but this was changed to 0 for consistency.
func (*Store) RecordCreate ¶
RecordCreate inserts a new record into the database. It automatically sets created_at and updated_at timestamps.
func (*Store) RecordDelete ¶
RecordDelete permanently removes a record from the database. It delegates to RecordDeleteByID using the record's ID.
func (*Store) RecordDeleteByID ¶
RecordDeleteByID permanently deletes a record by its ID. It ensures directories are empty before deletion (no children allowed). Returns an error if the directory is not empty or if the ID is invalid.
func (*Store) RecordFindByID ¶
func (store *Store) RecordFindByID(ctx context.Context, id string, options RecordQueryOptions) (*Record, error)
RecordFindByID finds a single record by its ID. Returns nil if no record is found or if the ID is empty.
func (*Store) RecordFindByPath ¶
func (store *Store) RecordFindByPath(ctx context.Context, path string, options RecordQueryOptions) (*Record, error)
RecordFindByPath finds a single record by its path. Returns nil if no record is found or if the path is empty.
func (*Store) RecordList ¶
RecordList retrieves a list of records matching the provided query options. Supports filtering by ID, ParentID, Type, Path, timestamps, and soft delete status. Results can be limited, offset, and ordered using the options struct.
func (*Store) RecordRecalculatePath ¶
func (store *Store) RecordRecalculatePath(ctx context.Context, record *Record, parentRecord *Record) error
RecordRecalculatePath updates the path of a record and all its children after a rename or move operation. If parentRecord is nil, it looks up the parent. This recursively updates all descendant paths to reflect the new parent path.
func (*Store) RecordSoftDelete ¶
RecordSoftDelete marks a record as deleted by setting the deleted_at timestamp. The record remains in the database but is excluded from default queries.
func (*Store) RecordSoftDeleteByID ¶
RecordSoftDeleteByID finds a record by ID and marks it as soft deleted. Returns an error if the record is not found.