Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions app/Http/Controllers/ComputerScienceResourceController.php
Original file line number Diff line number Diff line change
Expand Up @@ -110,15 +110,16 @@ public function store(StoreResourceRequest $request)

Log::debug('Created resource '.json_encode($resource));

return redirect(route('resources.show', ['computerScienceResource' => $resource->id]))
return redirect(route('resources.show', ['slug' => $resource->slug]))
->with('success', 'Created Resource Succesfully!');
}

/**
* Display the specified resource.
*/
public function show(Request $request, ComputerScienceResource $computerScienceResource, string $tab = 'reviews')
public function show(Request $request, string $slug, string $tab = 'reviews')
{
$computerScienceResource = ComputerScienceResource::where('slug', $slug)->firstOrFail();
// Get the review summaries
$computerScienceResource->load('reviewSummary');
$computerScienceResource->load('user');
Expand All @@ -128,7 +129,7 @@ public function show(Request $request, ComputerScienceResource $computerScienceR
if (! in_array($tab, $validTabs)) {
// Redirect to default if invalid
return redirect()->route('resources.show', [
'computerScienceResource' => $computerScienceResource->id,
'slug' => $computerScienceResource->slug,
'tab' => 'reviews',
]);
}
Expand Down
17 changes: 8 additions & 9 deletions app/Http/Controllers/ResourceEditsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,16 @@

class ResourceEditsController extends Controller
{
private DataNormalizationService $dataService;

public function __construct(
private DataNormalizationService $dataNormalizationService
) {
$this->dataService = $dataNormalizationService;
}
) { }

/**
* Return the form to create a edit.
*/
public function create(ComputerScienceResource $computerScienceResource)
public function create(string $slug)
{
$computerScienceResource = ComputerScienceResource::where('slug', $slug)->firstOrFail();
$computerScienceResource->load('user');

return Inertia::render('ResourceEdits/Create', [
Expand Down Expand Up @@ -69,7 +66,7 @@ public function store(ComputerScienceResource $computerScienceResource, StoreRes
'proposed_changes' => $actualChanges,
]);

return redirect()->route('resource_edits.show', ['resourceEdits' => $resourceEdit->id])
return redirect()->route('resource_edits.show', ['slug' => $resourceEdit->slug])
->with('success', 'The proposed edits were created. Others can now view it.');
}

Expand All @@ -92,8 +89,10 @@ private function calculateChanges(ComputerScienceResource $resource, array $prop
return $actualChanges;
}

public function show(ResourceEdits $resourceEdits)
public function show(string $slug)
{
$resourceEdits = ResourceEdits::where('slug', $slug)->firstOrFail();

$resourceEdits->load('resource');
$resourceEdits->load('user');

Expand Down Expand Up @@ -160,7 +159,7 @@ public function merge(ResourceEditsService $editsService, ResourceEdits $resourc
// Delete the edit since we successfully merged the changes
$resourceEdits->delete();

return redirect(route('resources.show', ['computerScienceResource' => $resourceEdits->computer_science_resource_id]))
return redirect(route('resources.show', ['slug' => $resource->slug]))
->with('success', 'Successfully merged new changed!');
}
}
20 changes: 18 additions & 2 deletions app/Models/ComputerScienceResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,16 @@
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Support\Facades\Storage;
use Spatie\Tags\HasTags;
use Cviebrock\EloquentSluggable\Sluggable;

#[ObservedBy([ComputerScienceResourceObserver::class])]
class ComputerScienceResource extends Model
{
use HasFactory;
use Sluggable;

use HasComments;

/** @use HasFactory<\Database\Factories\ComputerScienceResourceFactory> */
use HasFactory;
use HasTags;
use HasVotes;

Expand All @@ -31,6 +33,20 @@ class ComputerScienceResource extends Model

protected $appends = ['topic_tags', 'programming_language_tags', 'general_tags', 'vote_score', 'user_vote', 'comments_count', 'image_url'];

/**
* Return the sluggable configuration array for this model.
*
* @return array
*/
public function sluggable(): array
{
return [
'slug' => [
'source' => 'name'
]
];
}

public function user(): BelongsTo
{
return $this->belongsTo(User::class);
Expand Down
16 changes: 16 additions & 0 deletions app/Models/ResourceEdits.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,13 @@
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use ShiftOneLabs\LaravelCascadeDeletes\CascadesDeletes;
use Cviebrock\EloquentSluggable\Sluggable;

#[ObservedBy([ResourceEditsObserver::class])]
class ResourceEdits extends Model
{
use CascadesDeletes;
use Sluggable;

use HasComments;
/** @use HasFactory<\Database\Factories\ResourceEditsFactory> */
Expand All @@ -37,6 +39,20 @@ class ResourceEdits extends Model
'proposed_changes' => 'array',
];

/**
* Return the sluggable configuration array for this model.
*
* @return array
*/
public function sluggable(): array
{
return [
'slug' => [
'source' => 'edit_title'
]
];
}

public function resource(): BelongsTo
{
return $this->belongsTo(ComputerScienceResource::class, 'computer_science_resource_id', 'id');
Expand Down
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"license": "MIT",
"require": {
"php": "^8.2",
"cviebrock/eloquent-sluggable": "^11.0",
"inertiajs/inertia-laravel": "^2.0",
"joelbutcher/socialstream": "^6.2",
"laravel/framework": "^11.31",
Expand Down
150 changes: 149 additions & 1 deletion composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion config/computerScienceResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

return [
'platforms' => ['book', 'podcast', 'youtube_channel', 'blog', 'website', 'organization', 'service', 'bootcamp', 'newsletter', 'workshop', 'course', 'forum', 'mobile_app', 'desktop_app', 'magazine'],
'difficulties' => ['beginner', 'industry_simple', 'industry_standard', 'industry_professional', 'academic'],
'difficulties' => ['children', 'beginner', 'industry_simple', 'industry_standard', 'industry_professional', 'academic'],
'pricings' => ['free', 'paid', 'freemium'],
];
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public function up(): void
if (! Schema::hasTable('computer_science_resources')) {
Schema::create('computer_science_resources', function (Blueprint $table) {
$table->id();

$table->string('slug')->unique();
// User who posted
$table->foreignIdFor(User::class);

Expand All @@ -28,7 +28,7 @@ public function up(): void

$table->set('platforms', ['book', 'podcast', 'youtube_channel', 'blog', 'website', 'organization', 'service', 'bootcamp', 'newsletter', 'workshop', 'course', 'forum', 'mobile_app', 'desktop_app', 'magazine'])
->index();
$table->enum('difficulty', ['beginner', 'industry_simple', 'industry_standard', 'industry_professional', 'academic'])
$table->enum('difficulty', ['children', 'beginner', 'industry_simple', 'industry_standard', 'industry_professional', 'academic'])
->index();
$table->enum('pricing', ['free', 'premium', 'paid', 'freemium'])
->index();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public function up(): void
{
Schema::create('resource_edits', function (Blueprint $table) {
$table->id();
$table->string('slug')->unique();
$table->timestamps();

// The resource we are editting
Expand Down
4 changes: 2 additions & 2 deletions resources/js/Components/Comments/SortUpvotesByDropdown.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<script setup>
import { ref, defineEmits } from "vue";
import Dropdown from 'primevue/dropdown';
import { Select } from "primevue";

const props = defineProps({
initialValue: {
Expand Down Expand Up @@ -28,7 +28,7 @@ const emit = defineEmits(['change'])
<template>
<div class="flex items-center gap-2 py-4">
<label class="font-semibold text-gray-700">Sort by:</label>
<Dropdown
<Select
v-model="selectedSort"
:options="sortOptions"
optionLabel="label"
Expand Down
9 changes: 0 additions & 9 deletions resources/js/Components/Navbar/UserDropdown.vue
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,6 @@ const logout = () => {
router.post(route('logout'));
};

const alignmentClasses = computed(() => {
if (props.align === 'left') {
return 'origin-top-left left-0';
} else if (props.align === 'right') {
return 'origin-top-right right-0';
} else {
return 'origin-top';
}
});
</script>

<template>
Expand Down
Loading