Changeset 382 in code for trunk/db.go


Ignore:
Timestamp:
Aug 11, 2020, 8:26:42 AM (5 years ago)
Author:
contact
Message:

Add User.ID

For now it's just a new field that'll be useful to generate user ident
strings. It uses the SQLite implicit rowid column. In the future the DB
interface will need to be updated to use user IDs instead of usernames.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/db.go

    r375 r382  
    1111
    1212type User struct {
    13         Created  bool
     13        ID       int64
    1414        Username string
    1515        Password string // hashed
     
    191191        defer db.lock.RUnlock()
    192192
    193         rows, err := db.db.Query("SELECT username, password, admin FROM User")
     193        rows, err := db.db.Query("SELECT rowid, username, password, admin FROM User")
    194194        if err != nil {
    195195                return nil, err
     
    201201                var user User
    202202                var password *string
    203                 if err := rows.Scan(&user.Username, &password, &user.Admin); err != nil {
     203                if err := rows.Scan(&user.ID, &user.Username, &password, &user.Admin); err != nil {
    204204                        return nil, err
    205205                }
    206                 user.Created = true
    207206                user.Password = fromStringPtr(password)
    208207                users = append(users, user)
     
    219218        defer db.lock.RUnlock()
    220219
    221         user := &User{Created: true, Username: username}
     220        user := &User{Username: username}
    222221
    223222        var password *string
    224         row := db.db.QueryRow("SELECT password, admin FROM User WHERE username = ?", username)
    225         if err := row.Scan(&password, &user.Admin); err != nil {
     223        row := db.db.QueryRow("SELECT rowid, password, admin FROM User WHERE username = ?", username)
     224        if err := row.Scan(&user.ID, &password, &user.Admin); err != nil {
    226225                return nil, err
    227226        }
     
    237236
    238237        var err error
    239         if user.Created {
     238        if user.ID != 0 {
    240239                _, err = db.db.Exec("UPDATE User SET password = ?, admin = ? WHERE username = ?",
    241240                        password, user.Admin, user.Username)
    242241        } else {
    243                 _, err = db.db.Exec("INSERT INTO User(username, password, admin) VALUES (?, ?, ?)",
     242                var res sql.Result
     243                res, err = db.db.Exec("INSERT INTO User(username, password, admin) VALUES (?, ?, ?, ?)",
    244244                        user.Username, password, user.Admin)
    245                 if err == nil {
    246                         user.Created = true
    247                 }
     245                if err != nil {
     246                        return err
     247                }
     248                user.ID, err = res.LastInsertId()
    248249        }
    249250
Note: See TracChangeset for help on using the changeset viewer.