ictgj-voting/model_games.go

146 lines
3.1 KiB
Go
Raw Normal View History

2017-04-21 18:17:18 +00:00
package main
2017-06-15 17:35:53 +00:00
import (
"errors"
"github.com/pborman/uuid"
)
2017-04-21 18:17:18 +00:00
type Game struct {
2017-06-15 17:35:53 +00:00
Name string
TeamId string
Description string
Screenshots []Screenshot
}
type Screenshot struct {
Description string
Image string
2017-04-21 18:17:18 +00:00
}
2017-06-08 20:43:11 +00:00
2017-06-15 17:35:53 +00:00
func dbUpdateTeamGame(teamId, name, desc string) error {
var err error
if err = openDatabase(); err != nil {
return err
}
defer closeDatabase()
// Make sure the team is valid
tm := dbGetTeam(teamId)
if tm == nil {
return errors.New("Invalid team")
}
gamePath := []string{"teams", teamId, "game"}
if err := db.MkBucketPath(gamePath); err != nil {
return err
}
if name == "" {
name = tm.Name + "'s Game"
}
if err := db.SetValue(gamePath, "name", name); err != nil {
return err
}
if err := db.SetValue(gamePath, "description", desc); err != nil {
return err
}
if err := db.MkBucketPath(append(gamePath, "screenshots")); err != nil {
return err
}
return err
}
func dbGetAllGames() []Game {
var ret []Game
tms := dbGetAllTeams()
for i := range tms {
ret = append(ret, *dbGetTeamGame(tms[i].UUID))
}
return ret
}
func dbGetTeamGame(teamId string) *Game {
var err error
if err = openDatabase(); err != nil {
return nil
}
defer closeDatabase()
gamePath := []string{"teams", teamId, "game"}
gm := new(Game)
if gm.Name, err = db.GetValue(gamePath, "name"); err != nil {
gm.Name = ""
}
gm.TeamId = teamId
if gm.Description, err = db.GetValue(gamePath, "description"); err != nil {
gm.Description = ""
}
gm.Screenshots = dbGetTeamGameScreenshots(teamId)
return gm
}
// Screenshots are saved as base64 encoded pngs
func dbGetTeamGameScreenshots(teamId string) []Screenshot {
var ret []Screenshot
var err error
ssPath := []string{"teams", teamId, "game", "screenshots"}
var ssIds []string
if ssIds, err = db.GetBucketList(ssPath); err != nil {
return ret
}
for _, v := range ssIds {
if ss := dbGetTeamGameScreenshot(teamId, v); ss != nil {
ret = append(ret, *ss)
}
}
return ret
}
func dbGetTeamGameScreenshot(teamId, ssId string) *Screenshot {
var err error
ssPath := []string{"teams", teamId, "game", "screenshots", ssId}
ret := new(Screenshot)
if ret.Description, err = db.GetValue(ssPath, "description"); err != nil {
return nil
}
if ret.Image, err = db.GetValue(ssPath, "image"); err != nil {
return nil
}
return ret
}
func dbSaveTeamGameScreenshot(teamId string, ss *Screenshot) error {
var err error
if err = openDatabase(); err != nil {
return nil
}
defer closeDatabase()
ssPath := []string{"teams", teamId, "game", "screenshots"}
// Generate a UUID for this screenshot
uuid := uuid.New()
ssPath = append(ssPath, uuid)
if err := db.MkBucketPath(ssPath); err != nil {
return err
}
if err := db.SetValue(ssPath, "description", ss.Description); err != nil {
return err
}
if err := db.SetValue(ssPath, "image", ss.Image); err != nil {
return err
}
return nil
}
func dbDeleteTeamGameScreenshot(teamId, ssId string) error {
var err error
if err = openDatabase(); err != nil {
return nil
}
defer closeDatabase()
ssPath := []string{"teams", teamId, "game", "screenshots"}
return db.DeleteBucket(ssPath, ssId)
2017-06-08 20:43:11 +00:00
}