From 0607fe2545505e746f4f1fb9ec8d41f8ca3f5bf3 Mon Sep 17 00:00:00 2001 From: vilmibm Date: Sun, 8 Jan 2023 00:22:04 -0800 Subject: [PATCH] add --reset for db --- server/cmd/main.go | 10 ++++++++++ server/db/db.go | 20 ++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/server/cmd/main.go b/server/cmd/main.go index fb18c97..1f751a1 100644 --- a/server/cmd/main.go +++ b/server/cmd/main.go @@ -73,6 +73,16 @@ func newServer() (*gameWorldServer, error) { return nil, err } + // TODO --reset flag + reset := flag.Bool("reset", false, "fully reset the database to its initial state") + flag.Parse() + + if *reset { + if err = db.Erase(); err != nil { + return nil, fmt.Errorf("failed to reset database: %w", err) + } + } + if err = db.Ensure(); err != nil { return nil, fmt.Errorf("failed to ensure default entities: %w", err) } diff --git a/server/db/db.go b/server/db/db.go index 77c2699..cfe40cb 100644 --- a/server/db/db.go +++ b/server/db/db.go @@ -33,6 +33,7 @@ type DB interface { // Defaults Ensure() error + Erase() error // Presence SessionIDForAvatar(Object) (string, error) @@ -79,6 +80,25 @@ func NewDB(connURL string) (DB, error) { return pgdb, nil } +// Erase fully destroys the database's contents, dropping all tables. +func (db *pgDB) Erase() (err error) { + stmts := []string{ + "DROP SCHEMA public CASCADE", + "CREATE SCHEMA public", + "GRANT ALL ON SCHEMA public TO postgres", + "GRANT ALL ON SCHEMA public TO public", + "COMMENT ON SCHEMA public IS 'standard public schema'", + } + + for _, stmt := range stmts { + if _, err = db.pool.Exec(context.Background(), stmt); err != nil { + return + } + } + + return nil +} + // Ensure checks for and then creates default resources if they do not exist (like the Foyer) func (db *pgDB) Ensure() error { // TODO this is sloppy but shrug