Skip to content

Commit f3ac10f

Browse files
committed
refactor: merge template node update into vault update
1 parent 33c460b commit f3ac10f

11 files changed

Lines changed: 226 additions & 277 deletions

File tree

app/Actions/UpdateVault.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@
1414
/** @param array{name?: string, templates_node_id?: int|null} $attributes */
1515
public function handle(Vault $vault, array $attributes): Vault
1616
{
17+
if (
18+
isset($attributes['templates_node_id'])
19+
&& $attributes['templates_node_id'] === $vault->templates_node_id
20+
) {
21+
$attributes['templates_node_id'] = null;
22+
}
23+
1724
$vault->update($attributes);
1825

1926
// Broadcast events

app/Http/Controllers/VaultController.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,15 @@ public function show(): void
4646
//
4747
}
4848

49-
public function update(UpdateVaultRequest $request, Vault $vault, UpdateVault $updateVault): JsonResponse
50-
{
51-
/** @var array{name: string} $data */
49+
public function update(
50+
UpdateVaultRequest $request,
51+
Vault $vault,
52+
#[CurrentUser] User $currentUser,
53+
UpdateVault $updateVault,
54+
): JsonResponse {
55+
abort_unless($currentUser->can('update', $vault), 403);
56+
57+
/** @var array{name?: string, templates_node_id?: int} $data */
5258
$data = $request->validated();
5359

5460
$vault = $updateVault->handle($vault, $data);

app/Http/Controllers/VaultTemplatesNodeController.php

Lines changed: 0 additions & 46 deletions
This file was deleted.

app/Http/Requests/UpdateVaultRequest.php

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,30 +8,20 @@
88
use App\Models\Vault;
99
use Illuminate\Foundation\Http\FormRequest;
1010
use Illuminate\Validation\Rule;
11-
use Illuminate\Validation\Rules\Unique;
12-
use Illuminate\Validation\ValidationException;
1311

1412
final class UpdateVaultRequest extends FormRequest
1513
{
16-
public function authorize(): bool
17-
{
18-
/** @var User $user */
19-
$user = $this->user();
20-
21-
return $user->can('update', $this->route('vault'));
22-
}
23-
24-
/**
25-
* @return array<string, array<int, string|Unique>>
26-
*/
14+
/** @return array<string, array<int, mixed>> */
2715
public function rules(): array
2816
{
2917
/** @var User $user */
3018
$user = $this->user();
3119

20+
/** @var Vault $vault */
21+
$vault = $this->route('vault');
22+
3223
return [
3324
'name' => [
34-
'required',
3525
'string',
3626
'max:255',
3727
// One or more allowed characters, not starting with a dot or space
@@ -40,13 +30,12 @@ public function rules(): array
4030
->where('created_by', $user->id)
4131
->ignore($this->route('vault')),
4232
],
33+
'templates_node_id' => [
34+
'integer',
35+
Rule::exists('vault_nodes', 'id')
36+
->where('vault_id', $vault->id)
37+
->where('is_file', 0),
38+
],
4339
];
4440
}
45-
46-
protected function failedAuthorization(): void
47-
{
48-
throw ValidationException::withMessages([
49-
'update' => __('Not allowed'),
50-
]);
51-
}
5241
}

app/Http/Requests/UpdateVaultTemplatesNodeRequest.php

Lines changed: 0 additions & 24 deletions
This file was deleted.

database/factories/VaultNodeFactory.php

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@
55
namespace Database\Factories;
66

77
use App\Models\Vault;
8+
use App\Models\VaultNode;
89
use Illuminate\Database\Eloquent\Factories\Factory;
910

10-
/**
11-
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\VaultNode>
12-
*/
11+
/** @extends Factory<VaultNode> */
1312
final class VaultNodeFactory extends Factory
1413
{
1514
/**
@@ -22,10 +21,21 @@ public function definition(): array
2221
return [
2322
'vault_id' => Vault::factory(),
2423
'parent_id' => null,
25-
'is_file' => true,
24+
'is_file' => false,
2625
'name' => fake()->words(3, true),
27-
'extension' => 'md',
28-
'content' => fake()->paragraph(),
26+
'extension' => null,
27+
'content' => null,
2928
];
3029
}
30+
31+
public function file(): Factory
32+
{
33+
return $this->state(function (array $attributes) {
34+
return [
35+
'is_file' => true,
36+
'extension' => 'md',
37+
'content' => fake()->paragraph(),
38+
];
39+
});
40+
}
3141
}

resources/js/composables/useVaultTreeActions.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import { show, templatesNode } from '@/routes/vaults';
1+
import { show, update } from '@/routes/vaults';
22
import { children, move } from '@/routes/vaults/nodes';
33
import { useVaultStore } from '@/stores/vault';
44
import { useVaultTreeStore } from '@/stores/vaultTree';
5-
import { Vault } from '@/types/vault';
65
import { VaultShowPageProps } from '@/types/vault.pages';
76
import { router, usePage } from '@inertiajs/vue3';
87
import { AxiosError, AxiosResponse } from 'axios';
@@ -100,7 +99,7 @@ export function useVaultTreeActions() {
10099
}
101100

102101
function setTemplateFolder(nodeId: number): void {
103-
const url = templatesNode.url({ vault: vaultTreeStore.getActiveVaultId() });
102+
const url = update.url({ vault: vaultTreeStore.getActiveVaultId() });
104103

105104
if (vaultTreeStore.isFolderLoading(nodeId)) {
106105
return;
@@ -115,9 +114,9 @@ export function useVaultTreeActions() {
115114
templates_node_id: nodeId,
116115
},
117116
})
118-
.then((response: AxiosResponse<{ vault: Vault }>) => {
117+
.then((response: AxiosResponse) => {
119118
createToast('Template folder updated', 'success');
120-
vaultStore.setVault(response.data.vault);
119+
vaultStore.updateVault(response.data.data);
121120
})
122121
.catch((error: AxiosError) => {
123122
createToast(error.response?.statusText ?? 'Something went wrong', 'error');

routes/web.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
use App\Http\Controllers\VaultNodeController;
2424
use App\Http\Controllers\VaultNodeImportController;
2525
use App\Http\Controllers\VaultNodeMoveController;
26-
use App\Http\Controllers\VaultTemplatesNodeController;
2726
use App\Http\Middleware\EnsureEmailIsConfigured;
2827
use App\Http\Middleware\EnsureRegistrationIsEnabled;
2928
use App\Http\Middleware\EnsureUserIsAdmin;
@@ -41,7 +40,6 @@
4140
Route::patch('', [VaultController::class, 'update'])->name('update');
4241
Route::delete('', [VaultController::class, 'destroy'])->name('destroy');
4342
Route::get('export', VaultExportController::class)->name('export');
44-
Route::patch('templates-node', VaultTemplatesNodeController::class)->name('templates-node');
4543
});
4644

4745
Route::post('import', VaultImportController::class)->name('import');

tests/Feature/Web/Vaults/UpdateVaultTemplatesNodeTest.php

Lines changed: 0 additions & 142 deletions
This file was deleted.

0 commit comments

Comments
 (0)