Files
timebank-cc-public/app/Actions/Jetstream/RestoreProfile.php
Ronald Huynen 2547717edb Initial commit
2026-03-23 21:37:59 +01:00

82 lines
2.7 KiB
PHP

<?php
namespace App\Actions\Jetstream;
use Illuminate\Support\Facades\Log;
use Throwable;
class RestoreProfile
{
/**
* Restore a deleted profile if within grace period and not yet anonymized.
*
* @param mixed $profile
* @return array
*/
public function restore($profile)
{
try {
// Check if profile is actually deleted
if (!$profile->deleted_at) {
return [
'status' => 'error',
'message' => 'Profile is not deleted.'
];
}
// Check if profile has been anonymized (email is the indicator)
if (str_starts_with($profile->email, 'removed-') && str_ends_with($profile->email, '@remove.ed')) {
return [
'status' => 'error',
'message' => 'Profile has been permanently deleted and cannot be restored.'
];
}
// Check if grace period has expired
$gracePeriodDays = timebank_config('delete_profile.grace_period_days', 30);
$gracePeriodExpiry = $profile->deleted_at->addDays($gracePeriodDays);
if (now()->isAfter($gracePeriodExpiry)) {
return [
'status' => 'error',
'message' => 'Grace period has expired. Profile cannot be restored.'
];
}
// Restore the profile by clearing deleted_at and balance handling data
$profile->deleted_at = null;
$profile->comment = null; // Clear stored balance handling preferences
$profile->save();
// Clear balance handling cache
$cacheKey = 'balance_handling_' . get_class($profile) . '_' . $profile->id;
\Cache::forget($cacheKey);
// Restore associated accounts (they were never marked deleted during grace period)
// No need to update accounts as they remain active during grace period
Log::info('Profile restored', [
'profile_type' => get_class($profile),
'profile_id' => $profile->id,
'profile_name' => $profile->name,
]);
return [
'status' => 'success',
'message' => 'Profile has been successfully restored.'
];
} catch (Throwable $e) {
Log::error('Profile restoration failed', [
'profile_id' => $profile->id ?? null,
'error' => $e->getMessage()
]);
return [
'status' => 'error',
'message' => $e->getMessage()
];
}
}
}