feat: add stuff for users

This commit is contained in:
Nemo D'ACREMONT 2025-06-01 11:28:44 +02:00
parent b54a862e23
commit b104e417b7
4 changed files with 86 additions and 2 deletions

View File

@ -4,6 +4,7 @@ import (
"net/http" "net/http"
"dacremont.xyz/learnrest/api/messages" "dacremont.xyz/learnrest/api/messages"
"dacremont.xyz/learnrest/api/users"
) )
type Api struct {} type Api struct {}
@ -11,7 +12,8 @@ type Api struct {}
func NewApi () *http.ServeMux { func NewApi () *http.ServeMux {
mux := http.NewServeMux() 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!"))}) mux.HandleFunc("GET /hello", func(w http.ResponseWriter, r *http.Request) {w.Write([]byte("World!"))})
return mux return mux

View File

@ -30,7 +30,10 @@ func postMessages(w http.ResponseWriter, r *http.Request) {
err = insertMessage(msg) err = insertMessage(msg)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest) http.Error(w, err.Error(), http.StatusBadRequest)
return
} }
w.Write([]byte("OK"))
} }
func NewMessagesAPI() *http.ServeMux { func NewMessagesAPI() *http.ServeMux {

View File

@ -1 +1,48 @@
package users 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
}

View File

@ -1,7 +1,39 @@
package users package users
import "errors"
type User struct { type User struct {
Id uint64 `json:"id"` Id int `json:"id"`
Name string `json:"name"` 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
}