Skip to content

Commit 5f68a77

Browse files
committed
Database implementation for Fiber postgres CRUD
1 parent 7457382 commit 5f68a77

File tree

5 files changed

+157
-6
lines changed

5 files changed

+157
-6
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package database
2+
3+
import (
4+
"github.com/jinzhu/gorm"
5+
_ "github.com/jinzhu/gorm/dialects/postgres"
6+
)
7+
8+
var (
9+
DBConn *gorm.DB
10+
)

advanced-programs/FiberPostgresCRUD/go.mod

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,7 @@ module github.com/tannergabriel/advanced-programs/FiberPostgresCRUD
22

33
go 1.13
44

5-
require github.com/gofiber/fiber v1.9.6 // indirect
5+
require (
6+
github.com/gofiber/fiber v1.9.6
7+
github.com/jinzhu/gorm v1.9.12
8+
)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,36 @@
1+
github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
2+
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0=
3+
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
14
github.com/gofiber/fiber v1.9.6 h1:HtzOdbdNn/K/NlMMLbCNkiI79Ft0zjio7STcgY/Rox0=
25
github.com/gofiber/fiber v1.9.6/go.mod h1:o2YQgwJW8+Z16x8MTos4nYn8PD1RJpzu9fojiGqjSjI=
6+
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
7+
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
38
github.com/gorilla/schema v1.1.0 h1:CamqUDOFUBqzrvxuz2vEwo8+SUdwsluFh7IlzJh30LY=
49
github.com/gorilla/schema v1.1.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU=
10+
github.com/jinzhu/gorm v1.9.12 h1:Drgk1clyWT9t9ERbzHza6Mj/8FY/CqMyVzOiHviMo6Q=
11+
github.com/jinzhu/gorm v1.9.12/go.mod h1:vhTjlKSJUTWNtcbQtrMBFCxy7eXTzeCAzfL5fBZT/Qs=
12+
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
13+
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
14+
github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
515
github.com/klauspost/compress v1.10.4 h1:jFzIFaf586tquEB5EhzQG0HwGNSlgAJpG53G6Ss11wc=
616
github.com/klauspost/compress v1.10.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
17+
github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4=
18+
github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
19+
github.com/mattn/go-sqlite3 v2.0.1+incompatible h1:xQ15muvnzGBHpIpdrNi1DA5x0+TcBZzsIDwmw9uTHzw=
20+
github.com/mattn/go-sqlite3 v2.0.1+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
721
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
822
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
923
github.com/valyala/fasthttp v1.12.0 h1:TsB9qkSeiMXB40ELWWSRMjlsE+8IkqXHcs01y2d9aw0=
1024
github.com/valyala/fasthttp v1.12.0/go.mod h1:229t1eWu9UXTPmoUkbpN/fctKPBY4IJoFXQnxHGXy6E=
1125
github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio=
1226
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
27+
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
28+
golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
29+
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
30+
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
1331
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
1432
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
33+
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
1534
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
1635
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
36+
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package item
2+
3+
import (
4+
"github.com/gofiber/fiber"
5+
"github.com/jinzhu/gorm"
6+
_ "github.com/jinzhu/gorm/dialects/postgres"
7+
"github.com/tannergabriel/advanced-programs/FiberPostgresCRUD/database"
8+
)
9+
10+
type Item struct {
11+
gorm.Model
12+
Title string `json:"title"`
13+
Author string `json:"author"`
14+
Rating int `json:"rating"`
15+
}
16+
17+
func GetItems(c *fiber.Ctx) {
18+
db := database.DBConn
19+
var items []Item
20+
db.Find(&items)
21+
c.JSON(items)
22+
}
23+
24+
func GetItem(c *fiber.Ctx) {
25+
id := c.Params("id")
26+
db := database.DBConn
27+
var item Item
28+
db.Find(&item, id)
29+
c.JSON(item)
30+
}
31+
32+
func NewItem(c *fiber.Ctx) {
33+
db := database.DBConn
34+
35+
item := new(Item)
36+
if err := c.BodyParser(item); err != nil {
37+
c.Status(503).Send(err)
38+
return
39+
}
40+
41+
db.Create(&item)
42+
c.JSON(item)
43+
}
44+
45+
func DeleteItem(c *fiber.Ctx) {
46+
id := c.Params("id")
47+
db := database.DBConn
48+
49+
var item Item
50+
db.First(&item, id)
51+
if item.Title == "" {
52+
c.Status(500).Send("No item found with given ID")
53+
return
54+
}
55+
db.Delete(&item)
56+
c.Send("Item successfully deleted")
57+
}
Lines changed: 66 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,74 @@
11
package main
22

3-
import "github.com/gofiber/fiber"
3+
import (
4+
"fmt"
5+
6+
"github.com/gofiber/fiber"
7+
"github.com/tannergabriel/advanced-programs/FiberPostgresCRUD/database"
8+
"github.com/tannergabriel/advanced-programs/FiberPostgresCRUD/item"
9+
10+
"github.com/jinzhu/gorm"
11+
_ "github.com/jinzhu/gorm/dialects/postgres"
12+
)
13+
14+
func helloWorld(c *fiber.Ctx) {
15+
c.Send("Hello, World!")
16+
}
17+
18+
func setupRoutes(app *fiber.App) {
19+
app.Get("/", helloWorld)
20+
21+
app.Get("/api/v1/item", item.GetItems)
22+
app.Get("/api/v1/item/:id", item.GetItem)
23+
app.Post("/api/v1/item", item.NewItem)
24+
app.Delete("/api/v1/item/:id", item.DeleteItem)
25+
}
26+
27+
func initDatabase() {
28+
var err error
29+
database.DBConn, err = gorm.Open("postgres", "host=localhost port=5432 user=postgres dbname=pq-demo password=example sslmode=disable")
30+
if err != nil {
31+
fmt.Println(err)
32+
panic("failed to connect database")
33+
}
34+
fmt.Println("Connection Opened to Database")
35+
}
36+
37+
func createTable() {
38+
db := database.DBConn
39+
40+
// dropTable := `DROP TABLE IF EXISTS items;`
41+
42+
// db.Exec(dropTable)
43+
44+
query := `
45+
CREATE TABLE IF NOT EXISTS items
46+
(
47+
id serial NOT NULL,
48+
Title character varying NOT NULL,
49+
Author character varying,
50+
Rating integer,
51+
created_at date,
52+
updated_at date,
53+
deleted_at date,
54+
CONSTRAINT pk_books PRIMARY KEY (id )
55+
)
56+
WITH (
57+
OIDS=FALSE
58+
);
59+
ALTER TABLE items
60+
OWNER TO postgres;`
61+
62+
db.Exec(query)
63+
}
464

565
func main() {
666
app := fiber.New()
67+
initDatabase()
68+
createTable()
769

8-
app.Get("/", func(c *fiber.Ctx) {
9-
c.Send("Hello, World!")
10-
})
11-
70+
setupRoutes(app)
1271
app.Listen(3000)
72+
73+
defer database.DBConn.Close()
1374
}

0 commit comments

Comments
 (0)