diff --git a/api/.env b/api/.env new file mode 100644 index 00000000..456cdec7 --- /dev/null +++ b/api/.env @@ -0,0 +1,6 @@ +MYSQL_HOST=127.0.0.1:3306 +MYSQL_DATABASE=photoview +MYSQL_USERNAME=photoview +MYSQL_PASSWORD= + +API_PORT=4001 \ No newline at end of file diff --git a/api/database/mysql.go b/api/database/mysql.go new file mode 100644 index 00000000..a602bd0d --- /dev/null +++ b/api/database/mysql.go @@ -0,0 +1,38 @@ +package database + +import ( + "database/sql" + "fmt" + "log" + "os" + + // Load mysql driver + _ "github.com/go-sql-driver/mysql" +) + +// SetupDatabase connects to the database using environment variables +func SetupDatabase() *sql.DB { + + host := os.Getenv("MYSQL_HOST") + database := os.Getenv("MYSQL_DATABASE") + username := os.Getenv("MYSQL_USERNAME") + password := os.Getenv("MYSQL_PASSWORD") + + if host == "" || database == "" || username == "" { + log.Fatalln("Database host, name and username are required") + } + + address := fmt.Sprintf("%s:%s@tcp(%s)/%s", username, password, host, database) + log.Printf("Connecting to database: %s", address) + + db, err := sql.Open("mysql", address) + if err != nil { + log.Fatalf("Could not connect to database: %s\n", err.Error()) + } + + if err := db.Ping(); err != nil { + log.Fatalf("Could not connect to database: %s\n", err.Error()) + } + + return db +} diff --git a/api/go.mod b/api/go.mod index b13a4a49..be8a10c9 100644 --- a/api/go.mod +++ b/api/go.mod @@ -4,5 +4,7 @@ go 1.13 require ( github.com/99designs/gqlgen v0.10.2 + github.com/go-sql-driver/mysql v1.5.0 + github.com/joho/godotenv v1.3.0 github.com/vektah/gqlparser v1.2.0 ) diff --git a/api/go.sum b/api/go.sum index 5c527d3a..37f7ce90 100644 --- a/api/go.sum +++ b/api/go.sum @@ -6,6 +6,8 @@ github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-chi/chi v3.3.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= +github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/mux v1.6.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= @@ -13,6 +15,8 @@ github.com/gorilla/websocket v1.2.0 h1:VJtLvh6VQym50czpZzx07z/kw9EgAxI3x1ZB8taTM github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= +github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= diff --git a/api/server/server.go b/api/server/server.go index 5f3df763..f8f7a8cb 100644 --- a/api/server/server.go +++ b/api/server/server.go @@ -5,18 +5,29 @@ import ( "net/http" "os" + "github.com/joho/godotenv" + + "github.com/viktorstrate/photoview/api/database" + "github.com/99designs/gqlgen/handler" photoview_graphql "github.com/viktorstrate/photoview/api/graphql" ) -const defaultPort = "8080" +const defaultPort = "4001" func main() { - port := os.Getenv("PORT") + + if err := godotenv.Load(); err != nil { + log.Println("No .env file found") + } + + port := os.Getenv("API_PORT") if port == "" { port = defaultPort } + database.SetupDatabase() + http.Handle("/", handler.Playground("GraphQL playground", "/query")) http.Handle("/query", handler.GraphQL(photoview_graphql.NewExecutableSchema(photoview_graphql.Config{Resolvers: &photoview_graphql.Resolver{}})))