store

package
v1.5.0 Latest Latest
Warning

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

Go to latest
Published: Feb 19, 2026 License: MIT Imports: 7 Imported by: 0

Documentation

Overview

Package store provides persistent storage for saved games.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DefaultDBPath

func DefaultDBPath() string

DefaultDBPath returns ~/.puzzletea/history.db.

Types

type CategoryStat added in v1.5.0

type CategoryStat struct {
	GameType       string
	TotalAttempts  int
	TotalVictories int
	TotalAbandoned int
	TimesDaily     int
	DailyVictories int
	PreferredMode  string
}

CategoryStat holds aggregate statistics for a single game category.

type GameRecord

type GameRecord struct {
	ID           int64
	Name         string
	GameType     string
	Mode         string
	InitialState string
	SaveState    string
	Status       GameStatus
	CreatedAt    time.Time
	UpdatedAt    time.Time
	CompletedAt  *time.Time
}

type GameStatus

type GameStatus string
const (
	StatusNew        GameStatus = "new"
	StatusInProgress GameStatus = "in_progress"
	StatusCompleted  GameStatus = "completed"
	StatusAbandoned  GameStatus = "abandoned"
)

type ModeStat added in v1.5.0

type ModeStat struct {
	GameType       string
	Mode           string
	Victories      int
	DailyVictories int
}

ModeStat holds per-mode victory counts for XP computation.

type Store

type Store struct {
	// contains filtered or unexported fields
}

func Open

func Open(dbPath string) (*Store, error)

Open creates the directory if needed, opens the database, creates the table, and enables WAL mode.

func (*Store) Close

func (s *Store) Close() error

func (*Store) CreateGame

func (s *Store) CreateGame(rec *GameRecord) error

CreateGame inserts a new game record and sets rec.ID.

func (*Store) GetCategoryStats added in v1.5.0

func (s *Store) GetCategoryStats() ([]CategoryStat, error)

GetCategoryStats returns aggregate stats per game category from the category_stats view.

func (*Store) GetDailyGame added in v1.3.0

func (s *Store) GetDailyGame(name string) (*GameRecord, error)

GetDailyGame looks up a daily game by name, including abandoned ones. Daily puzzles should always be resumable regardless of status. Returns nil, nil if no matching game is found.

func (*Store) GetDailyStreakDates added in v1.5.0

func (s *Store) GetDailyStreakDates() ([]time.Time, error)

GetDailyStreakDates returns distinct completion dates for daily games, ordered most recent first. Dates are in local time with time set to midnight.

func (*Store) GetGameByName

func (s *Store) GetGameByName(name string) (*GameRecord, error)

GetGameByName looks up a single non-abandoned game by its unique name. Returns nil, nil if no matching game is found.

func (*Store) GetModeStats added in v1.5.0

func (s *Store) GetModeStats() ([]ModeStat, error)

GetModeStats returns per-mode victory counts from the mode_stats view.

func (*Store) ListAllGames

func (s *Store) ListAllGames() ([]GameRecord, error)

ListAllGames returns all games (including abandoned) ordered by most recently updated.

func (*Store) ListGames

func (s *Store) ListGames() ([]GameRecord, error)

ListGames returns all non-abandoned games ordered by most recently updated.

func (*Store) NameExists

func (s *Store) NameExists(name string) (bool, error)

NameExists checks whether a game with the given name already exists.

func (*Store) UpdateSaveState

func (s *Store) UpdateSaveState(id int64, saveState string) error

UpdateSaveState updates save_state and updated_at for the given game.

func (*Store) UpdateStatus

func (s *Store) UpdateStatus(id int64, status GameStatus) error

UpdateStatus updates the status (and completed_at if completed) for the given game.

Jump to

Keyboard shortcuts

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