secret-santa/internal/handlers/user_handler.go
2024-11-17 22:52:24 +01:00

92 lines
2.2 KiB
Go

package handlers
import (
"context"
"database/sql"
"errors"
"git.katuwoss.dev/JustScreaMy/secret-santa/internal/queries"
"net/http"
)
func HandleGetUsers(db *sql.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := context.Background()
query := queries.New(db)
users, err := query.GetUsers(ctx)
if err != nil {
writeErrorResponse(w, http.StatusInternalServerError, err.Error())
return
}
if len(users) == 0 {
users = []queries.User{}
}
writeJSONResponse(w, http.StatusOK, users)
}
}
func HandleGetUsersByID(db *sql.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := context.Background()
query := queries.New(db)
id, err := parseIDFromURL(r)
if err != nil {
writeErrorResponse(w, http.StatusInternalServerError, err.Error())
return
}
user, err := query.GetUserId(ctx, id)
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
writeErrorResponse(w, http.StatusNotFound, "User not found")
return
}
writeErrorResponse(w, http.StatusInternalServerError, err.Error())
return
}
writeJSONResponse(w, http.StatusOK, user)
}
}
func HandleCreateUser(db *sql.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := context.Background()
query := queries.New(db)
var createUser queries.CreateUserParams
err := readJSONRequest(r, &createUser)
if err != nil {
writeErrorResponse(w, http.StatusInternalServerError, err.Error())
return
}
user, err := query.CreateUser(ctx, createUser)
if err != nil {
writeErrorResponse(w, http.StatusInternalServerError, err.Error())
return
}
writeJSONResponse(w, http.StatusCreated, user)
}
}
func HandleDeleteUser(db *sql.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := context.Background()
query := queries.New(db)
id, err := parseIDFromURL(r)
if err != nil {
writeErrorResponse(w, http.StatusInternalServerError, err.Error())
return
}
err = query.DeleteUser(ctx, id)
if err != nil {
writeErrorResponse(w, http.StatusInternalServerError, err.Error())
return
}
writeJSONResponse(w, http.StatusNoContent, nil)
}
}