Concierge-Users
view release on metacpan or search on metacpan
lib/Concierge/Users/YAML.pm view on Meta::CPAN
# Add bare record with user_id, moniker, defaults, and null_values from Users.pm
sub add {
my ($self, $user_id, $initial_record) = @_;
return { success => 0, message => "Add Record failed: missing user_id" }
unless $user_id;
return { success => 0, message => "Add Record failed: missing initial record" }
unless $initial_record;
my %record = $initial_record->%*;
$record{created_date} = $self->current_timestamp();
# Add last_mod_date timestamp
$record{last_mod_date} = $self->current_timestamp();
my $user_file = $self->_get_user_file($user_id);
eval {
YAML::Tiny::DumpFile($user_file, \%record);
};
if ($@) {
return { success => 0, message => "Failed to create initial user record: $@" };
}
return { success => 1, message => "Initial record created for user '$user_id'" };
}
# Fetch user by ID
sub fetch {
my ($self, $user_id) = @_;
my $user_file = $self->_get_user_file($user_id);
return {
success => 0,
data => '',
message => "User '$user_id' not found"
} unless -f $user_file;
my $user_data;
eval {
$user_data = YAML::Tiny::LoadFile($user_file);
};
if ($@) {
return {
success => 0,
data => '',
message => "Failed to load user data: $@"
};
}
return {
success => 1,
data => $user_data,
message => ''
};
}
# Update user
sub update {
my ($self, $user_id, $updates) = @_;
# Remove readonly fields from updates
my %readonly = map { $_ => 1 } qw(user_id created_date last_mod_date);
delete $updates->{$_} for keys %readonly;
# Add last_mod_date timestamp
$updates->{last_mod_date} = $self->current_timestamp();
my $user_file = $self->_get_user_file($user_id);
return { success => 0, message => "User '$user_id' not found" } unless -f $user_file;
# Load existing data
my $user_data;
eval {
$user_data = YAML::Tiny::LoadFile($user_file);
};
return { success => 0, message => "Failed to load user data: $@" } if $@;
# Apply updates
foreach my $field (keys %$updates) {
$user_data->{$field} = $updates->{$field};
}
# Save back
eval {
YAML::Tiny::DumpFile($user_file, $user_data);
};
if ($@) {
return { success => 0, message => "Failed to update user file: $@" };
}
return { success => 1, message => "User '$user_id' updated" };
}
# List users with filters
sub list {
my ($self, $filters, $options) = @_;
# Read all YAML files
opendir my $dh, $self->{storage_dir} or return { data => [], total_count => 0 };
my @files = grep { /\.yaml$/ } readdir $dh;
closedir $dh;
my @users;
foreach my $file (@files) {
my $user_file = File::Spec->catfile($self->{storage_dir}, $file);
my $user_data;
eval {
$user_data = YAML::Tiny::LoadFile($user_file);
};
next if $@;
# Apply DSL filters
my $match = 1;
( run in 0.532 second using v1.01-cache-2.11-cpan-39bf76dae61 )