- Go
- GraphQL : graphql-go
- ORM : gorm
- User Sign Up & Sign In
- Change a Password, Profile
- Create a database
postgres=# CREATE DATABASE go;
- Create a user as owner of database
postgres=# CREATE USER go WITH ENCRYPTED PASSWORD 'go';
postgres=# ALTER DATABASE go OWNER TO go;
- Grant all privileges to user for the database
postgres=# GRANT ALL PRIVILEGES ON DATABASE go TO go;
- Configure the db in
db.go
// ConnectDB : connecting DB
func ConnectDB() (*DB, error) {
db, err := gorm.Open("postgres", "host=localhost port=5432 user=go dbname=go password=go sslmode=disable")
if err != nil {
panic(err)
}
return &DB{db}, nil
}
or with Docker
host address should be edited to
host.docker.internal
to connect a host interface.
// ConnectDB : connecting DB
func ConnectDB() (*DB, error) {
db, err := gorm.Open("postgres", "host=host.docker.internal port=5432 user=go dbname=go password=go sslmode=disable")
if err != nil {
panic(err)
}
return &DB{db}, nil
}
$ go run ./migrations/init.go
or with Docker
$ docker build -t go-graphql-api .
$ docker run --rm go-graphql-api migrate
This will generate the users
table in the database as per the User Model declared in ./model/user.go
$ go run server.go
or with Docker
$ docker run --rm -d -p 8080:8080 go-graphql-api
Connect to http://localhost:8080
You need to set the Http request headers Authorization
: {JWT_token}
mutation {
signUp(
email: "[email protected]"
password: "12345678"
firstName: "graphql"
lastName: "go"
) {
ok
error
user {
id
email
firstName
lastName
bio
avatar
createdAt
updatedAt
}
}
}
mutation {
signIn(email: "[email protected]", password: "12345678") {
ok
error
token
}
}
mutation {
changePassword(password: "87654321") {
ok
error
user {
id
email
firstName
lastName
bio
avatar
createdAt
updatedAt
}
}
}
mutation {
changeProfile(bio: "Go developer", avatar: "go-developer.png") {
ok
error
user {
id
email
firstName
lastName
bio
avatar
createdAt
updatedAt
}
}
}
query {
getMyProfile {
ok
error
user {
id
email
firstName
lastName
bio
avatar
createdAt
updatedAt
}
}
}
- Sign-Up
- Query the profile with implementing
context.Context
- Sign-In with JWT
- Change the password
- Change the profile
- Merging *.graphql files to a schema with
packr
- Using Configuration file for DB & JWT secret_key