feat: delete account
This commit is contained in:
@@ -8,9 +8,12 @@ use App\Http\Requests\UpdateUserRequest;
|
||||
use App\Http\Resources\UserResource;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class AuthController extends Controller
|
||||
{
|
||||
@@ -108,4 +111,42 @@ class AuthController extends Controller
|
||||
|
||||
return new UserResource($user->fresh());
|
||||
}
|
||||
|
||||
public function destroy(Request $request): JsonResponse
|
||||
{
|
||||
$user = $request->user();
|
||||
$storagePaths = collect([$user->avatar_url])
|
||||
->merge($user->mealPosts()->withTrashed()->pluck('image_url'))
|
||||
->filter(fn (?string $path): bool => $this->isPublicStoragePath($path))
|
||||
->values()
|
||||
->all();
|
||||
|
||||
DB::transaction(function () use ($user): void {
|
||||
$user->tokens()->delete();
|
||||
$user->notifications()->delete();
|
||||
|
||||
DB::table('sessions')
|
||||
->where('user_id', $user->getKey())
|
||||
->delete();
|
||||
|
||||
DB::table('password_reset_tokens')
|
||||
->where('email', $user->email)
|
||||
->delete();
|
||||
|
||||
$user->delete();
|
||||
});
|
||||
|
||||
if (! empty($storagePaths)) {
|
||||
Storage::disk('public')->delete($storagePaths);
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Compte supprimé avec succès',
|
||||
])->withoutCookie('token');
|
||||
}
|
||||
|
||||
private function isPublicStoragePath(?string $path): bool
|
||||
{
|
||||
return filled($path) && ! Str::startsWith($path, ['http://', 'https://']);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user