forked from gofiber/recipes
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
155 lines (127 loc) Β· 3.4 KB
/
Copy pathmain.go
File metadata and controls
155 lines (127 loc) Β· 3.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
// π Fiber is an Express inspired web framework written in Go with π
// π API Documentation: https://docs.gofiber.io
// π Github Repository: https://github.com/gofiber/fiber
package main
import (
"database/sql"
"fmt"
"log"
"github.com/gofiber/fiber/v2"
_ "github.com/lib/pq"
)
// Database instance
var db *sql.DB
// Database settings
const (
host = "localhost"
port = 5432 // Default port
user = "postgres"
password = "password"
dbname = "fiber_demo"
)
// Employee struct
type Employee struct {
ID string `json:"id"`
Name string `json:"name"`
Salary string `json:"salary"`
Age string `json:"age"`
}
// Employees struct
type Employees struct {
Employees []Employee `json:"employees"`
}
// Connect function
func Connect() error {
var err error
db, err = sql.Open("postgres", fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", host, port, user, password, dbname))
if err != nil {
return err
}
if err = db.Ping(); err != nil {
return err
}
return nil
}
func main() {
// Connect with database
if err := Connect(); err != nil {
log.Fatal(err)
}
// Create a Fiber app
app := fiber.New()
// Get all records from postgreSQL
app.Get("/employee", func(c *fiber.Ctx) error {
// Select all Employee(s) from database
rows, err := db.Query("SELECT id, name, salary, age FROM employees order by id")
if err != nil {
return c.Status(500).SendString(err.Error())
}
defer rows.Close()
result := Employees{}
for rows.Next() {
employee := Employee{}
if err := rows.Scan(&employee.ID, &employee.Name, &employee.Salary, &employee.Age); err != nil {
return err // Exit if we get an error
}
// Append Employee to Employees
result.Employees = append(result.Employees, employee)
}
// Return Employees in JSON format
return c.JSON(result)
})
// Add record into postgreSQL
app.Post("/employee", func(c *fiber.Ctx) error {
// New Employee struct
u := new(Employee)
// Parse body into struct
if err := c.BodyParser(u); err != nil {
return c.Status(400).SendString(err.Error())
}
// Insert Employee into database
res, err := db.Query("INSERT INTO employees (name, salary, age)VALUES ($1, $2, $3)", u.Name, u.Salary, u.Age)
if err != nil {
return err
}
// Print result
log.Println(res)
// Return Employee in JSON format
return c.JSON(u)
})
// Update record into postgreSQL
app.Put("/employee", func(c *fiber.Ctx) error {
// New Employee struct
u := new(Employee)
// Parse body into struct
if err := c.BodyParser(u); err != nil {
return c.Status(400).SendString(err.Error())
}
// Update Employee into database
res, err := db.Query("UPDATE employees SET name=$1,salary=$2,age=$3 WHERE id=$5", u.Name, u.Salary, u.Age, u.ID)
if err != nil {
return err
}
// Print result
log.Println(res)
// Return Employee in JSON format
return c.Status(201).JSON(u)
})
// Delete record from postgreSQL
app.Delete("/employee", func(c *fiber.Ctx) error {
// New Employee struct
u := new(Employee)
// Parse body into struct
if err := c.BodyParser(u); err != nil {
return c.Status(400).SendString(err.Error())
}
// Delete Employee from database
res, err := db.Query("DELETE FROM employees WHERE id = $1", u.ID)
if err != nil {
return err
}
// Print result
log.Println(res)
// Return Employee in JSON format
return c.JSON("Deleted")
})
log.Fatal(app.Listen(":3000"))
}