Skip to content

Commit

Permalink
fix(score): fix a bug where score werent added in db
Browse files Browse the repository at this point in the history
  • Loading branch information
mJehanno committed Mar 3, 2024
1 parent 7f7b6bf commit 202475f
Show file tree
Hide file tree
Showing 12 changed files with 81 additions and 41 deletions.
26 changes: 26 additions & 0 deletions backend/conf/conf.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package conf

import (
"fmt"
"os"
"path"
)

func GetConfFolder() (*string, error) {
var err error
conf, erra := os.UserConfigDir()
if erra != nil {
conf, err = os.UserHomeDir()
if err != nil {
return nil, fmt.Errorf("%w and %w happened", erra, err)
}
}

confFolder := path.Join(conf, "mult-game")
err = os.MkdirAll(confFolder, 0775)
if err != nil {
return nil, fmt.Errorf("failed to create folder in config or home directory -> %w", err)
}

return &confFolder, nil
}
21 changes: 5 additions & 16 deletions backend/db/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@ package db
import (
"database/sql"
_ "embed"
"fmt"
"mult-game/backend/conf"
"mult-game/backend/logger"
"os"
"path"

"github.com/doug-martin/goqu/v9"
Expand All @@ -26,25 +25,15 @@ type Db struct {
func GetDbConnection(logger *logger.Logger) *Db {
var err error
dialect := goqu.Dialect("sqlite3")
var confFolder *string

conf, erra := os.UserConfigDir()
if erra != nil {
conf, err = os.UserHomeDir()
if err != nil {
logger.ErrLogger.WithError(fmt.Errorf("%w and %w happened", erra, err)).Error("failed to access config or home directory")
return nil
}
}

confFolder := path.Join(conf, "mult-game")
err = os.MkdirAll(confFolder, 0775)
confFolder, err = conf.GetConfFolder()
if err != nil {
logger.ErrLogger.WithError(err).Error("failed to create folder in config or home directory")
return nil
logger.ErrLogger.WithError(err).Error("failed to create config folder")
}

if conn == nil {
db, err := sql.Open("sqlite", path.Join(confFolder, "score.db"))
db, err := sql.Open("sqlite", path.Join(*confFolder, "score.db"))
if err != nil {
logger.ErrLogger.WithError(err).Error("failed to open db")
}
Expand Down
1 change: 1 addition & 0 deletions backend/db/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,6 @@ CREATE TABLE IF NOT EXISTS rank (
username TEXT NOT NULL,
score INTEGER NOT NULL,
difficulty TEXT CHECK(difficulty in ("easy", "medium", "hard")) NOT NULL,
game TEXT NOT NULL,
created_at TEXT DEFAULT (DATETIME('now'))
)
23 changes: 22 additions & 1 deletion backend/logger/logger.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
package logger

import (
"io"
"mult-game/backend/conf"
"os"
"path"

"github.com/sirupsen/logrus"
)

type Logger struct {
ErrLogger logrus.FieldLogger
DebugLogger logrus.FieldLogger
LogFile *os.File
}

var logger *Logger
Expand All @@ -18,11 +22,28 @@ func NewLogger() *Logger {
debug.SetLevel(logrus.DebugLevel)
debug.SetOutput(os.Stdout)

erl := logrus.New() // TODO : define log file
var f *os.File
erl := logrus.New()

confFolder, err := conf.GetConfFolder()
if err != nil {
erl.WithError(err).Error("failed to get config folder")
}

errorPathFile := path.Join(*confFolder, "errors.txt")
f, err = os.OpenFile(errorPathFile, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0755)
if err != nil {
erl.WithError(err).Error("failed to create error log file")
}

erl.SetReportCaller(true)
errWriter := io.MultiWriter(os.Stdout, f)
erl.SetOutput(errWriter)
if logger == nil {
logger = &Logger{
ErrLogger: erl,
DebugLogger: debug,
LogFile: f,
}
}

Expand Down
16 changes: 13 additions & 3 deletions backend/score/score.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,27 @@ const (
Hard DifficultyLevel = "hard"
)

type GameEnum string

const (
Mult GameEnum = "mult"
)

type ScoreDB struct {
ID int64 `db:"id" json:"id,omitempty"`
ID *int64 `db:"id" json:"id,omitempty"`
Username string `db:"username" json:"username"`
Score int `db:"score" json:"score"`
Difficulty DifficultyLevel `db:"difficulty" json:"difficulty"`
Game GameEnum `db:"game"`
Date string `db:"created_at" goqu:"skipinsert"`
}

func (s Score) Convert(dest *ScoreDB) {
dest.Username = s.Username
dest.Score = s.Score
dest.Date = s.Date.String()
dest.Difficulty = s.Difficulty
dest.Game = Mult
}

func (s ScoreDB) Convert(dest *Score) {
Expand Down Expand Up @@ -99,13 +108,14 @@ func (s *ScoreService) GetScore(difficulty DifficultyLevel) []Score {
}

func (s ScoreService) AddScore(sc Score) error {
query := s.Data.Conn.Insert("rank").Prepared(true).Rows(sc).Executor()
var dbVal ScoreDB
sc.Convert(&dbVal)
query := s.Data.Conn.Insert("rank").Prepared(true).Rows(dbVal).Executor()

if _, err := query.Exec(); err != nil {
s.Logger.ErrLogger.WithError(err).Error("failed to add rank in database")
return err
} else {
return nil
}

}
4 changes: 2 additions & 2 deletions frontend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion frontend/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "frontend",
"private": true,
"version": "1.3.1",
"version": "1.3.2",
"type": "module",
"scripts": {
"dev": "vite",
Expand Down
2 changes: 1 addition & 1 deletion frontend/package.json.md5
Original file line number Diff line number Diff line change
@@ -1 +1 @@
aa27fcc1fba89a7eda707565dc83b3f9
b2b66add8c5579eb021ae243c0424edd
10 changes: 5 additions & 5 deletions frontend/src/components/ScoreBoard.vue
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,17 @@ import { DifficultyLevel } from '@/models/game';
const props = withDefaults(defineProps<{
mode: Mode
level: DifficultyLevel
level?: DifficultyLevel
current?: score.Score
}>(), {mode: Mode.Static, level: DifficultyLevel.Medium})
}>(), {mode: Mode.Static })
const displayedScore = reactive(new Map<string, score.Score[]>([
["easy", []],
["medium", []],
["hard", []]
]))
const toast = useToast();
const stringLevel = computed(() => props.level.toString())
const stringLevel = computed(() => props.level?.toString())
onMounted(() => {
Expand All @@ -43,7 +43,7 @@ onMounted(() => {
})
}else {
GetScore(props.level).then((scores:score.Score[]) => {
const sc = displayedScore.get(stringLevel.value) as score.Score[]
const sc = displayedScore.get(stringLevel?.value) as score.Score[]
if (!scores) {
scores = [];
}
Expand All @@ -56,7 +56,7 @@ onMounted(() => {
sc?.push(props.current);
}
displayedScore.set(stringLevel.value,sc);
displayedScore.set(stringLevel?.value,sc);
}).catch(err => {
console.log(err)
toast.add({severity: 'error', summary: 'failed to load scoreboard data'})
Expand Down
10 changes: 0 additions & 10 deletions frontend/src/components/Timer.vue
Original file line number Diff line number Diff line change
Expand Up @@ -44,16 +44,6 @@ function reset() {
timer.restart(time);
}
/*function resetWithoutSec(sec: number){
const time = new Date();
time.setSeconds(time.getSeconds() + defaultSec.value - sec);
timer.restart(time);
}*/
/*function getDefaultSec() {
return props.seconds
}*/
onMounted(() => {
watchEffect(async () => {
if(timer.isExpired.value) {
Expand Down
5 changes: 4 additions & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ const (
)

var (
current = semver.MustParse("1.3.1")
current = semver.MustParse("1.3.2")
)

type Binder struct {
Expand Down Expand Up @@ -97,6 +97,9 @@ func startApp(bind *Binder) {
bind.Vm,
bind.Updater,
},
OnShutdown: func(ctx context.Context) {
defer bind.Logger.LogFile.Close()
},
})

if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion wails.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"info": {
"companyName": "mJehanno",
"productName": "mult-game",
"productVersion": "1.3.1",
"productVersion": "1.3.2",
"copyright": "Copyright @mJehanno",
"comments": "Built using Wails (https://wails.io)"
},
Expand Down

0 comments on commit 202475f

Please sign in to comment.