tMerge Submit/Refresh as a single SQL query - scoreboard - Interactive scoreboard for CTF-like games
 (HTM) git clone git://git.z3bra.org/scoreboard.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
 (DIR) commit 55681064d723f99c219f287a6c65cf977338e616
 (DIR) parent d3aeebcb5ccad3ef7c0d1febb9525189d90ed1c0
 (HTM) Author: Willy Goiffon <contact@z3bra.org>
       Date:   Wed,  2 Oct 2024 23:06:41 +0200
       
       Merge Submit/Refresh as a single SQL query
       
       Diffstat:
         M player.go                           |      39 +++++--------------------------
       
       1 file changed, 6 insertions(+), 33 deletions(-)
       ---
 (DIR) diff --git a/player.go b/player.go
       t@@ -129,30 +129,6 @@ func (p *Player) Fetch() error {
                return nil
        }
        
       -func (p *Player) Refresh(ts int64) error {
       -        var err error
       -
       -        p.flags, err = db_get_user_flags(p.db, p.name)
       -        if err != nil {
       -                return err
       -        }
       -
       -        p.score, err = db_get_user_score(p.db, p.name)
       -        if err != nil {
       -                return err
       -        }
       -
       -        query := `UPDATE user SET ts = ? WHERE name = ?;`
       -        _, err = p.db.Exec(query, ts, p.name)
       -        if err != nil {
       -                return err
       -        }
       -
       -        p.ts = ts
       -
       -        return nil
       -}
       -
        func (p *Player) Rank() int {
                rank, err := db_get_user_rank(p.db, p.name)
                if err != nil {
       t@@ -240,24 +216,21 @@ func (p *Player) HasFlag(flag Flag) bool {
        
        func (p *Player) Submit(flag Flag) error {
                var err error
       -        var ts int64
        
                if p.HasFlag(flag) {
                        return errors.New("Flag already submitted")
                } else {
       -                query := `INSERT INTO score(name,flag) VALUES(?,?);`
       -                _, err = p.db.Exec(query, p.name, flag.value)
       +                p.ts = time.Now().Unix()
       +                query := `
       +                  INSERT INTO score(name,flag) VALUES(?,?);
       +                  UPDATE user SET ts = ? WHERE name = ?;
       +                `
       +                _, err = p.db.Exec(query, p.name, flag.value, p.ts, p.name)
                        if err != nil {
                                return err
                        }
                }
        
       -        // update user status in database
       -        err = p.Refresh(ts)
       -        if err != nil {
       -                return err
       -        }
       -
                return nil
        }