Concierge

 view release on metacpan or  search on metacpan

lib/Concierge.pm  view on Meta::CPAN


    # Warn if inconsistent (exists in one but not both)
    if ($auth_exists != $users_exists) {
        $response->{warning} = 'User exists in only one component - data inconsistency detected';
    }

    return $response;
}

# Update user data: modify user record in Users component
sub update_user_data ($self, $user_id, $update_data) {
    return { success => 0, message => 'user_id is required' }
        unless defined $user_id && length($user_id);

    return { success => 0, message => 'update_data must be a hash reference' }
        unless ref $update_data eq 'HASH';

    # Filter update data (excludes user_id, password, confirm_password)
    my $filtered_updates = $user_update_filter->($update_data);
    return { success => 0, message => 'No valid fields to update' }
        unless $filtered_updates && keys %$filtered_updates;

lib/Concierge/Desk/Base.pm  view on Meta::CPAN

}

sub remove_record ($self, $id) {
    croak ref($self), " must implement remove_record";
}

sub get_record ($self, $id, @fields) {
    croak ref($self), " must implement get_record";
}

sub update_record ($self, $id, $updates) {
    croak ref($self), " must implement update_record";
}

sub list_records ($self, $filter='', $opts={}) {
    croak ref($self), " must implement list_records";
}

1;

__END__

lib/Concierge/Desk/Base.pm  view on Meta::CPAN

            unless exists $self->{records}{$id};
        my $data = $self->{records}{$id};
        if (@fields) {
            my %selected = map { $_ => $data->{$_} }
                           grep { exists $data->{$_} } @fields;
            return { success => 1, record => \%selected };
        }
        return { success => 1, record => $data };
    }

    sub update_record ($self, $id, $updates) {
        return { success => 0, message => "Record '$id' not found" }
            unless exists $self->{records}{$id};
        $self->{records}{$id} = { %{$self->{records}{$id}}, %$updates };
        return { success => 1, message => "Organization '$id' updated" };
    }

    sub list_records ($self, $filter='', $opts={}) {
        my @ids = sort keys %{$self->{records}};
        return { success => 1, ids => \@ids, count => scalar @ids }
            unless $opts->{include_data};

lib/Concierge/Desk/User.pm  view on Meta::CPAN

sub session ($self) {
    return $self->{session};  # undef if no session (visitor)
}

sub get_session_data ($self) {
    return undef unless $self->{session};
    my $result = $self->{session}->get_data();
    return $result->{value} // {};
}

sub update_session_data ($self, $updates) {
    return undef unless $self->{session};

    my $result = $self->{session}->get_data();
    my $current = $result->{value} // {};

    # Merge updates into current data
    for my $key (keys %$updates) {
        $current->{$key} = $updates->{$key};
    }

lib/Concierge/Desk/User.pm  view on Meta::CPAN

    # Fetch fresh data from backend, update memory snapshot
    return undef unless $self->{_get_user_data};

    my $result = $self->{_get_user_data}->();
    return undef unless $result->{success};

    $self->{user_data} = $result->{user};
    return 1;
}

sub update_user_data ($self, $updates) {
    # Update backend AND memory snapshot
    return undef unless $self->{_update_user_data};

    my $result = $self->{_update_user_data}->($updates);
    return undef unless $result->{success};

    # Update memory snapshot with new values
    for my $field (keys %$updates) {
        $self->{user_data}{$field} = $updates->{$field};
    }



( run in 0.861 second using v1.01-cache-2.11-cpan-7fcb06a456a )