package handlers import ( "context" "database/sql" "errors" "git.katuwoss.dev/JustScreaMy/secret-santa/internal/queries" "git.katuwoss.dev/JustScreaMy/secret-santa/internal/types" "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, 500, err.Error()) return } if len(users) == 0 { users = []queries.User{} } writeJSONResponse(w, 200, types.JsonResponse[[]queries.User]{Data: 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, 500, err.Error()) return } user, err := query.GetUserId(ctx, id) if err != nil { if errors.Is(err, sql.ErrNoRows) { writeErrorResponse(w, 404, "User not found") return } writeErrorResponse(w, 500, err.Error()) return } writeJSONResponse(w, 200, types.JsonResponse[queries.User]{Data: 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, 500, err.Error()) return } user, err := query.CreateUser(ctx, createUser) if err != nil { writeErrorResponse(w, 500, err.Error()) return } writeJSONResponse(w, 201, types.JsonResponse[queries.User]{Data: 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, 500, err.Error()) return } err = query.DeleteUser(ctx, id) if err != nil { writeErrorResponse(w, 500, err.Error()) return } writeJSONResponse(w, 204, nil) } }