settingstore

package module
v1.9.0 Latest Latest
Warning

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

Go to latest
Published: Jun 20, 2026 License: AGPL-3.0 Imports: 14 Imported by: 2

README

Settings Store

Tests Status Go Report Card PkgGoDev

Saves settings in an SQL database.

Description

Every application needs to preserve settings between multiple restarts. This package helps save the setting represented as key-value pairs in an SQL database.

License

This project is dual-licensed under the following terms:

  • For non-commercial use, you may choose either the GNU Affero General Public License v3.0 (AGPLv3) or a separate commercial license (see below). You can find a copy of the AGPLv3 at: https://www.gnu.org/licenses/agpl-3.0.txt

  • For commercial use, a separate commercial license is required. Commercial licenses are available for various use cases. Please contact me via my contact page to obtain a commercial license.

Features

  • Saves settings data as key-value pairs
  • Supports SQLite, MySQL and Postgres
  • Uses sql.DB directly
  • Automigration

Installation

go get -u github.com/gouniverse/settingstore

Setup

// as one line
settingStore, err = settingstore.NewStore(settingstore.NewStoreOptions{
	DB: databaseInstance,
	SettingTableName: "settings",
	AutomigrateEnabled: true,
})

if err != nil {
	panic(err)
}

// as multiple lines
settingStore, err = settingstore.NewStore(settingstore.NewStoreOptions{
	DB: databaseInstance,
	SettingTableName: "settings",
})

if err != nil {
	panic(err)
}

settingStore.AutoMigrate()

Usage

  1. Create a new key value setting pair
settingsStore.Set("app.name", "My Web App")
settingsStore.Set("app.url", "http://localhost")
settingsStore.Set("server.ip", "127.0.0.1")
settingsStore.Set("server.port", "80")
  1. Retrieve a setting value (or default value if not exists)
appName = settingsStore.Get("app.name", "Default Name")
appUrl = settingsStore.Get("app.url", "")
serverIp = settingsStore.Get("server.ip", "")
serverPort = settingsStore.Get("server.port", "")
  1. Check if required setting is setup
if serverIp == "" {
    log.Panic("server ip not setup")
}

Methods

These methods may be subject to change as still in development

Store Methods
  • NewStore(opts NewStoreOptions) (*store, error) - creates a new setting store
  • AutoMigrate(ctx context.Context) error - auto migrate (create the tables in the database) the settings store tables
  • DriverName(db *sql.DB) string - the name of the driver used for SQL strings (you may use this if you need to debug)
  • SettingCount(ctx context.Context, query SettingQueryInterface) (int64, error) - counts the number of settings
  • SettingCreate(ctx context.Context, setting SettingInterface) error - creates a new setting
  • SettingDelete(ctx context.Context, setting SettingInterface) error - deletes a setting
  • SettingDeleteByID(ctx context.Context, settingID string) error - deletes a setting by ID
  • SettingDeleteByKey(ctx context.Context, settingKey string) error - deletes a setting by key
  • SettingFindByID(ctx context.Context, settingID string) (SettingInterface, error) - finds a setting by ID
  • SettingList(ctx context.Context, query SettingQueryInterface) ([]SettingInterface, error) - lists settings
  • SettingSoftDelete(ctx context.Context, setting SettingInterface) error - soft deletes a setting
  • SettingSoftDeleteByID(ctx context.Context, settingID string) error - soft deletes a setting by ID
  • SettingUpdate(ctx context.Context, setting SettingInterface) error - updates a setting
Shortcut Methods
  • Get(ctx context.Context, key string, valueDefault string) (string, error) - gets a value from key-value setting pair

  • Set(ctx context.Context, key string, value string, seconds int64) error - sets new key value pair

  • GetAny(ctx context.Context, key string, valueDefault interface{}) (interface{}, error) - gets a value from key-value setting pair

  • GetJSON(key string, valueDefault interface{}) (interface{}, error) - gets a value as JSON from key-value setting pair

  • SetJSON(ctx context.Context, key string, value interface{}, seconds int64) error - sets new key JSON value pair

  • GetMap(ctx context.Context, key string, valueDefault map[string]any) (map[string]any, error) - gets a value as JSON from key-value setting pair

  • MergeMap(ctx context.Context, key string, mergeMap map[string]any, seconds int64) error - merges a map with an existing map

  • Has(ctx context.Context, settingKey string) (bool, error) - checks if a setting exists

Documentation

Index

Constants

View Source
const (
	COLUMN_ID              = "id"
	COLUMN_SETTING_KEY     = "setting_key"
	COLUMN_SETTING_VALUE   = "setting_value"
	COLUMN_CREATED_AT      = "created_at"
	COLUMN_UPDATED_AT      = "updated_at"
	COLUMN_SOFT_DELETED_AT = "soft_deleted_at"
)
View Source
const MAX_DATETIME = "9999-12-31 23:59:59"

MAX_DATETIME is a far-future datetime used as the default soft-delete sentinel.

Variables

This section is empty.

Functions

This section is empty.

Types

type NewStoreOptions

type NewStoreOptions struct {
	SettingTableName   string
	DB                 *sql.DB
	AutomigrateEnabled bool
	DebugEnabled       bool
}

NewStoreOptions define the options for creating a new setting store

type SettingInterface

type SettingInterface interface {
	IsSoftDeleted() bool

	GetCreatedAt() string
	GetCreatedAtCarbon() *carbon.Carbon
	SetCreatedAt(createdAt string) SettingInterface

	GetID() string
	SetID(id string) SettingInterface

	GetKey() string
	SetKey(key string) SettingInterface

	GetSoftDeletedAt() string
	GetSoftDeletedAtCarbon() *carbon.Carbon
	SetSoftDeletedAt(deletedAt string) SettingInterface

	GetUpdatedAt() string
	GetUpdatedAtCarbon() *carbon.Carbon
	SetUpdatedAt(updatedAt string) SettingInterface

	GetValue() string
	SetValue(value string) SettingInterface
}

SettingInterface defines the interface for a setting record.

func NewSetting

func NewSetting() SettingInterface

func NewSettingFromExistingData

func NewSettingFromExistingData(data map[string]string) SettingInterface

type SettingQueryInterface

type SettingQueryInterface interface {
	Validate() error

	IsCountOnly() bool

	Columns() []string
	SetColumns(columns []string) SettingQueryInterface

	HasCreatedAtGte() bool
	CreatedAtGte() string
	SetCreatedAtGte(createdAtGte string) SettingQueryInterface

	HasCreatedAtLte() bool
	CreatedAtLte() string
	SetCreatedAtLte(createdAtLte string) SettingQueryInterface

	HasID() bool
	ID() string
	SetID(id string) SettingQueryInterface

	HasIDIn() bool
	IDIn() []string
	SetIDIn(idIn []string) SettingQueryInterface

	HasKey() bool
	Key() string
	SetKey(key string) SettingQueryInterface

	HasOffset() bool
	Offset() int
	SetOffset(offset int) SettingQueryInterface

	HasLimit() bool
	Limit() int
	SetLimit(limit int) SettingQueryInterface

	HasSortOrder() bool
	SortOrder() string
	SetSortOrder(sortOrder string) SettingQueryInterface

	HasOrderBy() bool
	OrderBy() string
	SetOrderBy(orderBy string) SettingQueryInterface

	HasCountOnly() bool
	SetCountOnly(countOnly bool) SettingQueryInterface

	HasSoftDeletedIncluded() bool
	SoftDeletedIncluded() bool
	SetSoftDeletedIncluded(withSoftDeleted bool) SettingQueryInterface
}

SettingQueryInterface defines the interface for querying settings.

func NewSettingQuery

func NewSettingQuery() SettingQueryInterface

NewSettingQuery creates a new setting query

func SettingQuery

func SettingQuery() SettingQueryInterface

SettingQuery is a shortcut version of NewSettingQuery to create a new query

type StoreInterface

type StoreInterface interface {
	MigrateDown(ctx context.Context, tx ...*sql.Tx) error
	MigrateUp(ctx context.Context, tx ...*sql.Tx) error
	EnableDebug(debug bool)

	SettingCount(ctx context.Context, query SettingQueryInterface) (int64, error)
	SettingCreate(ctx context.Context, setting SettingInterface) error
	SettingDelete(ctx context.Context, setting SettingInterface) error
	SettingDeleteByID(ctx context.Context, settingID string) error
	SettingFindByID(ctx context.Context, settingID string) (SettingInterface, error)
	SettingFindByKey(ctx context.Context, settingKey string) (SettingInterface, error)
	SettingList(ctx context.Context, query SettingQueryInterface) ([]SettingInterface, error)
	SettingSoftDelete(ctx context.Context, setting SettingInterface) error
	SettingSoftDeleteByID(ctx context.Context, settingID string) error
	SettingUpdate(ctx context.Context, setting SettingInterface) error

	Delete(ctx context.Context, settingKey string) error
	Get(ctx context.Context, settingKey string, valueDefault string) (string, error)
	GetAny(ctx context.Context, key string, valueDefault any) (any, error)
	GetMap(ctx context.Context, key string, valueDefault map[string]any) (map[string]any, error)
	Has(ctx context.Context, settingKey string) (bool, error)
	MergeMap(ctx context.Context, key string, mergeMap map[string]any) error
	Set(ctx context.Context, settingKey string, value string) error
	SetAny(ctx context.Context, key string, value interface{}, seconds int64) error
	SetMap(ctx context.Context, key string, value map[string]any) error
	SettingDeleteByKey(ctx context.Context, settingKey string) error
}

StoreInterface defines the interface for a setting store.

func NewStore

func NewStore(opts NewStoreOptions) (StoreInterface, error)

NewStore creates a new setting store

Jump to

Keyboard shortcuts

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