database

package module
v0.0.0-...-f6c473f Latest Latest
Warning

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

Go to latest
Published: Mar 28, 2026 License: MIT Imports: 32 Imported by: 0

README

Station Manager: database package

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 (
	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

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

AdaptPostgresModelToTypeLogbook adapts postgres model Logbook to types.Logbook.

func (*Service) AdaptPostgresModelToTypeQso

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

AdaptPostgresModelToTypeQso adapts postgres model to types.Qso.

func (*Service) AdaptPostgresModelToTypeUser

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

func (*Service) AdaptSqliteModelToTypeContactedStation

func (s *Service) AdaptSqliteModelToTypeContactedStation(m *sqmodels.ContactedStation) (types.ContactedStation, error)

AdaptSqliteModelToTypeContactedStation converts a ContactedStation SQLite model to its corresponding domain type. Returns the converted types.ContactedStation and an error if the service or adapter is nil, or if the conversion fails.

func (*Service) AdaptSqliteModelToTypeLogbook

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

AdaptSqliteModelToTypeLogbook adapts sqlite model Logbook to types.Logbook.

func (*Service) AdaptSqliteModelToTypeQso

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

AdaptSqliteModelToTypeQso adapts sqlite model to types.Qso.

func (*Service) AdaptTypeToPostgresModelLogbook

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

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

func (*Service) AdaptTypeToPostgresModelQso

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

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

func (*Service) AdaptTypeToPostgresModelUser

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

func (*Service) AdaptTypeToSqliteModelContactedStation

func (s *Service) AdaptTypeToSqliteModelContactedStation(u types.ContactedStation) (*sqmodels.ContactedStation, error)

AdaptTypeToSqliteModelContactedStation converts a types.ContactedStation object to its corresponding SQLite model representation. Returns the SQLite model instance and any error encountered during the adaptation process. If the service or its adapter is nil, it returns an error indicating the issue.

func (*Service) AdaptTypeToSqliteModelLogbook

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

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

func (*Service) AdaptTypeToSqliteModelQso

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) ExecContext

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

func (*Service) FetchUserByCallsign

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

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) GenerateNewSessionID

func (s *Service) GenerateNewSessionID() (int64, error)

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) InsertUser

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

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

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) SoftDeleteSessionID

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

func (*Service) UpdateUser

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

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