Skip to content

Commit 0f3bd66

Browse files
committed
all api done
1 parent 26808ff commit 0f3bd66

File tree

4 files changed

+78
-2
lines changed

4 files changed

+78
-2
lines changed

cmd/api/main.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ func main() {
4040
})
4141

4242
router.HandleFunc("POST /api/users",users.New(storage))
43-
// router.HandleFunc("GET /api/users/{id}",users.GetUser(storage))
44-
// router.HandleFunc("GET /api/users",users.GetAll(storage))
43+
router.HandleFunc("GET /api/users/{id}",users.GetById(storage))
44+
router.HandleFunc("GET /api/users",users.GetAll(storage))
4545

4646
//start server
4747

pkg/http/handler/users/users.go

+30
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"io"
88
"log/slog"
99
"net/http"
10+
"strconv"
1011

1112
"github.com/go-playground/validator/v10"
1213
"github.com/krishkumar84/golang-project/pkg/storage"
@@ -55,3 +56,32 @@ func New(storage storage.Storage) http.HandlerFunc{
5556
}
5657
}
5758

59+
func GetById(storage storage.Storage) http.HandlerFunc{
60+
return func(w http.ResponseWriter, r *http.Request){
61+
id := r.PathValue("id")
62+
slog.Info("Get User by Id",slog.String("id",id))
63+
intId, err := strconv.ParseInt(id,10,64)
64+
if err != nil {
65+
response.WriteJson(w, http.StatusBadRequest, response.GeneralError(err))
66+
return
67+
}
68+
user, err := storage.GetUserById(intId)
69+
if err != nil {
70+
response.WriteJson(w, http.StatusNotFound, response.GeneralError(err))
71+
return
72+
}
73+
response.WriteJson(w, http.StatusOK, user)
74+
}
75+
}
76+
77+
func GetAll(storage storage.Storage) http.HandlerFunc{
78+
return func(w http.ResponseWriter, r *http.Request){
79+
users, err := storage.GetAllUsers()
80+
if err != nil {
81+
response.WriteJson(w, http.StatusNotFound, response.GeneralError(err))
82+
return
83+
}
84+
response.WriteJson(w, http.StatusOK, users)
85+
}
86+
}
87+

pkg/storage/sqlite/sqlite.go

+43
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import (
55

66
"github.com/krishkumar84/golang-project/pkg/config"
77
_"github.com/mattn/go-sqlite3"
8+
"github.com/krishkumar84/golang-project/pkg/types"
9+
"fmt"
810

911
)
1012

@@ -48,3 +50,44 @@ func (s *Sqlite) CreateUser(name string, email string, age int) (int64, error) {
4850
}
4951
return lastId, nil
5052
}
53+
54+
func (s *Sqlite) GetUserById(id int64)(types.User, error){
55+
stmt, err := s.Db.Prepare("SELECT id,name,email,age FROM users WHERE id = ? LIMIT 1")
56+
if err != nil {
57+
return types.User{}, err
58+
}
59+
defer stmt.Close()
60+
var user types.User
61+
62+
err = stmt.QueryRow(id).Scan(&user.Id, &user.Name, &user.Email, &user.Age)
63+
if err != nil {
64+
if err == sql.ErrNoRows {
65+
return types.User{}, fmt.Errorf("user not found %s",fmt.Sprint(id))
66+
}
67+
return types.User{}, err
68+
}
69+
return user, nil
70+
}
71+
72+
func (s *Sqlite) GetAllUsers()([]types.User, error){
73+
stmt, err := s.Db.Prepare("SELECT id,name,email,age FROM users")
74+
if err != nil {
75+
return nil, err
76+
}
77+
defer stmt.Close()
78+
rows, err := stmt.Query()
79+
if err != nil {
80+
return nil, err
81+
}
82+
defer rows.Close()
83+
var users []types.User
84+
for rows.Next(){
85+
var user types.User
86+
err := rows.Scan(&user.Id, &user.Name, &user.Email, &user.Age)
87+
if err != nil {
88+
return nil, err
89+
}
90+
users = append(users, user)
91+
}
92+
return users, nil
93+
}

pkg/storage/storage.go

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package storage
2+
import "github.com/krishkumar84/golang-project/pkg/types"
23

34
type Storage interface {
45
CreateUser(name string, email string, age int)(int64, error)
6+
GetUserById(id int64)(types.User, error)
7+
GetAllUsers()([]types.User, error)
58
}

0 commit comments

Comments
 (0)