Skip to content

Commit 31ec2f6

Browse files
committed
fiber: implement add, update, and delete endpoints
1 parent 0d445f1 commit 31ec2f6

File tree

2 files changed

+104
-41
lines changed

2 files changed

+104
-41
lines changed

fiber/api_routes_entities.go

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package main
2+
3+
import (
4+
"strconv"
5+
6+
"github.com/CoderVlogger/go-web-frameworks/pkg"
7+
"github.com/gofiber/fiber/v2"
8+
)
9+
10+
func entitiesList(c *fiber.Ctx) error {
11+
pageStr := c.Query("page", "1")
12+
page, err := strconv.Atoi(pageStr)
13+
if err != nil {
14+
page = 1
15+
}
16+
17+
entities, err := entitiesRepo.List(page, pageSize)
18+
if err != nil {
19+
// c.JSON(pkg.TextResponse{Message: err.Error()})
20+
// return fiber.NewError(fiber.StatusInternalServerError, err.Error())
21+
22+
// TODO: Replace 500 error with 4xx for paging related errors.
23+
errMsg := pkg.TextResponse{Message: err.Error()}
24+
return c.Status(fiber.StatusInternalServerError).JSON(errMsg)
25+
}
26+
27+
c.JSON(entities)
28+
return nil
29+
}
30+
31+
func entitiesGet(c *fiber.Ctx) error {
32+
entityID := c.Params("id", "")
33+
34+
entity, err := entitiesRepo.Get(entityID)
35+
if err != nil {
36+
errMsg := pkg.TextResponse{Message: err.Error()}
37+
return c.Status(fiber.StatusInternalServerError).JSON(errMsg)
38+
}
39+
40+
if entity == nil {
41+
return fiber.ErrNotFound
42+
}
43+
44+
c.JSON(entity)
45+
return nil
46+
}
47+
48+
func entitiesAdd(c *fiber.Ctx) error {
49+
var entity pkg.Entity
50+
51+
err := c.BodyParser(&entity)
52+
if err != nil {
53+
errMsg := pkg.TextResponse{Message: err.Error()}
54+
return c.Status(fiber.StatusInternalServerError).JSON(errMsg)
55+
}
56+
57+
err = entitiesRepo.Add(&entity)
58+
if err != nil {
59+
errMsg := pkg.TextResponse{Message: err.Error()}
60+
return c.Status(fiber.StatusInternalServerError).JSON(errMsg)
61+
}
62+
63+
c.JSON(entity)
64+
return nil
65+
}
66+
67+
func entitiesUpdate(c *fiber.Ctx) error {
68+
var entity pkg.Entity
69+
70+
err := c.BodyParser(&entity)
71+
if err != nil {
72+
errMsg := pkg.TextResponse{Message: err.Error()}
73+
return c.Status(fiber.StatusInternalServerError).JSON(errMsg)
74+
}
75+
76+
err = entitiesRepo.Update(&entity)
77+
if err != nil {
78+
errMsg := pkg.TextResponse{Message: err.Error()}
79+
return c.Status(fiber.StatusInternalServerError).JSON(errMsg)
80+
}
81+
82+
c.JSON(entity)
83+
return nil
84+
}
85+
86+
func entitiesDelete(c *fiber.Ctx) error {
87+
entityID := c.Params("id", "")
88+
89+
err := entitiesRepo.Delete(entityID)
90+
if err != nil {
91+
errMsg := pkg.TextResponse{Message: err.Error()}
92+
return c.Status(fiber.StatusInternalServerError).JSON(errMsg)
93+
}
94+
95+
c.JSON(pkg.TextResponse{Message: "entity deleted"})
96+
return nil
97+
}

fiber/server.go

Lines changed: 7 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,30 @@
11
package main
22

33
import (
4-
"strconv"
5-
64
"github.com/gofiber/fiber/v2"
75

86
"github.com/CoderVlogger/go-web-frameworks/pkg"
97
)
108

119
var (
12-
pageSize = 4
10+
entitiesRepo pkg.EntityRepository = pkg.NewEntityMemoryRepository()
11+
pageSize = 4
1312
)
1413

1514
func main() {
1615
app := fiber.New()
17-
18-
entitiesRepo := pkg.NewEntityMemoryRepository()
1916
entitiesRepo.Init()
2017

2118
app.Get("/", func(c *fiber.Ctx) error {
2219
return c.SendString("Hello, Fiber!")
2320
})
2421

2522
entitiesAPI := app.Group("/entities")
26-
entitiesAPI.Get("/", func(c *fiber.Ctx) error {
27-
pageStr := c.Query("page", "1")
28-
page, err := strconv.Atoi(pageStr)
29-
if err != nil {
30-
page = 1
31-
}
32-
33-
entities, err := entitiesRepo.List(page, pageSize)
34-
if err != nil {
35-
// c.JSON(pkg.TextResponse{Message: err.Error()})
36-
// return fiber.NewError(fiber.StatusInternalServerError, err.Error())
37-
38-
// TODO: Replace 500 error with 4xx for paging related errors.
39-
errMsg := pkg.TextResponse{Message: err.Error()}
40-
return c.Status(fiber.StatusInternalServerError).JSON(errMsg)
41-
}
42-
43-
c.JSON(entities)
44-
return nil
45-
})
46-
entitiesAPI.Get("/:id", func(c *fiber.Ctx) error {
47-
entityID := c.Params("id", "")
48-
49-
entity, err := entitiesRepo.Get(entityID)
50-
if err != nil {
51-
errMsg := pkg.TextResponse{Message: err.Error()}
52-
return c.Status(fiber.StatusInternalServerError).JSON(errMsg)
53-
}
54-
55-
if entity == nil {
56-
return fiber.ErrNotFound
57-
}
58-
59-
c.JSON(entity)
60-
return nil
61-
})
23+
entitiesAPI.Get("/", entitiesList)
24+
entitiesAPI.Get("/:id", entitiesGet)
25+
entitiesAPI.Post("/", entitiesAdd)
26+
entitiesAPI.Put("/", entitiesUpdate)
27+
entitiesAPI.Delete("/:id", entitiesDelete)
6228

6329
app.Listen(":8080")
6430
}

0 commit comments

Comments
 (0)