Skip to content

Commit 353157d

Browse files
committed
goweb - gin - GET, POST, DELETE, LIST
1 parent 15cecc0 commit 353157d

File tree

2 files changed

+103
-2
lines changed

2 files changed

+103
-2
lines changed

goweb/gowebgin/main.go

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,45 @@
11
package main
22

3-
import "github.com/gin-gonic/gin"
3+
import (
4+
"net/http"
5+
6+
"github.com/gin-gonic/gin"
7+
)
48

59
func main() {
10+
mdb := NewMemDb()
11+
612
r := gin.Default()
713
r.GET("/ping", func(c *gin.Context) {
8-
c.JSON(200, gin.H{
14+
c.JSON(http.StatusOK, gin.H{
915
"message": "pong",
1016
})
1117
})
1218

19+
r.GET("/users", func(c *gin.Context) {
20+
c.JSON(http.StatusOK, mdb.ListUsers())
21+
})
22+
23+
r.POST("/users", func(c *gin.Context) {
24+
var user User
25+
err := c.BindJSON(&user)
26+
if err != nil {
27+
c.JSON(http.StatusInternalServerError, err.Error())
28+
} else {
29+
c.JSON(http.StatusCreated, mdb.AddUser(&user))
30+
}
31+
})
32+
33+
r.GET("/users/:username", func(c *gin.Context) {
34+
username := c.Param("username")
35+
c.JSON(http.StatusOK, mdb.GetUser(username))
36+
})
37+
38+
r.DELETE("/users/:username", func(c *gin.Context) {
39+
username := c.Param("username")
40+
mdb.DeleteUser(username)
41+
c.JSON(http.StatusOK, gin.H{})
42+
})
43+
1344
r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
1445
}

goweb/gowebgin/model.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package main
2+
3+
import "log"
4+
5+
// User is a in-memory user model.
6+
type User struct {
7+
Username string `json:"username"`
8+
FirstName string `json:"first_name"`
9+
LastName string `json:"last_name"`
10+
}
11+
12+
// NewMemDb creates and returns a new instance of MemDb.
13+
func NewMemDb() *MemDb {
14+
return &MemDb{
15+
users: []*User{},
16+
kvsUsers: map[string]int{},
17+
}
18+
}
19+
20+
// MemDb is a memory database.
21+
type MemDb struct {
22+
users []*User
23+
kvsUsers map[string]int
24+
}
25+
26+
// AddUser stores user in in-memory database.
27+
func (db *MemDb) AddUser(u *User) *User {
28+
log.Println("AddUser", u)
29+
30+
ind, ok := db.kvsUsers[u.Username]
31+
if !ok {
32+
db.kvsUsers[u.Username] = len(db.users)
33+
db.users = append(db.users, u)
34+
} else {
35+
db.users[ind] = u
36+
}
37+
38+
return db.users[ind]
39+
}
40+
41+
// GetUser returns user in in-memory database.
42+
func (db *MemDb) GetUser(username string) *User {
43+
log.Println("GetUser", username)
44+
45+
ind, ok := db.kvsUsers[username]
46+
if ok {
47+
return db.users[ind]
48+
}
49+
50+
return nil
51+
}
52+
53+
// DeleteUser deletes user in in-memory database.
54+
func (db *MemDb) DeleteUser(username string) {
55+
log.Println("DeleteUser", username)
56+
57+
if ind, ok := db.kvsUsers[username]; ok {
58+
db.users[ind] = db.users[len(db.users)-1]
59+
db.users = db.users[:len(db.users)-1]
60+
61+
delete(db.kvsUsers, username)
62+
}
63+
}
64+
65+
// ListUsers returns all users in in-memory database.
66+
func (db *MemDb) ListUsers() []*User {
67+
log.Println("ListUsers")
68+
69+
return db.users
70+
}

0 commit comments

Comments
 (0)