From 5b34ae268f4c02ae95ec52aa75c32f4f0e3c7a35 Mon Sep 17 00:00:00 2001 From: Allan Kong Date: Tue, 26 Aug 2025 10:24:37 -0700 Subject: [PATCH 01/26] Fix1 --- .../Controllers/ComputerScienceResourceController.php | 9 +++++---- app/Http/Controllers/ResourceEditsController.php | 4 ++-- resources/js/Components/Banner.vue | 6 +++--- resources/js/Components/Checkbox.vue | 2 +- resources/js/Pages/Auth/Login.vue | 4 ++-- resources/js/Pages/Auth/Register.vue | 8 ++++---- resources/js/Pages/Auth/VerifyEmail.vue | 2 +- .../Profile/Partials/UpdateProfileInformationForm.vue | 2 +- 8 files changed, 19 insertions(+), 18 deletions(-) diff --git a/app/Http/Controllers/ComputerScienceResourceController.php b/app/Http/Controllers/ComputerScienceResourceController.php index 935c6ddf..128c404a 100644 --- a/app/Http/Controllers/ComputerScienceResourceController.php +++ b/app/Http/Controllers/ComputerScienceResourceController.php @@ -123,7 +123,7 @@ public function store(StoreResourceRequest $request) ]); return redirect(route('resources.show', ['slug' => $resource->slug])) - ->with('success', 'Created Resource Succesfully!'); + ->with('success', 'Created Resource!'); } catch (Throwable $e) { DB::rollBack(); Log::critical('Failed to create resource', [ @@ -168,14 +168,15 @@ public function show(Request $request, string $slug, string $tab = 'reviews') if ($tab === 'reviews') { $userReview = null; if ($userId = Auth::id()) { - $userReview = ResourceReview::where('user_id', $userId)->first(); + $userReview = ResourceReview::whereBelongsTo($computerScienceResource) + ->firstWhere('user_id', $userId); } $data['userReview'] = $userReview; $data['reviews'] = Inertia::defer( function () use ($computerScienceResource, $sortBy, $request) { - $query = ResourceReview::where('computer_science_resource_id', $computerScienceResource->id); + $query = ResourceReview::whereBelongsTo($computerScienceResource); $query = $this->generalVotesSortingManager->applySort($query, $sortBy, ResourceReview::class); return $query->with('user')->paginate(10)->appends($request->query()); @@ -184,7 +185,7 @@ function () use ($computerScienceResource, $sortBy, $request) { } elseif ($tab === 'edits') { $data['resourceEdits'] = Inertia::defer( function () use ($computerScienceResource, $sortBy, $request) { - $query = ResourceEdits::where('computer_science_resource_id', $computerScienceResource->id); + $query = ResourceEdits::whereBelongsTo($computerScienceResource); $query = $this->generalVotesSortingManager->applySort($query, $sortBy, ResourceEdits::class); return $query->with('user')->paginate(10)->appends($request->query()); diff --git a/app/Http/Controllers/ResourceEditsController.php b/app/Http/Controllers/ResourceEditsController.php index 363b26bd..88c38316 100644 --- a/app/Http/Controllers/ResourceEditsController.php +++ b/app/Http/Controllers/ResourceEditsController.php @@ -69,7 +69,7 @@ public function store(ComputerScienceResource $computerScienceResource, StoreRes ]); return redirect()->route('resource_edits.show', ['slug' => $resourceEdit->slug]) - ->with('success', 'The proposed edits were created. Others can now view it.'); + ->with('success', 'Edits Created!'); } /** @@ -170,7 +170,7 @@ public function merge(ResourceEditsService $editsService, ResourceEdits $resourc ]); return redirect(route('resources.show', ['slug' => $resource->slug])) - ->with('success', 'Successfully merged new changed!'); + ->with('success', 'Successfully Merged Changes!'); } catch (Throwable $e) { DB::rollBack(); Log::critical('Failed to merge resource edits', [ diff --git a/resources/js/Components/Banner.vue b/resources/js/Components/Banner.vue index e8f7b2c5..2a5d6876 100644 --- a/resources/js/Components/Banner.vue +++ b/resources/js/Components/Banner.vue @@ -16,11 +16,11 @@ watchEffect(async () => { diff --git a/resources/js/Pages/Auth/Login.vue b/resources/js/Pages/Auth/Login.vue index 5a822b2f..7501fa78 100644 --- a/resources/js/Pages/Auth/Login.vue +++ b/resources/js/Pages/Auth/Login.vue @@ -78,7 +78,7 @@ const submit = () => {
+ class="underline text-sm text-gray-600 hover:text-gray-900 rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary"> Forgot your password? @@ -94,7 +94,7 @@ const submit = () => {
+ class="underline text-sm text-gray-600 hover:text-gray-900 rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary"> Not registered yet? Make an account
diff --git a/resources/js/Pages/Auth/Register.vue b/resources/js/Pages/Auth/Register.vue index 5ab5007d..9bae0a8e 100644 --- a/resources/js/Pages/Auth/Register.vue +++ b/resources/js/Pages/Auth/Register.vue @@ -92,9 +92,9 @@ const submit = () => { @@ -105,7 +105,7 @@ const submit = () => {
+ class="underline text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary dark:focus:ring-offset-gray-800"> Already registered? @@ -121,7 +121,7 @@ const submit = () => {
+ class="underline text-sm text-gray-600 hover:text-gray-900 rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary"> Already have an Account? Sign in
diff --git a/resources/js/Pages/Auth/VerifyEmail.vue b/resources/js/Pages/Auth/VerifyEmail.vue index 6622ab5b..ea1a129c 100644 --- a/resources/js/Pages/Auth/VerifyEmail.vue +++ b/resources/js/Pages/Auth/VerifyEmail.vue @@ -45,7 +45,7 @@ const verificationLinkSent = computed(() => props.status === 'verification-link- :href="route('logout')" method="post" as="button" - class="underline text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 dark:focus:ring-offset-gray-800 ms-2" + class="underline text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary dark:focus:ring-offset-gray-800 ms-2" > Log Out diff --git a/resources/js/Pages/Profile/Partials/UpdateProfileInformationForm.vue b/resources/js/Pages/Profile/Partials/UpdateProfileInformationForm.vue index eaaf3d57..86627fde 100644 --- a/resources/js/Pages/Profile/Partials/UpdateProfileInformationForm.vue +++ b/resources/js/Pages/Profile/Partials/UpdateProfileInformationForm.vue @@ -164,7 +164,7 @@ const clearPhotoFileInput = () => { :href="route('verification.send')" method="post" as="button" - class="underline text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 dark:focus:ring-offset-gray-800" + class="underline text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary dark:focus:ring-offset-gray-800" @click.prevent="sendEmailVerification" > Click here to re-send the verification email. From f8755fcf0f7fedc08ebb01bfcd0d04d5ec590ed2 Mon Sep 17 00:00:00 2001 From: Allan Kong Date: Tue, 26 Aug 2025 10:44:55 -0700 Subject: [PATCH 02/26] Create page in progress --- app/Models/ResourceEdits.php | 6 +++--- app/Models/ResourceReview.php | 5 +++++ database/schemas.md | 15 --------------- resources/js/Pages/Resources/Create.vue | 4 ++-- 4 files changed, 10 insertions(+), 20 deletions(-) delete mode 100644 database/schemas.md diff --git a/app/Models/ResourceEdits.php b/app/Models/ResourceEdits.php index 185c3b8d..b3dc4736 100644 --- a/app/Models/ResourceEdits.php +++ b/app/Models/ResourceEdits.php @@ -37,7 +37,7 @@ class ResourceEdits extends Model protected $guarded = []; - protected $with = ['votes', 'upvoteSummary', 'commentsCountRelationship', 'resource']; + protected $with = ['votes', 'upvoteSummary', 'commentsCountRelationship', 'computerScienceResource']; protected $appends = ['user_vote', 'vote_score', 'comments_count', 'can_merge_edits']; @@ -64,9 +64,9 @@ public function sluggable(): array ]; } - public function resource(): BelongsTo + public function computerScienceResource(): BelongsTo { - return $this->belongsTo(ComputerScienceResource::class, 'computer_science_resource_id', 'id'); + return $this->belongsTo(ComputerScienceResource::class); } public function user(): BelongsTo diff --git a/app/Models/ResourceReview.php b/app/Models/ResourceReview.php index 5b76d948..47ea451d 100644 --- a/app/Models/ResourceReview.php +++ b/app/Models/ResourceReview.php @@ -37,6 +37,11 @@ public function user(): BelongsTo return $this->belongsTo(User::class); } + public function computerScienceResource(): BelongsTo + { + return $this->belongsTo(ComputerScienceResource::class); + } + /** * Get the average review score. */ diff --git a/database/schemas.md b/database/schemas.md deleted file mode 100644 index 9ce21c45..00000000 --- a/database/schemas.md +++ /dev/null @@ -1,15 +0,0 @@ -Schema::create('computer_science_resource', function (Blueprint $table) { - $table->id(); - $table->string('name'); - $table->text('description'); - $table->string('image_url'); - $table->string('page_url'); - $table->date('created_at'); - - $table->set('resource_type', ['book', 'podcast', 'youtube channel', 'blog', 'website', 'organization', 'bootcamp', 'newsletter', 'workshop', 'course', 'forum', 'mobile app', 'desktop app', 'e-zine']); - $table->enum(difficulty, ['beginner', 'industry_simple', 'industry_standard', 'industry_professional', 'academic']); - $table->enum('pricing', ['free', 'premium', 'paid', 'freemium']) - - $table->timestamps(); - -}); diff --git a/resources/js/Pages/Resources/Create.vue b/resources/js/Pages/Resources/Create.vue index 55e65bac..f07e59bf 100644 --- a/resources/js/Pages/Resources/Create.vue +++ b/resources/js/Pages/Resources/Create.vue @@ -105,10 +105,10 @@ const handleFormChange = (newFormData) => {