#!/usr/bin/env perl
use strict;
use warnings;
use FindBin;
use lib "$FindBin::Bin/../lib";
use Trickster;
my $app = Trickster->new;
# In-memory data store
my %users = (
1 => { id => 1, name => 'Alice', email => 'alice@example.com' },
2 => { id => 2, name => 'Bob', email => 'bob@example.com' },
);
my $next_id = 3;
# List users
$app->get('/api/users', sub {
my ($req, $res) = @_;
return $res->json([values %users]);
});
# Get user
$app->get('/api/users/:id', sub {
my ($req, $res) = @_;
my $id = $req->param('id');
if (exists $users{$id}) {
return $res->json($users{$id});
} else {
return $res->json({ error => 'User not found' }, 404);
}
});
# Create user
$app->post('/api/users', sub {
my ($req, $res) = @_;
my $data = $req->json;
my $user = {
id => $next_id++,
name => $data->{name},
email => $data->{email},
};
$users{$user->{id}} = $user;
return $res->json($user, 201);
});
# Update user
$app->put('/api/users/:id', sub {
my ($req, $res) = @_;
my $id = $req->param('id');
unless (exists $users{$id}) {
return $res->json({ error => 'User not found' }, 404);
}
my $data = $req->json;
$users{$id}{name} = $data->{name} if $data->{name};
$users{$id}{email} = $data->{email} if $data->{email};
return $res->json($users{$id});
});
# Delete user
$app->delete('/api/users/:id', sub {
my ($req, $res) = @_;
my $id = $req->param('id');
unless (exists $users{$id}) {
return $res->json({ error => 'User not found' }, 404);
}
delete $users{$id};
return $res->json({ success => 1 });
});
# Error handler
$app->error_handler(sub {
my ($error, $req, $res) = @_;
return $res->json({ error => "Internal Server Error: $error" }, 500)->finalize;
});
$app->to_app;