diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..8cb4204 --- /dev/null +++ b/go.mod @@ -0,0 +1,10 @@ +module WWWShop + +go 1.15 + +require ( + github.com/go-pg/pg/v10 v10.7.4 // indirect + github.com/golang-migrate/migrate/v4 v4.14.1 + github.com/howeyc/fsnotify v0.9.0 // indirect + github.com/lib/pq v1.8.0 +) diff --git a/main.go b/main.go new file mode 100644 index 0000000..dc92ad9 --- /dev/null +++ b/main.go @@ -0,0 +1,9 @@ +package main + +import ( + "WWWShop/wwwshop" +) + +func main() { + wwwshop.New().Init(); +} diff --git a/migrations/0000001_create_users_table.down.sql b/migrations/0000001_create_users_table.down.sql new file mode 100644 index 0000000..c99ddcd --- /dev/null +++ b/migrations/0000001_create_users_table.down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS users; diff --git a/migrations/0000001_create_users_table.up.sql b/migrations/0000001_create_users_table.up.sql new file mode 100644 index 0000000..214bc58 --- /dev/null +++ b/migrations/0000001_create_users_table.up.sql @@ -0,0 +1,5 @@ +CREATE TABLE IF NOT EXISTS users ( + id serial PRIMARY KEY, + username text UNIQUE NOT NULL, + password text NOT NULL +); diff --git a/wwwshop/dao/database/database.go b/wwwshop/dao/database/database.go new file mode 100644 index 0000000..4e77c2a --- /dev/null +++ b/wwwshop/dao/database/database.go @@ -0,0 +1,35 @@ +package database + +import ( + "database/sql" + "fmt" + "github.com/golang-migrate/migrate/v4" + "github.com/golang-migrate/migrate/v4/database/postgres" + _ "github.com/golang-migrate/migrate/v4/source/file" + _ "github.com/lib/pq" + "log" + "os" +) + +func DB() *sql.DB { + db, err := sql.Open("postgres", os.Getenv("DATABASE_URL")) + if err != nil { + fmt.Fprintf(os.Stderr, "Unable to connect to database: %v\n", err) + os.Exit(1) + } + return db +} + +func Migrate(db *sql.DB) { + driver, err := postgres.WithInstance(db, &postgres.Config{}) + if err != nil { + log.Fatal(err) + } + m, err := migrate.NewWithDatabaseInstance("file://migrations", "postgres", driver) + if err != nil { + log.Fatal(err) + } + if err := m.Up(); err != nil { + log.Fatal(err) + } +} diff --git a/wwwshop/wwwshop.go b/wwwshop/wwwshop.go new file mode 100644 index 0000000..a88b861 --- /dev/null +++ b/wwwshop/wwwshop.go @@ -0,0 +1,24 @@ +package wwwshop + +import ( + "net/http" + "fmt" + d "WWWShop/wwwshop/dao/database" +) + +type WWWShop struct {} + +func New() WWWShop { + var self = WWWShop {}; + return self; +} + + +func (self WWWShop) Init() { + var db = d.DB() + d.Migrate(db) + http.HandleFunc("/", func( w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, "Hello world") + }) + http.ListenAndServe(":8080", nil) +}