File tree 9 files changed +107
-11
lines changed
9 files changed +107
-11
lines changed Original file line number Diff line number Diff line change @@ -33,3 +33,4 @@ services:
33
33
networks :
34
34
postgres :
35
35
driver : bridge
36
+
Original file line number Diff line number Diff line change @@ -11,4 +11,5 @@ require (
11
11
github.com/gofiber/jwt/v2 v2.0.1
12
12
github.com/joho/godotenv v1.3.0
13
13
github.com/spf13/viper v1.7.1
14
+ golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9
14
15
)
Original file line number Diff line number Diff line change @@ -268,6 +268,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
268
268
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a /go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto =
269
269
golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee h1:4yd7jl+vXjalO5ztz6Vc1VADv+S/80LGJmyl1ROJ2AI =
270
270
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 =
271
273
golang.org/x/exp v0.0.0-20190121172915-509febef88a4 /go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA =
272
274
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8 /go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA =
273
275
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522 /go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8 =
Original file line number Diff line number Diff line change @@ -8,12 +8,21 @@ import (
8
8
9
9
func init () {
10
10
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
+ );` )
13
22
return err
14
23
}, 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 ` )
17
26
return err
18
27
})
19
28
}
Original file line number Diff line number Diff line change @@ -6,21 +6,23 @@ import (
6
6
jwt "github.com/dgrijalva/jwt-go"
7
7
"github.com/gofiber/fiber/v2"
8
8
"github.com/raydwaipayan/onlinejudge-server/config"
9
+ "github.com/raydwaipayan/onlinejudge-server/server/models"
9
10
"github.com/raydwaipayan/onlinejudge-server/server/types"
10
11
)
11
12
12
- //Register types.User registration handler
13
+ // Register types.User registration handler
13
14
func Register (c * fiber.Ctx ) error {
14
15
u := new (types.User )
15
16
16
17
if err := c .BodyParser (u ); err != nil {
17
18
return c .SendStatus (fiber .StatusBadRequest )
18
19
}
19
-
20
+ u . Create ( models . DBConfigURL )
20
21
return c .SendStatus (fiber .StatusOK )
21
22
}
22
23
23
- //Login types.User login handler
24
+ // Login types.User login handler
25
+ // Use closures to handle parameters
24
26
func Login (conf * config.Config ) fiber.Handler {
25
27
return func (c * fiber.Ctx ) error {
26
28
u := new (types.User )
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change @@ -10,7 +10,7 @@ import (
10
10
handler "github.com/raydwaipayan/onlinejudge-server/server/handler"
11
11
)
12
12
13
- //SetupRoutes initiates the fiber router
13
+ // SetupRoutes initiates the fiber router
14
14
func SetupRoutes (app * fiber.App , conf * config.Config ) {
15
15
user := app .Group ("/user" , logger .New (), limiter .New ())
16
16
user .Post ("/register" , handler .Register )
Original file line number Diff line number Diff line change 1
1
package main
2
2
3
3
import (
4
+ "fmt"
5
+ "log"
6
+
4
7
"github.com/gofiber/fiber/v2"
5
8
"github.com/gofiber/fiber/v2/middleware/logger"
6
9
"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"
8
12
router "github.com/raydwaipayan/onlinejudge-server/server/router"
9
13
)
10
14
11
15
func main () {
12
16
app := fiber .New ()
13
- conf , _ := config .Read ()
17
+ conf , err := config .Read ()
18
+ if err != nil {
19
+ log .Fatal (err )
20
+ }
14
21
15
22
app .Use (recover .New (), logger .New ())
16
23
17
24
router .SetupRoutes (app , conf )
18
- app .Listen (":3000" )
25
+ models .InitDb (conf )
26
+ app .Listen (fmt .Sprintf (":%s" , conf .Port ))
19
27
}
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments