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