refactor: rebuild the app in golang with the fyne framework
This commit is contained in:
parent
479e4dffa8
commit
a8ed9c9ed1
161 changed files with 1212 additions and 6641 deletions
117
internal/data/database.go
Normal file
117
internal/data/database.go
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
package data
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
_ "modernc.org/sqlite" // Importiert den SQLite-Treiber
|
||||
)
|
||||
|
||||
type DatabaseService struct {
|
||||
DB *sql.DB
|
||||
}
|
||||
|
||||
func NewDatabaseService(dbPath string) (*DatabaseService, error) {
|
||||
db, err := sql.Open("sqlite", dbPath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err = db.Ping(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
createTableSQL := `
|
||||
CREATE TABLE IF NOT EXISTS training (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
date TEXT NOT NULL,
|
||||
sets INTEGER,
|
||||
weightLeft REAL,
|
||||
weightRight REAL,
|
||||
repsPerSet INTEGER,
|
||||
duration INTEGER,
|
||||
program TEXT,
|
||||
blockDay INTEGER
|
||||
);`
|
||||
|
||||
_, err = db.Exec(createTableSQL)
|
||||
if err != nil {
|
||||
log.Printf("Fehler beim Erstellen der Tabelle: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Hier könnten wir auch komplexere Migrationen wie dein _onUpgrade handle,
|
||||
// aber für den Anfang reicht das Erstellen der Tabelle.
|
||||
|
||||
log.Println("Datenbank erfolgreich initialisiert.")
|
||||
return &DatabaseService{DB: db}, nil
|
||||
}
|
||||
|
||||
func (s *DatabaseService) SaveTraining(session *TrainingSession) error {
|
||||
dateStr := session.Date.Format(time.RFC3339)
|
||||
|
||||
query := `
|
||||
INSERT INTO training (id, date, sets, weightLeft, weightRight, repsPerSet, duration, program, blockDay)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
ON CONFLICT(id) DO UPDATE SET
|
||||
date = excluded.date,
|
||||
sets = excluded.sets,
|
||||
weightLeft = excluded.weightLeft,
|
||||
weightRight = excluded.weightRight,
|
||||
repsPerSet = excluded.repsPerSet,
|
||||
duration = excluded.duration,
|
||||
program = excluded.program,
|
||||
blockDay = excluded.blockDay;
|
||||
`
|
||||
var id any
|
||||
if session.ID != 0 {
|
||||
id = session.ID
|
||||
}
|
||||
|
||||
_, err := s.DB.Exec(query, id, dateStr, session.Sets, session.WeightLeft, session.WeightRight, session.RepsPerSet, session.Duration, session.Program, session.BlockDay)
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *DatabaseService) GetTrainingCount() (int, error) {
|
||||
var count int
|
||||
query := "SELECT COUNT(*) FROM training;"
|
||||
err := s.DB.QueryRow(query).Scan(&count)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return 0, nil
|
||||
}
|
||||
return 0, err
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
|
||||
func (s *DatabaseService) GetHistory() ([]TrainingSession, error) {
|
||||
query := `SELECT id, date, sets, weightLeft, weightRight, repsPerSet, duration, program, blockDay FROM training ORDER BY date DESC LIMIT 20;`
|
||||
|
||||
rows, err := s.DB.Query(query)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var sessions []TrainingSession
|
||||
for rows.Next() {
|
||||
var s TrainingSession
|
||||
var dateStr string
|
||||
|
||||
err := rows.Scan(&s.ID, &dateStr, &s.Sets, &s.WeightLeft, &s.WeightRight, &s.RepsPerSet, &s.Duration, &s.Program, &s.BlockDay)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
s.Date, err = time.Parse(time.RFC3339, dateStr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
sessions = append(sessions, s)
|
||||
}
|
||||
|
||||
return sessions, nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue