Skip to content

Commit d4da008

Browse files
committed
Merge branch 'db-integration' of git://github.com/arnabsen1729/onlinejudge-server into arnabsen1729-db-integration
Few fixes: - Change dotenv integrations to use shared config - Don't use panic in production, use log.Fatal instead Signed-off-by: Dwaipayan Ray <[email protected]>
2 parents c0efca2 + b77316f commit d4da008

File tree

9 files changed

+107
-11
lines changed

9 files changed

+107
-11
lines changed

Diff for: docker-compose.yml

+1
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,4 @@ services:
3333
networks:
3434
postgres:
3535
driver: bridge
36+

Diff for: go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ require (
1111
github.com/gofiber/jwt/v2 v2.0.1
1212
github.com/joho/godotenv v1.3.0
1313
github.com/spf13/viper v1.7.1
14+
golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9
1415
)

Diff for: go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
268268
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
269269
golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee h1:4yd7jl+vXjalO5ztz6Vc1VADv+S/80LGJmyl1ROJ2AI=
270270
golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
271+
golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9 h1:umElSU9WZirRdgu2yFHY0ayQkEnKiOC1TtM3fWXFnoU=
272+
golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
271273
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
272274
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
273275
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=

Diff for: migrations/1_init.go

+13-4
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,21 @@ import (
88

99
func init() {
1010
migrations.MustRegisterTx(func(db migrations.DB) error {
11-
fmt.Println("creating table my_table...")
12-
_, err := db.Exec(`CREATE TABLE my_table()`)
11+
fmt.Println("creating table users...")
12+
_, err := db.Exec(`CREATE TABLE users (
13+
id serial PRIMARY KEY,
14+
first_name varchar(30),
15+
last_name varchar(30),
16+
email varchar(50) UNIQUE NOT NULL,
17+
password varchar NOT NULL,
18+
handle varchar(30) UNIQUE NOT NULL,
19+
rating integer DEFAULT 1300,
20+
createdAt timestamp
21+
);`)
1322
return err
1423
}, func(db migrations.DB) error {
15-
fmt.Println("dropping table my_table...")
16-
_, err := db.Exec(`DROP TABLE my_table`)
24+
fmt.Println("dropping table users...")
25+
_, err := db.Exec(`DROP TABLE users`)
1726
return err
1827
})
1928
}

Diff for: server/handler/user_handler.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,23 @@ import (
66
jwt "github.com/dgrijalva/jwt-go"
77
"github.com/gofiber/fiber/v2"
88
"github.com/raydwaipayan/onlinejudge-server/config"
9+
"github.com/raydwaipayan/onlinejudge-server/server/models"
910
"github.com/raydwaipayan/onlinejudge-server/server/types"
1011
)
1112

12-
//Register types.User registration handler
13+
// Register types.User registration handler
1314
func Register(c *fiber.Ctx) error {
1415
u := new(types.User)
1516

1617
if err := c.BodyParser(u); err != nil {
1718
return c.SendStatus(fiber.StatusBadRequest)
1819
}
19-
20+
u.Create(models.DBConfigURL)
2021
return c.SendStatus(fiber.StatusOK)
2122
}
2223

23-
//Login types.User login handler
24+
// Login types.User login handler
25+
// Use closures to handle parameters
2426
func Login(conf *config.Config) fiber.Handler {
2527
return func(c *fiber.Ctx) error {
2628
u := new(types.User)

Diff for: server/models/models.go

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package models
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log"
7+
8+
pg "github.com/go-pg/pg/v10"
9+
"github.com/raydwaipayan/onlinejudge-server/config"
10+
)
11+
12+
// DBConfigURL config url of database
13+
var DBConfigURL *pg.DB
14+
15+
// InitDb to initialise database
16+
func InitDb(conf *config.Config) {
17+
DBConfigURL = pg.Connect(&pg.Options{
18+
Addr: fmt.Sprintf(":%s", conf.DbPort),
19+
User: conf.DbUser,
20+
Password: conf.DbPass,
21+
Database: conf.DbName,
22+
})
23+
24+
//Check if the database is running
25+
ctx := context.Background()
26+
27+
if err := DBConfigURL.Ping(ctx); err != nil {
28+
log.Fatal(err)
29+
}
30+
}

Diff for: server/router/routes.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
handler "github.com/raydwaipayan/onlinejudge-server/server/handler"
1111
)
1212

13-
//SetupRoutes initiates the fiber router
13+
// SetupRoutes initiates the fiber router
1414
func SetupRoutes(app *fiber.App, conf *config.Config) {
1515
user := app.Group("/user", logger.New(), limiter.New())
1616
user.Post("/register", handler.Register)

Diff for: server/server.go

+11-3
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,27 @@
11
package main
22

33
import (
4+
"fmt"
5+
"log"
6+
47
"github.com/gofiber/fiber/v2"
58
"github.com/gofiber/fiber/v2/middleware/logger"
69
"github.com/gofiber/fiber/v2/middleware/recover"
7-
config "github.com/raydwaipayan/onlinejudge-server/config"
10+
"github.com/raydwaipayan/onlinejudge-server/config"
11+
"github.com/raydwaipayan/onlinejudge-server/server/models"
812
router "github.com/raydwaipayan/onlinejudge-server/server/router"
913
)
1014

1115
func main() {
1216
app := fiber.New()
13-
conf, _ := config.Read()
17+
conf, err := config.Read()
18+
if err != nil {
19+
log.Fatal(err)
20+
}
1421

1522
app.Use(recover.New(), logger.New())
1623

1724
router.SetupRoutes(app, conf)
18-
app.Listen(":3000")
25+
models.InitDb(conf)
26+
app.Listen(fmt.Sprintf(":%s", conf.Port))
1927
}

Diff for: server/types/db.go

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package types
2+
3+
import (
4+
"log"
5+
6+
pg "github.com/go-pg/pg/v10"
7+
"golang.org/x/crypto/bcrypt"
8+
)
9+
10+
// Create create a new user and insert into db
11+
func (u *User) Create(db *pg.DB) error {
12+
_, err := db.Model(u).Insert()
13+
return err
14+
}
15+
16+
// Update update existing user
17+
func (u *User) Update(db *pg.DB) error {
18+
_, err := db.Model(u).Update()
19+
return err
20+
}
21+
22+
// CheckUserExists to check if user is present
23+
func (u *User) CheckUserExists(db *pg.DB) (bool, error) {
24+
user := new(User)
25+
err := db.Model(user).Table("users").Where("users.email = ?", u.Email).Limit(1).Select()
26+
encryptionErr := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(u.Password))
27+
28+
if encryptionErr == nil {
29+
u.FirstName = user.FirstName
30+
u.LastName = user.LastName
31+
return true, nil
32+
}
33+
if err != nil {
34+
log.Println(err)
35+
}
36+
return false, err
37+
}
38+
39+
//Delete delete user
40+
func (u *User) Delete(db *pg.DB) error {
41+
_, err := db.Model(u).Delete()
42+
return err
43+
}

0 commit comments

Comments
 (0)