Skip to content

Commit 3892268

Browse files
committed
Work in progress
1 parent af77410 commit 3892268

12 files changed

Lines changed: 161 additions & 84 deletions

app/Http/Controllers/CommentController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ public function show(string $commentableType, int $commentableId, int $index)
190190
}
191191
}
192192

193-
\Log::debug("Returned comments: " . json_encode($flattenedComments));
193+
Log::debug("Returned comments: " . json_encode($flattenedComments));
194194
return [
195195
'comments' => $flattenedComments,
196196
'users' => $users->values(),

app/Http/Controllers/ComputerScienceResourceController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public function store(StoreResourceRequest $request)
4646
'user_id' => Auth::id(),
4747
'name' => $validatedData['name'],
4848
'description' => $validatedData['description'],
49-
'image_url' => $validatedData['image_url'] ?? null,
49+
'image_url' => $validatedData['image_url'],
5050
'page_url' => $validatedData['page_url'],
5151
'platforms' => $validatedData['platforms'],
5252
'difficulty' => $validatedData['difficulty'],

app/Http/Controllers/ResourceEditsController.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
namespace App\Http\Controllers;
44

5-
use App\Http\Requests\ResourceEdit\StoreResourceEdit;
65
use App\Models\ComputerScienceResource;
76
use App\Models\ResourceEdits;
87
use App\Services\ResourceEditsService;
8+
use App\Http\Requests\ResourceEdit\StoreResourceEdit;
99
use Auth;
1010
use Inertia\Inertia;
1111
use Log;
@@ -52,10 +52,9 @@ public function store(ComputerScienceResource $computerScienceResource, StoreRes
5252
'computer_science_resource_id' => $computerScienceResource->id,
5353
'edit_title' => $validatedData['edit_title'],
5454
'edit_description' => $validatedData['edit_description'],
55-
5655
'name' => $validatedData['name'],
5756
'description' => $validatedData['description'],
58-
'image_url' => $validatedData['image_url'] ?? null,
57+
'image_url' => $validatedData['image_url'],
5958
'page_url' => $validatedData['page_url'],
6059
'platforms' => $validatedData['platforms'],
6160
'difficulty' => $validatedData['difficulty'],

app/Http/Requests/ComputerScienceResource/StoreResourceRequest.php

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22

33
namespace App\Http\Requests\ComputerScienceResource;
44

5+
use App\Http\Requests\Shared\ComputerScienceResourceRequest;
56
use Auth;
67
use Illuminate\Foundation\Http\FormRequest;
7-
use Illuminate\Validation\Rule;
88

99
class StoreResourceRequest extends FormRequest
1010
{
11+
use ComputerScienceResourceRequest;
12+
1113
/**
1214
* Determine if the user is authorized to make this request.
1315
*/
@@ -23,23 +25,11 @@ public function authorize(): bool
2325
*/
2426
public function rules(): array
2527
{
26-
return [
27-
'name' => ['required', 'string', 'max:100'],
28-
'description' => ['required', 'string', 'max:10000'],
29-
'platforms' => ['required', 'array'],
30-
'platforms.*' => ['distinct', 'string', Rule::in(config('computerScienceResource.platforms'))],
31-
'page_url' => ['required', 'string', 'url:http,https', 'max:255'],
32-
'difficulty' => ['required', 'string', Rule::in(config('computerScienceResource.difficulties'))],
33-
'pricing' => ['required', 'string', Rule::in(config('computerScienceResource.pricings'))],
34-
'topic_tags' => ['required', 'array', 'min:3'],
35-
'topic_tags.*' => ['required', 'distinct', 'string', 'max:50'],
36-
37-
// Optional fields
38-
'image_url' => ['nullable', 'string', 'url:http,https', 'max:255'],
28+
return array_merge($this->baseResourceRules(), [
3929
'general_tags' => ['nullable', 'array'],
4030
'general_tags.*' => ['distinct', 'string', 'max:50'],
4131
'programming_language_tags' => ['nullable', 'array'],
42-
'programming_language_tags.*' => ['distinct', 'string', 'max:50']
43-
];
32+
'programming_language_tags.*' => ['distinct', 'string', 'max:50'],
33+
]);
4434
}
4535
}

app/Http/Requests/ResourceEdit/StoreResourceEdit.php

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22

33
namespace App\Http\Requests\ResourceEdit;
44

5-
use App\Http\Requests\ComputerScienceResource\StoreResourceRequest;
5+
use App\Http\Requests\Shared\ComputerScienceResourceRequest;
66
use Auth;
77
use Illuminate\Foundation\Http\FormRequest;
88

99
class StoreResourceEdit extends FormRequest
1010
{
11+
use ComputerScienceResourceRequest;
1112
/**
1213
* Determine if the user is authorized to make this request.
1314
*/
@@ -23,12 +24,14 @@ public function authorize(): bool
2324
*/
2425
public function rules(): array
2526
{
26-
// Have the same validation rules as a resource
27-
$storeResourceRequest = new StoreResourceRequest();
28-
29-
return array_merge([
27+
return array_merge($this->baseResourceRules(), [
3028
'edit_title' => ['required', 'string', 'max:100'],
3129
'edit_description' => ['required', 'string', 'max:10000'],
32-
], $storeResourceRequest->rules());
30+
31+
'general_tags' => ['required', 'array'],
32+
'general_tags.*' => ['required', 'string', 'max:50'],
33+
'programming_language_tags' => ['required', 'array'],
34+
'programming_language_tags.*' => ['distinct', 'string', 'max:50'],
35+
]);
3336
}
3437
}

app/Http/Requests/ResourceReview/StoreResourceReview.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
namespace App\Http\Requests\ResourceReview;
44

55
use Illuminate\Foundation\Http\FormRequest;
6-
use Illuminate\Validation\Rule;
76

87
class StoreResourceReview extends FormRequest
98
{
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespace App\Http\Requests\Shared;
4+
5+
use Illuminate\Validation\Rule;
6+
7+
trait ComputerScienceResourceRequest
8+
{
9+
public function baseResourceRules(): array
10+
{
11+
return [
12+
'name' => ['required', 'string', 'max:100'],
13+
'description' => ['required', 'string', 'max:10000'],
14+
'platforms' => ['required', 'array'],
15+
'platforms.*' => ['distinct', 'string', Rule::in(config('computerScienceResource.platforms'))],
16+
'page_url' => ['required', 'string', 'url:http,https', 'max:255'],
17+
'image_url' => ['required', 'string', 'url:http,https', 'max:255'],
18+
'difficulty' => ['required', 'string', Rule::in(config('computerScienceResource.difficulties'))],
19+
'pricing' => ['required', 'string', Rule::in(config('computerScienceResource.pricings'))],
20+
'topic_tags' => ['required', 'array', 'min:3'],
21+
'topic_tags.*' => ['required', 'distinct', 'string', 'max:50'],
22+
];
23+
}
24+
25+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
namespace App\Http\Resources;
4+
5+
use Illuminate\Http\Request;
6+
use Illuminate\Http\Resources\Json\JsonResource;
7+
8+
class ComputerScienceResourceResource extends JsonResource
9+
{
10+
/**
11+
* Transform the resource into an array.
12+
*
13+
* @return array<string, mixed>
14+
*/
15+
public function toArray(Request $request): array
16+
{
17+
return [
18+
'name' => $this->name,
19+
'description' => $this->description,
20+
'page_url' => $this->page_url,
21+
'image_url' => $this->image_url ?? '',
22+
'platforms' => $this->platforms,
23+
'difficulty' => $this->difficulty,
24+
'pricing' => $this->pricing,
25+
'topic_tags' => $this->topic_tags,
26+
'programming_language_tags' => $this->programming_language_tags,
27+
'general_tags' => $this->general_tags,
28+
];
29+
}
30+
}

database/migrations/2025_01_24_171530_create_computer_science_resources_table.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ public function up(): void
2121

2222
$table->string('name')->fulltext();
2323
$table->text('description')->fulltext();
24-
$table->string('image_url');
25-
24+
$table->string('image_url')->default('');
25+
2626
// TODO: Have a url for each platform the resource is on.
2727
$table->string('page_url');
2828

tests/Feature/ComputerScienceResourceControllerTest.php

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public function test_can_post_resource()
2828

2929
$formData = ComputerScienceResourceTestResource::fake();
3030

31+
Log::debug("Form data: ". json_encode($formData));
3132
$response = $this->postJson(route('resources.store'), $formData);
3233

3334
$response->assertStatus(302); // a redirect after successful creation
@@ -36,11 +37,6 @@ public function test_can_post_resource()
3637
// Check it is created
3738
$createdResource = ComputerScienceResource::where('name', $formData['name'])->first();
3839
$this->assertNotNull($createdResource);
39-
40-
// Check tags
41-
$this->assertEquals($formData['topic_tags'], $createdResource->topic_tags);
42-
$this->assertEquals($formData['programming_language_tags'], $createdResource->programming_language_tags);
43-
$this->assertEquals($formData['general_tags'], $createdResource->general_tags);
4440
}
4541

4642
public function test_cannot_post_resource_unauthed()
@@ -84,8 +80,6 @@ public function test_cannot_post_resource_with_invalid_fields()
8480
'pricing' => 'invalid_pricing',
8581
'topic_tags' => ['tag1', 'tag2'], // Less than required minimum of 3
8682
'image_url' => 'not-a-url',
87-
'general_tags' => 'not-an-array',
88-
'programming_language_tags' => 'not-an-array'
8983
];
9084

9185
// Choose from one of the invalid fields

0 commit comments

Comments
 (0)