redo-ensemble-table #1

Merged
matt merged 4 commits from redo-ensemble-table into main 2026-01-02 02:40:10 +00:00
9 changed files with 87 additions and 26 deletions
Showing only changes of commit ee7cb96d03 - Show all commits

View File

@ -4,8 +4,8 @@ namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Http\Requests\EtudeUploadRequest;
use App\Models\AuditionedEnsemble;
use App\Models\AuditionEtude;
use App\Models\Ensemble;
use App\Models\Instrument;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
@ -28,7 +28,7 @@ class AuditionEtudeController extends Controller
public function create()
{
$instruments = Instrument::orderBy('score_order')->get();
$ensembles = AuditionedEnsemble::all();
$ensembles = Ensemble::all();
return view('admin.audition_etude.create', [
'instruments' => $instruments,
@ -42,7 +42,7 @@ class AuditionEtudeController extends Controller
public function store(EtudeUploadRequest $request)
{
$instrument = Instrument::find($request->instrument_id);
$ensemble = AuditionedEnsemble::find($request->auditioned_ensemble_id);
$ensemble = Ensemble::find($request->ensemble_id);
$filename = $ensemble->name.' '.$instrument->instrument.' Set '.$request->set.'.pdf';
$filename = str_replace(' ', '_', $filename);
@ -52,7 +52,7 @@ class AuditionEtudeController extends Controller
AuditionEtude::create([
'instrument_id' => $request->instrument_id,
'auditioned_ensemble_id' => $request->auditioned_ensemble_id,
'ensemble_id' => $request->ensemble_id,
'set' => $request->set,
'file_path' => $path,
'original_filename' => $originalFilename,
@ -61,7 +61,7 @@ class AuditionEtudeController extends Controller
session([
'previous_instrument_id' => $request->instrument_id,
'previous_auditioned_ensemble_id' => $request->auditioned_ensemble_id,
'previous_ensemble_id' => $request->ensemble_id,
'previous_set' => $request->set,
]);

View File

@ -3,15 +3,16 @@
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\AuditionedEnsemble;
use App\Models\Ensemble;
use App\Models\Instrument;
class AuditionEtudeGridController extends Controller
{
public function index()
{
$ensembles = AuditionedEnsemble::all();
$ensembles = Ensemble::all();
$instruments = Instrument::orderBy('score_order')->get();
return view('admin.audition_etude.grid', compact('ensembles', 'instruments'));
}
}

View File

@ -2,7 +2,7 @@
namespace App\Http\Controllers;
use App\Models\AuditionedEnsemble;
use App\Models\Ensemble;
use App\Models\Instrument;
use App\Services\AuditionEtudeService;
@ -10,7 +10,7 @@ class EtudesController extends Controller
{
public function __invoke(AuditionEtudeService $service)
{
$ensembles = AuditionedEnsemble::all();
$ensembles = Ensemble::all();
$instruments = Instrument::has('etudes')->withCount('etudes')->get();
$schoolYear = $service->getActiveSchoolYear();
$currentSet = [];
@ -23,6 +23,6 @@ class EtudesController extends Controller
->get()->keyBy('instrument_id');
}
return view('etudes', compact('ensembles', 'schoolYear', 'currentSet', 'instruments','etudes'));
return view('etudes', compact('ensembles', 'schoolYear', 'currentSet', 'instruments', 'etudes'));
}
}

View File

@ -2,7 +2,7 @@
namespace App\Http\Requests;
use App\Models\AuditionedEnsemble;
use App\Models\Ensemble;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
@ -25,18 +25,18 @@ class EtudeUploadRequest extends FormRequest
{
return [
'auditioned_ensemble_id' => ['required', 'exists:auditioned_ensembles,id'],
'ensemble_id' => ['required', 'exists:ensembles,id'],
'instrument_id' => ['required', 'exists:instruments,id'],
'set' => [
'required',
'numeric',
'min:1',
Rule::unique('audition_etudes')
->where('auditioned_ensemble_id', $this->auditioned_ensemble_id)
->where('ensemble_id', $this->ensemble_id)
->where('instrument_id', $this->instrument_id),
function ($attribute, $value, $fail) {
/** @noinspection PhpUndefinedFieldInspection */
$ensemble = AuditionedEnsemble::find($this->auditioned_ensemble_id);
$ensemble = Ensemble::find($this->ensemble_id);
if ($ensemble && $value > $ensemble->set_count) {
$fail("The set number cannot exceed {$ensemble->set_count} for this ensemble.");
}

View File

@ -9,7 +9,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
class AuditionEtude extends Model
{
protected $fillable = [
'instrument_id', 'auditioned_ensemble_id', 'set', 'original_filename', 'file_path', 'file_size',
'instrument_id', 'ensemble_id', 'set', 'original_filename', 'file_path', 'file_size',
];
public function instrument(): BelongsTo
@ -17,9 +17,9 @@ class AuditionEtude extends Model
return $this->belongsTo(Instrument::class);
}
public function auditionedEnsemble(): BelongsTo
public function ensemble(): BelongsTo
{
return $this->belongsTo(AuditionedEnsemble::class);
return $this->belongsTo(Ensemble::class);
}
protected function humanReadableFileSize(): Attribute

View File

@ -5,7 +5,7 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class AuditionedEnsemble extends Model
class Ensemble extends Model
{
protected $fillable = [
'name', 'set_count',
@ -13,6 +13,6 @@ class AuditionedEnsemble extends Model
public function etudes(): HasMany
{
return $this->hasMany(AuditionEtude::class);
return $this->hasMany(AuditionEtude::class, 'ensemble_id');
}
}

View File

@ -2,7 +2,7 @@
namespace App\Services;
use App\Models\AuditionedEnsemble;
use App\Models\Ensemble;
use Carbon\Carbon;
readonly class AuditionEtudeService
@ -62,14 +62,14 @@ readonly class AuditionEtudeService
* Sets rotate annually based on the ensemble's set count.
* The rotation is calculated from the configured start year.
*
* @param AuditionedEnsemble $ensemble The ensemble to get the set for
* @param Ensemble $ensemble The ensemble to get the set for
* @param int|null $year Optional year. Defaults to current audition year.
* @return int The set number (1 to ensemble's set_count)
*
* @example
* getSetForEnsemble($ensemble, 2024) // Returns the set number for 2024
*/
public function getSetForEnsemble(AuditionedEnsemble $ensemble, ?int $year = null): int
public function getSetForEnsemble(Ensemble $ensemble, ?int $year = null): int
{
$year = $year ?? $this->getCurrentAuditionYear();
$setCount = $ensemble->set_count;

View File

@ -0,0 +1,61 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
// Rename the auditioned_ensembles table to ensembles
Schema::rename('auditioned_ensembles', 'ensembles');
// Update the foreign key on audition_etudes table
Schema::table('audition_etudes', function (Blueprint $table) {
// Drop the existing foreign key constraint
$table->dropForeign(['auditioned_ensemble_id']);
// Rename the column
$table->renameColumn('auditioned_ensemble_id', 'ensemble_id');
});
// Re-add the foreign key constraint with the new name
Schema::table('audition_etudes', function (Blueprint $table) {
$table->foreign('ensemble_id')
->references('id')
->on('ensembles')
->cascadeOnDelete();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
// Drop the foreign key before renaming
Schema::table('audition_etudes', function (Blueprint $table) {
$table->dropForeign(['ensemble_id']);
});
// Rename the column back
Schema::table('audition_etudes', function (Blueprint $table) {
$table->renameColumn('ensemble_id', 'auditioned_ensemble_id');
});
// Rename the table back to auditioned_ensembles
Schema::rename('ensembles', 'auditioned_ensembles');
// Re-add the original foreign key
Schema::table('audition_etudes', function (Blueprint $table) {
$table->foreign('auditioned_ensemble_id')
->references('id')
->on('auditioned_ensembles')
->cascadeOnDelete();
});
}
};

View File

@ -2,11 +2,10 @@
namespace Database\Seeders;
use App\Models\AuditionedEnsemble;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use App\Models\Ensemble;
use Illuminate\Database\Seeder;
class AuditionedEnsembleSeeder extends Seeder
class EnsembleSeeder extends Seeder
{
/**
* Run the database seeds.
@ -19,6 +18,6 @@ class AuditionedEnsembleSeeder extends Seeder
['name' => 'Seventh Grade', 'set_count' => 1],
['name' => 'Jazz', 'set_count' => 3],
];
AuditionedEnsemble::insert($defaults);
Ensemble::insert($defaults);
}
}