Add DB.DeleteUser

git-svn-id: file:///srv/svn/repo/suika/trunk@375 f0ae65fe-ee39-954e-97ec-027ff2717ef4
This commit is contained in:
contact 2020-08-03 16:43:39 +00:00
parent 6293d8dfe9
commit 676ffcc0b3

38
db.go
View File

@ -250,6 +250,40 @@ func (db *DB) StoreUser(user *User) error {
return err
}
func (db *DB) DeleteUser(username string) error {
db.lock.Lock()
defer db.lock.Unlock()
tx, err := db.db.Begin()
if err != nil {
return err
}
defer tx.Rollback()
_, err = tx.Exec(`DELETE FROM Channel
WHERE id IN (
SELECT Channel.id
FROM Channel
JOIN Network ON Channel.network = Network.id
WHERE Network.user = ?
)`, username)
if err != nil {
return err
}
_, err = tx.Exec("DELETE FROM Network WHERE user = ?", username)
if err != nil {
return err
}
_, err = tx.Exec("DELETE FROM User WHERE username = ?", username)
if err != nil {
return err
}
return tx.Commit()
}
func (db *DB) ListNetworks(username string) ([]Network, error) {
db.lock.RLock()
defer db.lock.RUnlock()
@ -359,12 +393,12 @@ func (db *DB) DeleteNetwork(id int64) error {
}
defer tx.Rollback()
_, err = tx.Exec("DELETE FROM Network WHERE id = ?", id)
_, err = tx.Exec("DELETE FROM Channel WHERE network = ?", id)
if err != nil {
return err
}
_, err = tx.Exec("DELETE FROM Channel WHERE network = ?", id)
_, err = tx.Exec("DELETE FROM Network WHERE id = ?", id)
if err != nil {
return err
}