secret-santa/internal/handlers/user_handler.go

93 lines
2.2 KiB
Go
Raw Normal View History

2024-11-17 00:54:15 +01:00
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 {
2024-11-17 22:52:24 +01:00
writeErrorResponse(w, http.StatusInternalServerError, err.Error())
2024-11-17 00:54:15 +01:00
return
}
if len(users) == 0 {
users = []queries.User{}
}
2024-11-17 22:52:24 +01:00
writeJSONResponse(w, http.StatusOK, users)
2024-11-17 00:54:15 +01:00
}
}
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 {
2024-11-17 22:52:24 +01:00
writeErrorResponse(w, http.StatusInternalServerError, err.Error())
2024-11-17 00:54:15 +01:00
return
}
user, err := query.GetUserId(ctx, id)
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
2024-11-17 22:52:24 +01:00
writeErrorResponse(w, http.StatusNotFound, "User not found")
2024-11-17 00:54:15 +01:00
return
}
2024-11-17 22:52:24 +01:00
writeErrorResponse(w, http.StatusInternalServerError, err.Error())
2024-11-17 00:54:15 +01:00
return
}
2024-11-17 22:52:24 +01:00
writeJSONResponse(w, http.StatusOK, user)
2024-11-17 00:54:15 +01:00
}
}
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 {
2024-11-17 22:52:24 +01:00
writeErrorResponse(w, http.StatusInternalServerError, err.Error())
2024-11-17 00:54:15 +01:00
return
}
user, err := query.CreateUser(ctx, createUser)
if err != nil {
2024-11-17 22:52:24 +01:00
writeErrorResponse(w, http.StatusInternalServerError, err.Error())
2024-11-17 00:54:15 +01:00
return
}
2024-11-17 22:52:24 +01:00
writeJSONResponse(w, http.StatusCreated, user)
2024-11-17 00:54:15 +01:00
}
}
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 {
2024-11-17 22:52:24 +01:00
writeErrorResponse(w, http.StatusInternalServerError, err.Error())
2024-11-17 00:54:15 +01:00
return
}
err = query.DeleteUser(ctx, id)
if err != nil {
2024-11-17 22:52:24 +01:00
writeErrorResponse(w, http.StatusInternalServerError, err.Error())
2024-11-17 00:54:15 +01:00
return
}
2024-11-17 22:52:24 +01:00
writeJSONResponse(w, http.StatusNoContent, nil)
2024-11-17 00:54:15 +01:00
}
}