Concierge-Users
view release on metacpan or search on metacpan
lib/Concierge/Users.pm view on Meta::CPAN
$user_init_record->{$field} = $def->{null_value};
}
else {
$user_init_record->{$field} = '';
}
}
my $result = $self->{backend}->add( $new_user_id, $user_init_record );
return $result unless $result->{success};
# 5. Validate
my $validation = $self->validate_user_data( $data );
return $validation unless $validation->{success};
# Proceed only with validated data
my $validated_user_data = $validation->{valid_data};
# 6. Populate the record with validated user data
$result = $self->{backend}->update( $new_user_id, $validated_user_data );
# Override message to indicate creation rather than update
$result->{message} = "User '$new_user_id' created";
# Add warnings to result if any
$result->{warnings} = $validation->{warnings} if $validation->{warnings};
return $result;
}
# Get user by ID
sub get_user {
my ($self, $user_id, $options) = @_;
return { success => 0, message => "user_id is required" }
unless $user_id && $user_id =~ /\S/;
$options ||= {};
my $fetch_result = $self->{backend}->fetch($user_id);
unless ($fetch_result->{success}) {
return { success => 0, message => $fetch_result->{message} };
}
my $user_data = $fetch_result->{data};
# Handle field selection
if ($options->{fields} && ref $options->{fields} eq 'ARRAY') {
my %selected;
$selected{$_} = $user_data->{$_} for @{$options->{fields}};
$selected{user_id} = $user_data->{user_id}; # Always include user_id
$user_data = \%selected;
}
return {
success => 1,
user_id => $user_id,
user => $user_data
};
}
# Update user
sub update_user {
my ($self, $user_id, $updates) = @_;
return { success => 0, message => "user_id is required" }
unless $user_id && $user_id =~ /\S/;
return { success => 0, message => "Updates must be a hash reference" }
unless ref $updates eq 'HASH';
# Check if user exists
my $existing = $self->get_user($user_id);
unless ($existing->{success}) {
return { success => 0, message => "User '$user_id' not found" };
}
# 0. Clean $updates
# Delete any data for user_id and system timestamps
delete $updates->{$_} for qw/user_id created_date last_mod_date/;
# Define undefined values and remove leading and trailing whitespace
for my $f (keys $updates->%*) {
$updates->{$f} //= '';
$updates->{$f} =~ s/^\s*|\s*$//g;
}
# 1. Validate
my $validation = $self->validate_user_data( $updates );
return $validation unless $validation->{success};
# Proceed only with validated data
my $validated_updates = $validation->{valid_data};
# 2. Populate the record with user data
my $result = $self->{backend}->update( $user_id, $validated_updates );
# Add warnings to result if any
if ($validation->{warnings}) {
$result->{warnings} = $validation->{warnings};
}
return $result;
}
# List users - only returns user_ids with optional filtering
sub list_users {
my ($self, $filter_string) = @_;
# Parse filter string if provided
my $filters = {};
if ($filter_string && $filter_string =~ /\S/) {
$filters = $self->parse_filter_string($filter_string);
}
my $users = $self->{backend}->list($filters, {});
my @user_ids = map { $_->{user_id} } @{$users->{data} || []};
return {
success => 1,
user_ids => \@user_ids,
total_count => $users->{total_count} || 0,
filter_applied => ($filter_string && $filter_string =~ /\S/) ? $filter_string : '',
};
}
( run in 0.831 second using v1.01-cache-2.11-cpan-39bf76dae61 )