database

package module
v0.0.24 Latest Latest
Warning

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

Go to latest
Published: Dec 2, 2025 License: MIT Imports: 35 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 (
	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) AdaptSqliteModelToTypeContactedStation added in v0.0.15

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 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) AdaptTypeToSqliteModelContactedStation added in v0.0.20

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 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) ContactedStationExistsByCallsign added in v0.0.20

func (s *Service) ContactedStationExistsByCallsign(callsign string) (bool, error)

ContactedStationExistsByCallsign checks if a contacted station exists in the database using the provided callsign. Returns true if the station exists, false otherwise. Errors are returned for invalid input or unsupported drivers. It supports only SQLite and will return an error for unsupported database drivers or uninitialized services.

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) FetchContactedStationByCallsign added in v0.0.15

func (s *Service) FetchContactedStationByCallsign(callsign string) (types.ContactedStation, error)

FetchContactedStationByCallsign retrieves a contacted station's details using the provided callsign. It returns a ContactedStation object or an error if the fetch operation fails. It supports only SQLite and will return an error for unsupported database drivers or uninitialized services.

func (*Service) FetchContactedStationByCallsignContext added in v0.0.15

func (s *Service) FetchContactedStationByCallsignContext(ctx context.Context, callsign string) (types.ContactedStation, error)

FetchContactedStationByCallsignContext retrieves a contacted station's details by callsign within a given context. Returns a ContactedStation object or an error if the retrieval fails or the database driver is unsupported. It supports only SQLite and will return an error for unsupported database drivers or uninitialized services.

func (*Service) FetchContactedStationById added in v0.0.15

func (s *Service) FetchContactedStationById(id int64) (types.ContactedStation, error)

FetchContactedStationById retrieves a contacted station's details by its unique identifier from persistent storage. It supports only SQLite and will return an error for unsupported database drivers or uninitialized services.

func (*Service) FetchContactedStationByIdContext added in v0.0.15

func (s *Service) FetchContactedStationByIdContext(ctx context.Context, id int64) (types.ContactedStation, error)

FetchContactedStationByIdContext retrieves a contacted station by ID within the given context, implementing driver-specific logic. It supports only SQLite and will return an error for unsupported database drivers or uninitialized services.

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)

FetchQsoById retrieves a QSO record by its unique ID and returns it, defaulting to the background context for execution.

func (*Service) FetchQsoByIdContext added in v0.0.8

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

FetchQsoByIdContext fetches a QSO record by its unique ID within the provided context and returns it or an 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) GenerateNewSessionID added in v0.0.19

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) 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) InsertContactedStation added in v0.0.15

func (s *Service) InsertContactedStation(station types.ContactedStation) (types.ContactedStation, error)

InsertContactedStation inserts a contacted station record into the datastore using the provided station details. It returns the inserted types.ContactedStation object or an error if the operation fails. It supports only SQLite and will return an error for unsupported database drivers or uninitialized services.

func (*Service) InsertContactedStationContext added in v0.0.15

func (s *Service) InsertContactedStationContext(ctx context.Context, station types.ContactedStation) (types.ContactedStation, error)

InsertContactedStationContext inserts a contacted station record into the database in a specific context. It supports only SQLite and will return an error for unsupported database drivers or uninitialized services.

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) SoftDeleteSessionID added in v0.0.19

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

func (*Service) UpdateContactedStation added in v0.0.21

func (s *Service) UpdateContactedStation(station types.ContactedStation) error

UpdateContactedStation updates the contacted station details in the database using a default background context. It ensures the provided contacted station data is valid and triggers an update operation. Returns an error if the update fails. It supports only SQLite and will return an error for unsupported database drivers or uninitialized services.

func (*Service) UpdateContactedStationContext added in v0.0.21

func (s *Service) UpdateContactedStationContext(ctx context.Context, station types.ContactedStation) error

UpdateContactedStationContext updates the contacted station details in the database within the provided context. Returns an error if the service is nil, not initialized, not open, or if the database driver is unsupported. It supports only SQLite and will return an error for unsupported database drivers or uninitialized services.

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