Compare commits
2 Commits
c0a8c50dbb
...
c4c02533e7
Author | SHA1 | Date |
---|---|---|
vilmibm | c4c02533e7 | |
vilmibm | 8d531936a1 |
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
dbpath="/town/var/town.db"
|
||||||
|
srcpath="/town/src/town"
|
||||||
|
|
||||||
|
rm -f "$dbpath"
|
||||||
|
sqlite3 < "${srcpath}/sql/create_town_db.sql" "$dbpath"
|
||||||
|
chown root:admin "$dbpath"
|
||||||
|
chmod o-r "$dbpath"
|
||||||
|
chmod g+w "$dbpath"
|
|
@ -9,9 +9,10 @@ CREATE TABLE IF NOT EXISTS users (
|
||||||
FOREIGN KEY (signupid) REFERENCES signups(signupid)
|
FOREIGN KEY (signupid) REFERENCES signups(signupid)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
-- TODO address /should/ be unique but leaving it duplicable for now since i can think of some cases where there might be >1 account for the same human
|
||||||
CREATE TABLE IF NOT EXISTS emails (
|
CREATE TABLE IF NOT EXISTS emails (
|
||||||
id INTEGER PRIMARY KEY,
|
id INTEGER PRIMARY KEY,
|
||||||
address TEXT UNIQUE,
|
address TEXT,
|
||||||
userid INTEGER,
|
userid INTEGER,
|
||||||
|
|
||||||
FOREIGN KEY (userid) REFERENCES users(userid)
|
FOREIGN KEY (userid) REFERENCES users(userid)
|
|
@ -59,6 +59,7 @@ func (n *AdminNote) Insert(db *sql.DB) error {
|
||||||
|
|
||||||
type TownUser struct {
|
type TownUser struct {
|
||||||
ID int64
|
ID int64
|
||||||
|
Created time.Time
|
||||||
Emails []string
|
Emails []string
|
||||||
Username string
|
Username string
|
||||||
Notes []AdminNote
|
Notes []AdminNote
|
||||||
|
@ -66,6 +67,61 @@ type TownUser struct {
|
||||||
IsAdmin bool
|
IsAdmin bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (u *TownUser) Insert(db *sql.DB) (err error) {
|
||||||
|
var tx *sql.Tx
|
||||||
|
var stmt *sql.Stmt
|
||||||
|
var result sql.Result
|
||||||
|
var liid int64
|
||||||
|
|
||||||
|
if tx, err = db.Begin(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
if err != nil {
|
||||||
|
tx.Rollback()
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
u.Created = time.Now()
|
||||||
|
if stmt, err = tx.Prepare(`
|
||||||
|
INSERT INTO notes (created, username, state, admin)
|
||||||
|
VALUES ( ?, ?, ?, ?)`); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if result, err = stmt.Exec(
|
||||||
|
u.Created.Unix(),
|
||||||
|
u.Username,
|
||||||
|
u.State,
|
||||||
|
u.IsAdmin); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if liid, err = result.LastInsertId(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
u.ID = liid
|
||||||
|
|
||||||
|
if len(u.Emails) > 0 {
|
||||||
|
for _, e := range u.Emails {
|
||||||
|
if stmt, err = tx.Prepare(`
|
||||||
|
INSERT INTO emails (address, userid)
|
||||||
|
VALUES (?, ?)`); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if result, err = stmt.Exec(e, u.ID); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tx.Commit()
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func ConnectDB() (*sql.DB, error) {
|
func ConnectDB() (*sql.DB, error) {
|
||||||
db, err := sql.Open("sqlite3", dsn)
|
db, err := sql.Open("sqlite3", dsn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue