database

package module
v0.0.10 Latest Latest
Warning

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

Go to latest
Published: Nov 22, 2025 License: MIT Imports: 34 Imported by: 0

README

Station Manager: database module

Regenerating the database models

The build uses sqlboiler to generate the database models. To regenerate the models, each database must be rebuilt separately, but both follow roughly the same steps.

SQLite
  1. Delete the existing development database file at build/db/data.db.
  2. Run the database/sqlite/example/main.go file.
  3. cd database/sqlite
  4. sqlboiler sqlite3
Postgres
  1. Delete the existing development database file at build/db/postgres_data - this will require the use of sudo.

  2. Start the Postgres Docker container.

     sudo systemctl start docker.service`
     docker-compose up
    
  3. Run the database/postgres/example/main.go file.

  4. cd database/postgres

  5. export PSQL_PASS=[some password] - obviously replace [some password] with the correct password.

  6. sqlboiler psql

Adapters usage

This module uses the adapters package to map between types and DB models. The new API is destination-first: Into(dst, src). Generic helpers are provided in database/helpers.go.

Examples:

// QSO insert (sqlite)
model, err := s.AdaptTypeToSqliteModelQso(qso)
if err != nil { /* handle */ }
err = model.Insert(ctx, h, boil.Infer())

// QSO fetch (postgres)
m, _ := pgmodels.FindQso(ctx, h, id)
out, err := s.AdaptPostgresModelToTypeQso(m)

Context-aware CRUD

Each CRUD method has a ...Context(ctx, ...) variant. If the caller doesn’t supply a deadline, a default timeout is applied by the service. Transactions use BeginTxContext with a configurable timeout.

ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
qso, err := svc.InsertQsoContext(ctx, q)

Documentation

Index

Constants

View Source
const (
	ServiceName    = types.DatabaseServiceName
	PostgresDriver = "postgres"
	SqliteDriver   = "sqlite"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Database

type Database interface {
	Open() error
	Close() error
	Ping() error
	Migrate() error
	BeginTxContext(context.Context) (*sql.Tx, context.CancelFunc, error)
	ExecContext(context.Context, string, ...interface{}) (sql.Result, error)
	QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error)
}

type Service

type Service struct {
	ConfigService  *config.Service  `di.inject:"configservice"`
	Logger         *logging.Service `di.inject:"loggingservice"`
	DatabaseConfig *types.DatastoreConfig
	// contains filtered or unexported fields
}

func (*Service) AdaptPostgresModelToTypeLogbook added in v0.0.8

func (s *Service) AdaptPostgresModelToTypeLogbook(m *pgmodels.Logbook) (types.Logbook, error)

AdaptPostgresModelToTypeLogbook adapts postgres model Logbook to types.Logbook.

func (*Service) AdaptPostgresModelToTypeQso added in v0.0.8

func (s *Service) AdaptPostgresModelToTypeQso(m *pgmodels.Qso) (types.Qso, error)

AdaptPostgresModelToTypeQso adapts postgres model to types.Qso.

func (*Service) AdaptPostgresModelToTypeUser added in v0.0.9

func (s *Service) AdaptPostgresModelToTypeUser(m *pgmodels.User) (types.User, error)

func (*Service) AdaptSqliteModelToTypeLogbook added in v0.0.8

func (s *Service) AdaptSqliteModelToTypeLogbook(m *sqmodels.Logbook) (types.Logbook, error)

AdaptSqliteModelToTypeLogbook adapts sqlite model Logbook to types.Logbook.

func (*Service) AdaptSqliteModelToTypeQso added in v0.0.8

func (s *Service) AdaptSqliteModelToTypeQso(m *sqmodels.Qso) (types.Qso, error)

AdaptSqliteModelToTypeQso adapts sqlite model to types.Qso.

func (*Service) AdaptTypeToPostgresModelLogbook added in v0.0.8

func (s *Service) AdaptTypeToPostgresModelLogbook(lb types.Logbook) (*pgmodels.Logbook, error)

AdaptTypeToPostgresModelLogbook adapts a types.Logbook into a postgres model Logbook.

func (*Service) AdaptTypeToPostgresModelQso added in v0.0.8

func (s *Service) AdaptTypeToPostgresModelQso(q types.Qso) (*pgmodels.Qso, error)

AdaptTypeToPostgresModelQso adapts a types.Qso into a postgres model Qso.

func (*Service) AdaptTypeToPostgresModelUser added in v0.0.9

func (s *Service) AdaptTypeToPostgresModelUser(u types.User) (*pgmodels.User, error)

func (*Service) AdaptTypeToSqliteModelLogbook added in v0.0.8

func (s *Service) AdaptTypeToSqliteModelLogbook(lb types.Logbook) (*sqmodels.Logbook, error)

AdaptTypeToSqliteModelLogbook adapts a types.Logbook into a sqlite model Logbook.

func (*Service) AdaptTypeToSqliteModelQso added in v0.0.8

func (s *Service) AdaptTypeToSqliteModelQso(q types.Qso) (*sqmodels.Qso, error)

AdaptTypeToSqliteModelQso adapts a types.Qso into a sqlite model Qso.

func (*Service) BeginTxContext

func (s *Service) BeginTxContext(ctx context.Context) (*sql.Tx, context.CancelFunc, error)

BeginTxContext starts a new transaction.

func (*Service) Close

func (s *Service) Close() error

Close closes the database connection.

func (*Service) DeleteQso added in v0.0.8

func (s *Service) DeleteQso(id int64) error

DeleteQso delegates to DeleteQsoContext with a background context.

func (*Service) DeleteQsoContext added in v0.0.8

func (s *Service) DeleteQsoContext(ctx context.Context, id int64) error

DeleteQsoContext deletes a QSO with a caller-provided context.

func (*Service) ExecContext

func (s *Service) ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error)

func (*Service) FetchAPIKeyByPrefix added in v0.0.10

func (s *Service) FetchAPIKeyByPrefix(prefix string) (types.ApiKey, error)

FetchAPIKeyByPrefix retrieves an API key from the database by matching the given prefix. Returns the corresponding ApiKey and an error if the operation fails.

func (*Service) FetchAPIKeyByPrefixContext added in v0.0.10

func (s *Service) FetchAPIKeyByPrefixContext(ctx context.Context, prefix string) (types.ApiKey, error)

FetchAPIKeyByPrefixContext retrieves an API key matching the specified prefix within the provided context. Returns types.ApiKey if found or an error if not found or if an issue occurs during execution.

func (*Service) FetchLogbookByID added in v0.0.10

func (s *Service) FetchLogbookByID(id int64) (types.Logbook, error)

FetchLogbookByID retrieves a logbook by its ID from the database and returns it along with possible errors.

func (*Service) FetchLogbookByIDContext added in v0.0.10

func (s *Service) FetchLogbookByIDContext(ctx context.Context, id int64) (types.Logbook, error)

FetchLogbookByIDContext retrieves a logbook by its ID within the provided context from the configured database.

func (*Service) FetchQsoById added in v0.0.7

func (s *Service) FetchQsoById(id int64) (types.Qso, error)

func (*Service) FetchQsoByIdContext added in v0.0.8

func (s *Service) FetchQsoByIdContext(ctx context.Context, id int64) (types.Qso, error)

func (*Service) FetchUserByCallsign added in v0.0.10

func (s *Service) FetchUserByCallsign(callsign string) (types.User, error)

FetchUserByCallsign returns a user by its callsign or an empty user if no user was found.

func (*Service) FetchUserByCallsignContext added in v0.0.10

func (s *Service) FetchUserByCallsignContext(ctx context.Context, callsign string) (types.User, error)

FetchUserByCallsignContext retrieves a user by their callsign from the database with the provided context. Returns an error if the database service is uninitialized, callsign is empty, or the user is not found. Uses a default timeout if no deadline is set in the given context.

func (*Service) Initialize

func (s *Service) Initialize() error

Initialize initializes the database service. No constructor is provided as this service is to be initialized within an IOC/DI container.

func (*Service) InsertAPIKey added in v0.0.10

func (s *Service) InsertAPIKey(name, prefix, hash string, logbookID int64) error

InsertAPIKey inserts a new API key into the database with the given name, prefix, hash, and associated logbook ID. Returns an error if the service is uninitialized, not open, or if insertion fails.

func (*Service) InsertAPIKeyContext added in v0.0.10

func (s *Service) InsertAPIKeyContext(ctx context.Context, name, prefix, hash string, logbookID int64) error

InsertAPIKeyContext inserts a new API key into the database with the given name, prefix, hash, and associated logbook ID. Returns an error if insertion fails.

func (*Service) InsertAPIKeyWithTxContext added in v0.0.10

func (s *Service) InsertAPIKeyWithTxContext(ctx context.Context, tx boil.ContextExecutor, name, prefix, hash string, logbookID int64) error

InsertAPIKeyWithTxContext inserts the API key using the provided transaction and context. It mirrors InsertAPIKeyContext but uses the given ContextExecutor instead of the shared handle so callers can coordinate it with other changes in a single atomic transaction.

func (*Service) InsertLogbook added in v0.0.8

func (s *Service) InsertLogbook(logbook types.Logbook) (types.Logbook, error)

InsertLogbook creates and stores a new logbook entry in the database, returning the created logbook or an error.

func (*Service) InsertLogbookContext added in v0.0.8

func (s *Service) InsertLogbookContext(ctx context.Context, logbook types.Logbook) (types.Logbook, error)

InsertLogbookContext inserts a new logbook into the database within the provided context and returns the created logbook or an error.

func (*Service) InsertLogbookWithTxContext added in v0.0.10

func (s *Service) InsertLogbookWithTxContext(ctx context.Context, tx boil.ContextExecutor, logbook types.Logbook) (types.Logbook, error)

InsertLogbookWithTxContext performs a logbook insert using the provided transaction and context. This is used by higher-level operations that need to coordinate multiple writes atomically.

func (*Service) InsertQso added in v0.0.7

func (s *Service) InsertQso(qso types.Qso) (types.Qso, error)

InsertQso inserts a QSO using a background context with default timeout semantics.

func (*Service) InsertQsoContext added in v0.0.8

func (s *Service) InsertQsoContext(ctx context.Context, qso types.Qso) (types.Qso, error)

InsertQsoContext inserts a QSO with caller-provided context. If the context has no deadline, a default timeout is applied.

func (*Service) InsertUser added in v0.0.9

func (s *Service) InsertUser(user types.User) (types.User, error)

InsertUser inserts a new user into the database and returns the inserted user or an error if any operation fails. This calls InsertUserContext with a background context.

func (*Service) InsertUserContext added in v0.0.9

func (s *Service) InsertUserContext(ctx context.Context, user types.User) (types.User, error)

InsertUserContext inserts a new user into the database and returns the inserted user or an error if any operation fails.

func (*Service) LogStats added in v0.0.8

func (s *Service) LogStats(prefix string)

func (*Service) Migrate

func (s *Service) Migrate() error

Migrate runs the database migrations.

func (*Service) Open

func (s *Service) Open() error

Open opens the database connection.

func (*Service) Ping

func (s *Service) Ping() error

Ping pings the database connection.

func (*Service) QueryContext

func (s *Service) QueryContext(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error)

func (*Service) UpdateQso added in v0.0.8

func (s *Service) UpdateQso(qso types.Qso) error

UpdateQso delegates to UpdateQsoContext with a background context.

func (*Service) UpdateQsoContext added in v0.0.8

func (s *Service) UpdateQsoContext(ctx context.Context, qso types.Qso) error

UpdateQsoContext updates an existing QSO with caller-provided context.

func (*Service) UpdateUser added in v0.0.10

func (s *Service) UpdateUser(user types.User) error

UpdateUser updates the provided user in the database using the given service instance and context.

func (*Service) UpdateUserContext added in v0.0.10

func (s *Service) UpdateUserContext(ctx context.Context, user types.User) error

UpdateUserContext updates the database with the provided user data using a database handle and adapter for conversions. It ensures the database service is open, applies model converters, and validates context timeout before updating. Returns an error if the service is not operational, converters fail, or the update operation encounters an issue.

Directories

Path Synopsis
examples command
example command

Jump to

Keyboard shortcuts

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