Skip to content

Commit 29b1f3c

Browse files
committed
feat: Add user router
1 parent ca79cd2 commit 29b1f3c

File tree

3 files changed

+71
-1
lines changed

3 files changed

+71
-1
lines changed

internal/api/controller/router.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,5 @@ func (c *controller) v1() {
2222

2323
v1.NewMetricRouter(group)
2424
v1.NewAuthRouter(group)
25+
v1.NewUserRouter(group)
2526
}

internal/api/controller/v1/user.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package v1
2+
3+
import (
4+
"errors"
5+
"strconv"
6+
7+
"github.com/foss-opensolace/api.opensolace.com/internal/api/service"
8+
"github.com/gofiber/fiber/v2"
9+
"gorm.io/gorm"
10+
)
11+
12+
func NewUserRouter(router fiber.Router) {
13+
group := router.Group("/user")
14+
15+
group.Get(`/id/:id`, userGetOneByIdHandler())
16+
group.Get("/:username", userGetOneByUsernameHandler())
17+
}
18+
19+
func userGetOneByIdHandler() fiber.Handler {
20+
return func(c *fiber.Ctx) error {
21+
userID := c.Params("id")
22+
23+
value, err := strconv.ParseUint(userID, 10, 0)
24+
if err != nil {
25+
return c.Status(fiber.StatusBadRequest).SendString("Invalid id provided")
26+
}
27+
28+
user, err := service.User.GetById(uint(value))
29+
if err != nil {
30+
if errors.Is(err, gorm.ErrRecordNotFound) {
31+
return c.Status(fiber.StatusNotFound).SendString("User not found with that ID")
32+
}
33+
34+
return err
35+
}
36+
37+
return c.Status(fiber.StatusOK).JSON(user.ToSafe())
38+
}
39+
}
40+
41+
func userGetOneByUsernameHandler() fiber.Handler {
42+
return func(c *fiber.Ctx) error {
43+
username := c.Params("username")
44+
45+
user, err := service.User.GetByUsername(username)
46+
if err != nil {
47+
if errors.Is(err, gorm.ErrRecordNotFound) {
48+
return c.Status(fiber.StatusNotFound).SendString("User not found with that username")
49+
}
50+
51+
return err
52+
}
53+
54+
return c.Status(fiber.StatusOK).JSON(user.ToSafe())
55+
}
56+
}

internal/api/model/user.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package model
22

3-
import "gorm.io/gorm"
3+
import (
4+
"github.com/gofiber/fiber/v2"
5+
"gorm.io/gorm"
6+
)
47

58
type User struct {
69
gorm.Model
@@ -10,3 +13,13 @@ type User struct {
1013
Email string `gorm:"index:,not null,unique"`
1114
Password string `gorm:"not null"`
1215
}
16+
17+
func (u *User) ToSafe() fiber.Map {
18+
return fiber.Map{
19+
"id": u.ID,
20+
"created_at": u.CreatedAt,
21+
"updated_at": u.UpdatedAt,
22+
"display_name": u.DisplayName,
23+
"username": u.Username,
24+
}
25+
}

0 commit comments

Comments
 (0)