refactor: remove sharing token logic from Course model and update sharing routes to use Course ID

This commit is contained in:
Yoga Pangestu 2026-03-30 13:47:15 +07:00
parent 0b8d4ef09b
commit 7c74dd63e6
7 changed files with 6 additions and 58 deletions

View File

@ -4,7 +4,6 @@
use App\Models\ClassSession;
use Filament\Actions\Action;
use Illuminate\Support\Str;
class ShareAssignmentAction extends Action
{
@ -23,14 +22,11 @@ protected function setUp(): void
->link()
->action(function (array $arguments, $livewire) {
$course = $livewire->course;
if (empty($course->sharing_token)) {
$course->update(['sharing_token' => Str::random(32)]);
}
$session = ClassSession::find($arguments['session'] ?? null);
$url = route('share.assignment', [
'token' => $course->sharing_token,
'course' => $course->id,
'session_id' => $session ? $session->id : null,
]);

View File

@ -4,7 +4,6 @@
use App\Models\ClassSession;
use Filament\Actions\Action;
use Illuminate\Support\Str;
class ShareAttendanceAction extends Action
{
@ -23,14 +22,11 @@ protected function setUp(): void
->link()
->action(function (array $arguments, $livewire) {
$course = $livewire->course;
if (empty($course->sharing_token)) {
$course->update(['sharing_token' => Str::random(32)]);
}
$session = ClassSession::find($arguments['session'] ?? null);
$date = $session ? $session->date->toDateString() : null;
$url = route('share.attendance', ['token' => $course->sharing_token, 'date' => $date]);
$url = route('share.attendance', ['course' => $course->id, 'date' => $date]);
$text = "*Info Kelas {$course->name}*\nSesi ke-".($session->session_number ?? '-').' ('.($session->date->translatedFormat('d M Y') ?? '').")\n\nSilakan cek detail/rekap kehadiran melalui tautan ini:\n\n{$url}";

View File

@ -12,9 +12,8 @@
class ShareAssignmentController extends Controller
{
public function show(Request $request, string $token): View
public function show(Request $request, Course $course): View
{
$course = Course::where('sharing_token', $token)->firstOrFail();
// Retrieve available assignments for the dropdown (from the whole course)
$availableAssignments = Assignment::where('course_id', $course->id)

View File

@ -13,9 +13,8 @@
class ShareAttendanceController extends Controller
{
public function show(Request $request, string $token): View
public function show(Request $request, Course $course): View
{
$course = Course::where('sharing_token', $token)->firstOrFail();
$latestAttendance = Attendance::whereHas('courseSchedule', function ($query) use ($course) {
$query->where('course_id', $course->id);

View File

@ -14,13 +14,6 @@ class Course extends Model
protected $guarded = ['id'];
protected static function booted()
{
static::creating(function ($course) {
$course->sharing_token = \Illuminate\Support\Str::random(32);
});
}
public function assignments(): HasMany
{
return $this->hasMany(Assignment::class);

View File

@ -1,35 +0,0 @@
<?php
use App\Models\Course;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Str;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('courses', function (Blueprint $table) {
$table->string('sharing_token', 64)->nullable()->unique()->after('semester');
});
// Populate existing courses with a random token
Course::all()->each(function ($course) {
$course->update(['sharing_token' => Str::random(32)]);
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('courses', function (Blueprint $table) {
$table->dropColumn('sharing_token');
});
}
};

View File

@ -8,5 +8,5 @@
return view('welcome');
});
Route::get('/share/presensi/{token}', [ShareAttendanceController::class, 'show'])->name('share.attendance');
Route::get('/share/tugas/{token}', [ShareAssignmentController::class, 'show'])->name('share.assignment');
Route::get('/share/presensi/{course}', [ShareAttendanceController::class, 'show'])->name('share.attendance');
Route::get('/share/tugas/{course}', [ShareAssignmentController::class, 'show'])->name('share.assignment');