Skip to content

Commit 1dc118a

Browse files
committed
DB new user creation
1 parent 141b16c commit 1dc118a

File tree

9 files changed

+95
-7
lines changed

9 files changed

+95
-7
lines changed

docker-compose.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,4 @@ services:
3232

3333
networks:
3434
postgres:
35-
driver: bridge
35+
driver: bridge

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ require (
1010
github.com/gofiber/fiber/v2 v2.1.3
1111
github.com/gofiber/jwt/v2 v2.0.1
1212
github.com/joho/godotenv v1.3.0
13+
golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9
1314
)

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
114114
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
115115
golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee h1:4yd7jl+vXjalO5ztz6Vc1VADv+S/80LGJmyl1ROJ2AI=
116116
golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
117+
golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9 h1:umElSU9WZirRdgu2yFHY0ayQkEnKiOC1TtM3fWXFnoU=
118+
golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
117119
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
118120
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
119121
golang.org/x/exp v0.0.0-20200821190819-94841d0725da/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=

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
}

sample.env

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ DB_PASSWD=
44
PGADMIN_EMAIL=
55
PGADMIN_PASSWD=
66

7-
SECRET_KEY=
7+
SECRET_KEY=

server/handler/user_handler.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
jwt "github.com/dgrijalva/jwt-go"
88
"github.com/gofiber/fiber/v2"
99
"github.com/joho/godotenv"
10+
models "github.com/raydwaipayan/onlinejudge-server/server/models"
1011
"github.com/raydwaipayan/onlinejudge-server/server/types"
1112
)
1213

@@ -17,7 +18,7 @@ func Register(c *fiber.Ctx) error {
1718
if err := c.BodyParser(u); err != nil {
1819
return c.SendStatus(fiber.StatusBadRequest)
1920
}
20-
21+
u.Create(models.DBConfigURL)
2122
return c.SendStatus(fiber.StatusOK)
2223
}
2324

server/models/models.go

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package models
2+
3+
import (
4+
"context"
5+
"os"
6+
7+
pg "github.com/go-pg/pg/v10"
8+
"github.com/joho/godotenv"
9+
)
10+
11+
// DBConfigURL config url of database
12+
var DBConfigURL *pg.DB
13+
14+
// InitDb to initialise database
15+
func InitDb() {
16+
godotenv.Load()
17+
18+
DBConfigURL = pg.Connect(&pg.Options{
19+
Addr: ":5432",
20+
User: os.Getenv("DB_USER"),
21+
Password: os.Getenv("DB_PASSWD"),
22+
Database: os.Getenv("DB_NAME"),
23+
})
24+
25+
//Check if the database is running
26+
ctx := context.Background()
27+
28+
if err := DBConfigURL.Ping(ctx); err != nil {
29+
panic(err)
30+
}
31+
}

server/server.go

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"github.com/gofiber/fiber/v2"
55
"github.com/gofiber/fiber/v2/middleware/logger"
66
"github.com/gofiber/fiber/v2/middleware/recover"
7+
models "github.com/raydwaipayan/onlinejudge-server/server/models"
78
router "github.com/raydwaipayan/onlinejudge-server/server/router"
89
)
910

@@ -12,5 +13,6 @@ func main() {
1213
app.Use(recover.New(), logger.New())
1314

1415
router.SetupRoutes(app)
16+
models.InitDb()
1517
app.Listen(":3000")
1618
}

server/types/db.go

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
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+
if encryptionErr == nil {
28+
u.FirstName = user.FirstName
29+
u.LastName = user.LastName
30+
return true, nil
31+
}
32+
if err != nil {
33+
log.Println(err)
34+
}
35+
return false, err
36+
}
37+
38+
//Delete delete user
39+
func (u *User) Delete(db *pg.DB) error {
40+
_, err := db.Model(u).Delete()
41+
return err
42+
}

0 commit comments

Comments
 (0)