Added event settings model.

This commit is contained in:
Patrick Fairbank
2014-05-24 17:58:57 -07:00
parent ac53c6a870
commit 37999ba6f5
9 changed files with 99 additions and 12 deletions

1
.gitignore vendored
View File

@@ -23,3 +23,4 @@ _testmain.go
*.exe
*.test
*.db
*.out

View File

@@ -15,9 +15,10 @@ import (
const migrationsDir = "db/migrations"
type Database struct {
path string
db *sql.DB
teamMap *modl.DbMap
path string
db *sql.DB
eventSettingsMap *modl.DbMap
teamMap *modl.DbMap
}
// Opens the SQLite database at the given path, creating it if it doesn't exist, and runs any pending
@@ -55,4 +56,7 @@ func (database *Database) mapTables() {
database.teamMap = modl.NewDbMap(database.db, dialect)
database.teamMap.AddTableWithName(Team{}, "teams").SetKeys(false, "Id")
database.eventSettingsMap = modl.NewDbMap(database.db, dialect)
database.eventSettingsMap.AddTableWithName(EventSettings{}, "event_settings").SetKeys(false, "Id")
}

View File

@@ -4,9 +4,16 @@
package main
import (
"os"
"testing"
)
const testDbPath = "test.db"
func clearDb() {
os.Remove(testDbPath)
}
func TestOpenUnreachableDatabase(t *testing.T) {
_, err := OpenDatabase("nonexistentdir/test.db")
if err == nil {

4
db/dbconf.yml Normal file
View File

@@ -0,0 +1,4 @@
# This file must exist to be able to create migration boilerplate with `goose create MigrationName sql`.
development:
driver: sqlite3
open: placeholder.db # Doesn't matter what this value is; the file won't be created.

View File

@@ -0,0 +1,9 @@
-- +goose Up
CREATE TABLE event_settings (
id INTEGER PRIMARY KEY,
name VARCHAR(255),
code VARCHAR(16)
);
-- +goose Down
DROP TABLE event_settings;

34
event_settings.go Normal file
View File

@@ -0,0 +1,34 @@
// Copyright 2014 Team 254. All Rights Reserved.
// Author: pat@patfairbank.com (Patrick Fairbank)
//
// Model and datastore read/write methods for event-level configuration.
package main
type EventSettings struct {
Id int
Name string
Code string
}
const eventSettingsId = 0
func (database *Database) GetEventSettings() (*EventSettings, error) {
eventSettings := new(EventSettings)
err := database.eventSettingsMap.Get(eventSettings, eventSettingsId)
if err != nil {
// Database record doesn't exist yet; create it now.
err = database.eventSettingsMap.Insert(eventSettings)
if err != nil {
return nil, err
}
return new(EventSettings), nil
}
return eventSettings, nil
}
func (database *Database) SaveEventSettings(eventSettings *EventSettings) error {
eventSettings.Id = eventSettingsId
_, err := database.eventSettingsMap.Update(eventSettings)
return err
}

37
event_settings_test.go Normal file
View File

@@ -0,0 +1,37 @@
// Copyright 2014 Team 254. All Rights Reserved.
// Author: pat@patfairbank.com (Patrick Fairbank)
package main
import (
"testing"
)
func TestEventSettingsReadWrite(t *testing.T) {
clearDb()
defer clearDb()
db, _ := OpenDatabase(testDbPath)
defer db.Close()
eventSettings, err := db.GetEventSettings()
if err != nil {
t.Error("Error:", err)
}
if *eventSettings != *new(EventSettings) {
t.Errorf("Expected blank event settings, got %v", eventSettings)
}
eventSettings.Name = "Chezy Champs"
eventSettings.Code = "cc"
err = db.SaveEventSettings(eventSettings)
if err != nil {
t.Error("Error:", err)
}
eventSettings2, err := db.GetEventSettings()
if err != nil {
t.Error("Error:", err)
}
if *eventSettings2 != *eventSettings {
t.Errorf("Expected '%v', got '%v'", eventSettings, eventSettings2)
}
}

View File

@@ -5,8 +5,6 @@
package main
import ()
type Team struct {
Id int
Name string

View File

@@ -4,16 +4,9 @@
package main
import (
"os"
"testing"
)
const testDbPath = "test.db"
func clearDb() {
os.Remove(testDbPath)
}
func TestGetNonexistentTeam(t *testing.T) {
clearDb()
defer clearDb()