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
|
|
|
}
|
|
|
|
}
|