refactor: user warnings

Use route model binding. Use mass assignment. Remove unused routes and methods.
This commit is contained in:
Roardom
2023-06-23 07:04:48 +00:00
parent 25d8b6df33
commit d9ba25951a
4 changed files with 44 additions and 158 deletions
+26 -81
View File
@@ -18,7 +18,6 @@ use App\Models\PrivateMessage;
use App\Models\User;
use App\Models\Warning;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
use Exception;
/**
@@ -26,109 +25,56 @@ use Exception;
*/
class WarningController extends Controller
{
/**
* Deactivate A Warning.
*/
public function deactivate(Request $request, int $id): \Illuminate\Http\RedirectResponse
{
abort_unless($request->user()->group->is_modo, 403);
$staff = $request->user();
$warning = Warning::findOrFail($id);
$warning->expires_on = Carbon::now();
$warning->active = 0;
$warning->save();
// Send Private Message
$privateMessage = new PrivateMessage();
$privateMessage->sender_id = $staff->id;
$privateMessage->receiver_id = $warning->user_id;
$privateMessage->subject = 'Hit and Run Warning Deactivated';
$privateMessage->message = $staff->username.' has decided to deactivate your active warning for torrent '.$warning->torrent.' You lucked out! [color=red][b]THIS IS AN AUTOMATED SYSTEM MESSAGE, PLEASE DO NOT REPLY![/b][/color]';
$privateMessage->save();
return to_route('users.show', ['username' => $warning->warneduser->username])
->withSuccess('Warning Was Successfully Deactivated');
}
/**
* Deactivate All Warnings.
*/
public function deactivateAllWarnings(Request $request, string $username): \Illuminate\Http\RedirectResponse
{
abort_unless($request->user()->group->is_modo, 403);
$staff = $request->user();
$user = User::where('username', '=', $username)->sole();
foreach (Warning::where('user_id', '=', $user->id)->get() as $warning) {
$warning->expires_on = Carbon::now();
$warning->active = 0;
$warning->save();
}
// Send Private Message
$privateMessage = new PrivateMessage();
$privateMessage->sender_id = $staff->id;
$privateMessage->receiver_id = $user->id;
$privateMessage->subject = 'All Hit and Run Warning Deactivated';
$privateMessage->message = $staff->username.' has decided to deactivate all of your active hit and run warnings. You lucked out! [color=red][b]THIS IS AN AUTOMATED SYSTEM MESSAGE, PLEASE DO NOT REPLY![/b][/color]';
$privateMessage->save();
return to_route('users.show', ['username' => $user->username])
->withSuccess('All Warnings Were Successfully Deactivated');
}
/**
* Delete A Warning.
*
*
* @throws Exception
*/
public function deleteWarning(Request $request, int $id): \Illuminate\Http\RedirectResponse
public function destroy(Request $request, User $user, Warning $warning): \Illuminate\Http\RedirectResponse
{
abort_unless($request->user()->group->is_modo, 403);
$staff = $request->user();
$warning = Warning::findOrFail($id);
// Send Private Message
$privateMessage = new PrivateMessage();
$privateMessage->sender_id = $staff->id;
$privateMessage->receiver_id = $warning->user_id;
$privateMessage->subject = 'Hit and Run Warning Deleted';
$privateMessage->message = $staff->username.' has decided to delete your warning for torrent '.$warning->torrent.' You lucked out! [color=red][b]THIS IS AN AUTOMATED SYSTEM MESSAGE, PLEASE DO NOT REPLY![/b][/color]';
$privateMessage->save();
PrivateMessage::create([
'sender_id' => $staff->id,
'receiver_id' => $user->id,
'subject' => 'Hit and Run Warning Deleted',
'message' => $staff->username.' has decided to delete your warning for torrent '.$warning->torrent.' You lucked out! [color=red][b]THIS IS AN AUTOMATED SYSTEM MESSAGE, PLEASE DO NOT REPLY![/b][/color]',
]);
$warning->update([
'deleted_by' => $staff->id,
]);
$warning->deleted_by = $staff->id;
$warning->save();
$warning->delete();
return to_route('users.show', ['username' => $warning->warneduser->username])
return to_route('users.show', ['username' => $user->username])
->withSuccess('Warning Was Successfully Deleted');
}
/**
* Delete All Warnings.
*/
public function deleteAllWarnings(Request $request, string $username): \Illuminate\Http\RedirectResponse
public function massDestroy(Request $request, User $user): \Illuminate\Http\RedirectResponse
{
abort_unless($request->user()->group->is_modo, 403);
$staff = $request->user();
$user = User::where('username', '=', $username)->sole();
foreach (Warning::where('user_id', '=', $user->id)->get() as $warning) {
$warning->deleted_by = $staff->id;
$warning->save();
$warning->delete();
}
$user->warnings()->update([
'deleted_by' => $staff->id,
]);
// Send Private Message
$privateMessage = new PrivateMessage();
$privateMessage->sender_id = $staff->id;
$privateMessage->receiver_id = $user->id;
$privateMessage->subject = 'All Hit and Run Warnings Deleted';
$privateMessage->message = $staff->username.' has decided to delete all of your warnings. You lucked out! [color=red][b]THIS IS AN AUTOMATED SYSTEM MESSAGE, PLEASE DO NOT REPLY![/b][/color]';
$privateMessage->save();
$user->warnings()->delete();
PrivateMessage::create([
'sender_id' => $staff->id,
'receiver_id' => $user->id,
'subject' => 'All Hit and Run Warnings Deleted',
'message' => $staff->username.' has decided to delete all of your warnings. You lucked out! [color=red][b]THIS IS AN AUTOMATED SYSTEM MESSAGE, PLEASE DO NOT REPLY![/b][/color]',
]);
return to_route('users.show', ['username' => $user->username])
->withSuccess('All Warnings Were Successfully Deleted');
@@ -137,14 +83,13 @@ class WarningController extends Controller
/**
* Restore A Soft Deleted Warning.
*/
public function restoreWarning(Request $request, int $id): \Illuminate\Http\RedirectResponse
public function update(Request $request, User $user, Warning $warning): \Illuminate\Http\RedirectResponse
{
abort_unless($request->user()->group->is_modo, 403);
$warning = Warning::withTrashed()->findOrFail($id);
$warning->restore();
return to_route('users.show', ['username' => $warning->warneduser->username])
return to_route('users.show', ['username' => $user->username])
->withSuccess('Warning Was Successfully Restored');
}
}
@@ -39,7 +39,7 @@
</div>
<form
class="panel__action"
action="{{ route('massDeleteWarnings', ['username' => $user->username]) }}"
action="{{ route('users.warnings.mass_destroy', ['user' => $user]) }}"
method="POST"
x-data
>
@@ -140,7 +140,7 @@
<menu class="data-table__actions">
<li class="data-table__action">
<form
action="{{ route('deleteWarning', ['id' => $warning->id]) }}"
action="{{ route('users.warnings.destroy', ['user' => $user, 'warning' => $warning]) }}"
method="POST"
x-data
>
@@ -290,11 +290,12 @@
<menu class="data-table__actions">
<li class="data-table__action">
<form
action="{{ route('restoreWarning', ['id' => $warning->id]) }}"
action="{{ route('users.warnings.update', ['user' => $user, 'warning' => $warning]) }}"
method="POST"
x-data
>
@csrf
@method('PATCH')
<button
x-on:click.prevent="Swal.fire({
title: 'Are you sure?',
+7 -10
View File
@@ -547,6 +547,13 @@ Route::middleware('language')->group(function (): void {
Route::post('/', [App\Http\Controllers\User\TransactionController::class, 'store'])->name('store');
});
// Warnings
Route::prefix('warnings')->name('warnings.')->group(function (): void {
Route::delete('/{warning}', [App\Http\Controllers\User\WarningController::class, 'destroy'])->name('destroy');
Route::delete('/mass-delete', [App\Http\Controllers\User\WarningController::class, 'massDestroy'])->name('mass_destroy');
Route::patch('/{warning}', [App\Http\Controllers\User\WarningController::class, 'update'])->name('update')->withTrashed();
});
// Wishlist
Route::prefix('wishes')->name('wishes.')->group(function (): void {
Route::get('/', [App\Http\Controllers\User\WishController::class, 'index'])->name('index');
@@ -582,16 +589,6 @@ Route::middleware('language')->group(function (): void {
Route::prefix('users')->group(function (): void {
Route::post('/accept-rules', [App\Http\Controllers\User\UserController::class, 'acceptRules'])->name('accept.rules');
});
// Warnings
Route::prefix('warnings')->group(function (): void {
Route::post('/{id}/deactivate', [App\Http\Controllers\User\WarningController::class, 'deactivate'])->name('deactivateWarning');
Route::post('/{username}/mass-deactivate', [App\Http\Controllers\User\WarningController::class, 'deactivateAllWarnings'])->name('massDeactivateWarnings');
Route::delete('/{id}', [App\Http\Controllers\User\WarningController::class, 'deleteWarning'])->name('deleteWarning');
Route::delete('/{username}/mass-delete', [App\Http\Controllers\User\WarningController::class, 'deleteAllWarnings'])->name('massDeleteWarnings');
Route::post('/{id}/restore', [App\Http\Controllers\User\WarningController::class, 'restoreWarning'])->name('restoreWarning');
Route::get('/{username}', [App\Http\Controllers\User\WarningController::class, 'show'])->name('warnings.show');
});
});
/*
@@ -14,40 +14,6 @@ class WarningControllerTest extends TestCase
{
use RefreshDatabase;
/**
* @test
*/
public function deactivate_returns_an_ok_response(): void
{
$this->markTestIncomplete('This test case was generated by Shift. When you are ready, remove this line and complete this test case.');
$warning = Warning::factory()->create();
$user = User::factory()->create();
$response = $this->actingAs($user)->get(route('deactivateWarning', ['id' => $warning->id]));
$response->assertRedirect(withSuccess('Warning Was Successfully Deactivated'));
// TODO: perform additional assertions
}
/**
* @test
*/
public function deactivate_all_warnings_returns_an_ok_response(): void
{
$this->markTestIncomplete('This test case was generated by Shift. When you are ready, remove this line and complete this test case.');
$warning = Warning::factory()->create();
$user = User::factory()->create();
$response = $this->actingAs($user)->get(route('massDeactivateWarnings', ['username' => $warning->username]));
$response->assertRedirect(withSuccess('All Warnings Were Successfully Deactivated'));
// TODO: perform additional assertions
}
/**
* @test
*/
@@ -55,10 +21,10 @@ class WarningControllerTest extends TestCase
{
$this->markTestIncomplete('This test case was generated by Shift. When you are ready, remove this line and complete this test case.');
$warning = Warning::factory()->create();
$user = User::factory()->create();
Warning::factory()->create(['user_id' => $user->id]);
$response = $this->actingAs($user)->delete(route('massDeleteWarnings', ['username' => $warning->username]));
$response = $this->actingAs($user)->delete(route('users.warnings.massDestroy', ['user' => $user]));
$response->assertRedirect(withSuccess('All Warnings Were Successfully Deleted'));
@@ -72,10 +38,10 @@ class WarningControllerTest extends TestCase
{
$this->markTestIncomplete('This test case was generated by Shift. When you are ready, remove this line and complete this test case.');
$warning = Warning::factory()->create();
$user = User::factory()->create();
$warning = Warning::factory()->create(['user_id' => $user]);
$response = $this->actingAs($user)->delete(route('deleteWarning', ['id' => $warning->id]));
$response = $this->actingAs($user)->delete(route('users.warnings.destroy', ['user' => $user, 'warning' => $warning]));
$response->assertRedirect(withSuccess('Warning Was Successfully Deleted'));
@@ -85,42 +51,19 @@ class WarningControllerTest extends TestCase
/**
* @test
*/
public function restore_warning_returns_an_ok_response(): void
public function update_warning_returns_an_ok_response(): void
{
$this->markTestIncomplete('This test case was generated by Shift. When you are ready, remove this line and complete this test case.');
$warning = Warning::factory()->create();
$user = User::factory()->create();
$warning = Warning::factory()->create(['user_id' => $user]);
$response = $this->actingAs($user)->get(route('restoreWarning', ['id' => $warning->id]));
$response = $this->actingAs($user)->get(route('users.warnings.update', ['user' => $user, 'warning' => $warning]));
$response->assertRedirect(withSuccess('Warning Was Successfully Restored'));
// TODO: perform additional assertions
}
/**
* @test
*/
public function show_returns_an_ok_response(): void
{
$this->markTestIncomplete('This test case was generated by Shift. When you are ready, remove this line and complete this test case.');
$warning = Warning::factory()->create();
$user = User::factory()->create();
$response = $this->actingAs($user)->get(route('warnings.show', ['username' => $warning->username]));
$response->assertOk();
$response->assertViewIs('user.warning.index');
$response->assertViewHas('warnings');
$response->assertViewHas('warningcount');
$response->assertViewHas('softDeletedWarnings');
$response->assertViewHas('softDeletedWarningCount');
$response->assertViewHas('user');
// TODO: perform additional assertions
}
// test cases...
}