From b104e417b7a66a299a6b56e99529de3f7239cdec Mon Sep 17 00:00:00 2001 From: Nemo D'ACREMONT Date: Sun, 1 Jun 2025 11:28:44 +0200 Subject: [PATCH] feat: add stuff for users --- api/api.go | 4 +++- api/messages/handler.go | 3 +++ api/users/handler.go | 47 +++++++++++++++++++++++++++++++++++++++++ api/users/model.go | 34 ++++++++++++++++++++++++++++- 4 files changed, 86 insertions(+), 2 deletions(-) diff --git a/api/api.go b/api/api.go index 018ef1d..bf4de36 100644 --- a/api/api.go +++ b/api/api.go @@ -4,6 +4,7 @@ import ( "net/http" "dacremont.xyz/learnrest/api/messages" + "dacremont.xyz/learnrest/api/users" ) type Api struct {} @@ -11,7 +12,8 @@ type Api struct {} func NewApi () *http.ServeMux { mux := http.NewServeMux() - mux.Handle("/messages", messages.NewMessagesAPI()) + mux.Handle("/message", messages.NewMessagesAPI()) + mux.Handle("/user", users.NewUsersAPI()) mux.HandleFunc("GET /hello", func(w http.ResponseWriter, r *http.Request) {w.Write([]byte("World!"))}) return mux diff --git a/api/messages/handler.go b/api/messages/handler.go index 7015af3..55dcb4a 100644 --- a/api/messages/handler.go +++ b/api/messages/handler.go @@ -30,7 +30,10 @@ func postMessages(w http.ResponseWriter, r *http.Request) { err = insertMessage(msg) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) + return } + + w.Write([]byte("OK")) } func NewMessagesAPI() *http.ServeMux { diff --git a/api/users/handler.go b/api/users/handler.go index 82abcb9..f0593d5 100644 --- a/api/users/handler.go +++ b/api/users/handler.go @@ -1 +1,48 @@ package users + +import ( + "encoding/json" + "net/http" +) + +func getUsers(w http.ResponseWriter, r *http.Request) { + users, err := getAllUsers() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + w.Header().Add("Content-Type", "application/json") + json.NewEncoder(w).Encode(users) +} + +func postUser(w http.ResponseWriter, r *http.Request) { + var payload User + err := json.NewDecoder(r.Body).Decode(&payload) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + user := User{ + Id: payload.Id, + Name: payload.Name, + } + err = insertuser(user) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + w.Write([]byte("OK")) +} + +func NewUsersAPI() *http.ServeMux { + initUsers() + mux := http.NewServeMux() + + mux.HandleFunc("GET /", getUsers) + mux.HandleFunc("POST /", postUser) + + return mux +} diff --git a/api/users/model.go b/api/users/model.go index e496447..c2513a1 100644 --- a/api/users/model.go +++ b/api/users/model.go @@ -1,7 +1,39 @@ package users +import "errors" + type User struct { - Id uint64 `json:"id"` + Id int `json:"id"` Name string `json:"name"` } +var users []User + +func initUsers() { + users = make([]User, 0) +} + +func getAllUsers() ([]User, error) { + return users, nil +} + +func getUserById(id int) (User, error) { + if id > len(users) { + return User{}, errors.New("User doesn't exist") + } + + return users[id], nil +} + +func insertuser(user User) error { + if user.Name == "" { + return errors.New("A name must be specified") + } + + newUser := User{ + Id: len(users), + Name: user.Name, + } + users = append(users, newUser) + return nil +}