fix: add constraint actions to db structure
This commit adds several missing "cascade delete" actions to relationships on database tables. This effectively fixes errors while trying to delete user accounts because of pending child records. Additionally, the observers for applications and vacancies were removed, since they are now obsolete. The account deletion system was also refactored.
This commit is contained in:
@@ -1,109 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Copyright © 2020 Miguel Nogueira
|
||||
*
|
||||
* This file is part of Raspberry Staff Manager.
|
||||
*
|
||||
* Raspberry Staff Manager is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Raspberry Staff Manager is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Raspberry Staff Manager. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
namespace App\Observers;
|
||||
|
||||
use App\Application;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class ApplicationObserver
|
||||
{
|
||||
/**
|
||||
* Handle the application "created" event.
|
||||
*
|
||||
* @param \App\Application $application
|
||||
* @return void
|
||||
*/
|
||||
public function created(Application $application)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the application "updated" event.
|
||||
*
|
||||
* @param \App\Application $application
|
||||
* @return void
|
||||
*/
|
||||
public function updated(Application $application)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
public function deleting(Application $application)
|
||||
{
|
||||
$application->response()->delete();
|
||||
$votes = $application->votes;
|
||||
|
||||
foreach ($votes as $vote) {
|
||||
Log::debug('Referential integrity cleanup: Deleting and detaching vote '.$vote->id);
|
||||
$vote->application()->detach($application->id);
|
||||
$vote->delete();
|
||||
}
|
||||
|
||||
if (! is_null($application->appointment)) {
|
||||
Log::debug('RIC: Deleting appointment!');
|
||||
$application->appointment()->delete();
|
||||
}
|
||||
|
||||
if (! $application->comments->isEmpty()) {
|
||||
Log::debug('RIC: Deleting comments!');
|
||||
foreach ($application->comments as $comment) {
|
||||
$comment->delete();
|
||||
}
|
||||
}
|
||||
|
||||
// application can now be deleted
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the application "deleted" event.
|
||||
*
|
||||
* @param \App\Application $application
|
||||
* @return void
|
||||
*/
|
||||
public function deleted(Application $application)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the application "restored" event.
|
||||
*
|
||||
* @param \App\Application $application
|
||||
* @return void
|
||||
*/
|
||||
public function restored(Application $application)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the application "force deleted" event.
|
||||
*
|
||||
* @param \App\Application $application
|
||||
* @return void
|
||||
*/
|
||||
public function forceDeleted(Application $application)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
@@ -40,6 +40,7 @@ class UserObserver
|
||||
*/
|
||||
public function created(User $user)
|
||||
{
|
||||
// TODO: Make sure that the profile is created, throw an exception if otherwise, or try to recreate the profile.
|
||||
Profile::create([
|
||||
|
||||
'profileShortBio' => 'Write a one-liner about you here!',
|
||||
@@ -61,29 +62,6 @@ class UserObserver
|
||||
//
|
||||
}
|
||||
|
||||
public function deleting(User $user)
|
||||
{
|
||||
Log::debug("Deleting observer running");
|
||||
if ($user->isForceDeleting()) {
|
||||
$user->profile->delete();
|
||||
Log::debug('Referential integrity cleanup: Deleted profile!');
|
||||
$applications = $user->applications;
|
||||
|
||||
if (! $applications->isEmpty()) {
|
||||
Log::debug('RIC: Now trying to delete applications and responses...');
|
||||
foreach ($applications as $application) {
|
||||
// code moved to Application observer, where it gets rid of attached elements individually
|
||||
Log::debug('RIC: Deleting application '.$application->id);
|
||||
$application->delete();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Log::debug('RIC: Not cleaning up soft deleted models!');
|
||||
}
|
||||
|
||||
Log::debug('RIC: Cleanup done!');
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the user "deleted" event.
|
||||
*
|
||||
|
@@ -1,94 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Copyright © 2020 Miguel Nogueira
|
||||
*
|
||||
* This file is part of Raspberry Staff Manager.
|
||||
*
|
||||
* Raspberry Staff Manager is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Raspberry Staff Manager is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Raspberry Staff Manager. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
namespace App\Observers;
|
||||
|
||||
use App\Application;
|
||||
use App\Vacancy;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class VacancyObserver
|
||||
{
|
||||
/**
|
||||
* Handle the vacancy "created" event.
|
||||
*
|
||||
* @param \App\Vacancy $vacancy
|
||||
* @return void
|
||||
*/
|
||||
public function created(Vacancy $vacancy)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the vacancy "updated" event.
|
||||
*
|
||||
* @param \App\Vacancy $vacancy
|
||||
* @return void
|
||||
*/
|
||||
public function updated(Vacancy $vacancy)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
public function deleting(Vacancy $vacancy)
|
||||
{
|
||||
foreach(Application::with('response.vacancy')->get() as $app) {
|
||||
if ($app->response->vacancy->id == $vacancy->id)
|
||||
{
|
||||
$app->delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the vacancy "deleted" event.
|
||||
*
|
||||
* @param \App\Vacancy $vacancy
|
||||
* @return void
|
||||
*/
|
||||
public function deleted(Vacancy $vacancy)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the vacancy "restored" event.
|
||||
*
|
||||
* @param \App\Vacancy $vacancy
|
||||
* @return void
|
||||
*/
|
||||
public function restored(Vacancy $vacancy)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the vacancy "force deleted" event.
|
||||
*
|
||||
* @param \App\Vacancy $vacancy
|
||||
* @return void
|
||||
*/
|
||||
public function forceDeleted(Vacancy $vacancy)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user