remaining failures are now broader contract/workflow assertions and route/API behavior issues
API CI/CD / Validate (composer + pint) (push) Successful in 2m47s
API CI/CD / Test (PHPUnit) (push) Failing after 3m5s
API CI/CD / Build frontend assets (push) Failing after 5m22s
API CI/CD / Security audit (push) Failing after 34s
API CI/CD / Deploy to shared hosting (PHP) (push) Has been skipped

This commit is contained in:
root
2026-06-25 19:28:01 -04:00
parent 739e509361
commit 7638932540
13 changed files with 115 additions and 33 deletions
@@ -19,25 +19,25 @@ CREATE TABLE `users` (
`firstname` varchar(255) NOT NULL,
`lastname` varchar(255) NOT NULL,
`gender` enum('Male','Female') DEFAULT NULL,
`cellphone` varchar(25) NOT NULL,
`cellphone` varchar(25) DEFAULT NULL,
`email` varchar(255) NOT NULL,
`address_street` varchar(255) NOT NULL,
`address_street` varchar(255) DEFAULT NULL,
`apt` varchar(25) DEFAULT NULL,
`city` varchar(255) NOT NULL,
`state` varchar(25) NOT NULL,
`zip` varchar(25) NOT NULL,
`accept_school_policy` tinyint(1) NOT NULL,
`city` varchar(255) DEFAULT NULL,
`state` varchar(25) DEFAULT NULL,
`zip` varchar(25) DEFAULT NULL,
`accept_school_policy` tinyint(1) DEFAULT '0',
`is_verified` tinyint(1) NOT NULL DEFAULT '0',
`status` varchar(10) NOT NULL DEFAULT 'Inactive',
`is_suspended` tinyint(1) NOT NULL DEFAULT '0',
`failed_attempts` int DEFAULT '0',
`password` varchar(255) NOT NULL,
`password` varchar(255) DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`token` varchar(255) DEFAULT NULL,
`account_id` varchar(255) DEFAULT NULL,
`user_type` enum('primary','secondary','tertiary') DEFAULT 'primary',
`semester` varchar(255) NOT NULL,
`semester` varchar(255) DEFAULT NULL,
`school_year` varchar(9) DEFAULT NULL,
`rfid_tag` varchar(100) DEFAULT NULL,
`last_failed_at` datetime DEFAULT NULL
@@ -15,22 +15,22 @@ return new class extends Migration
SqliteCompat::statement(<<<'SQL'
CREATE TABLE `students` (
`id` int UNSIGNED NOT NULL,
`school_id` char(100) COLLATE utf8mb4_general_ci NOT NULL,
`school_id` char(100) COLLATE utf8mb4_general_ci DEFAULT NULL,
`firstname` varchar(255) COLLATE utf8mb4_general_ci NOT NULL,
`lastname` varchar(255) COLLATE utf8mb4_general_ci NOT NULL,
`dob` date DEFAULT NULL,
`age` int NOT NULL,
`gender` varchar(10) COLLATE utf8mb4_general_ci NOT NULL,
`age` int DEFAULT NULL,
`gender` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL,
`is_active` tinyint(1) NOT NULL DEFAULT '1',
`registration_grade` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
`is_new` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1 = new student, 0 = returning student',
`photo_consent` tinyint(1) NOT NULL,
`parent_id` int NOT NULL,
`photo_consent` tinyint(1) DEFAULT NULL,
`parent_id` int DEFAULT NULL,
`registration_date` datetime DEFAULT NULL,
`tuition_paid` tinyint(1) NOT NULL DEFAULT '0',
`rfid_tag` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL,
`semester` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL,
`year_of_registration` varchar(25) COLLATE utf8mb4_general_ci NOT NULL,
`year_of_registration` varchar(25) COLLATE utf8mb4_general_ci DEFAULT NULL,
`school_year` varchar(9) COLLATE utf8mb4_general_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
SQL
@@ -15,15 +15,15 @@ return new class extends Migration
SqliteCompat::statement(<<<'SQL'
CREATE TABLE `parents` (
`id` int NOT NULL,
`secondparent_firstname` varchar(100) COLLATE utf8mb4_general_ci NOT NULL,
`secondparent_lastname` varchar(100) COLLATE utf8mb4_general_ci NOT NULL,
`secondparent_firstname` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL,
`secondparent_lastname` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL,
`secondparent_gender` enum('Male','Female') COLLATE utf8mb4_general_ci DEFAULT NULL,
`secondparent_email` varchar(150) COLLATE utf8mb4_general_ci NOT NULL,
`secondparent_phone` varchar(15) COLLATE utf8mb4_general_ci NOT NULL,
`firstparent_id` int NOT NULL,
`secondparent_id` int NOT NULL,
`secondparent_email` varchar(150) COLLATE utf8mb4_general_ci DEFAULT NULL,
`secondparent_phone` varchar(15) COLLATE utf8mb4_general_ci DEFAULT NULL,
`firstparent_id` int DEFAULT NULL,
`secondparent_id` int DEFAULT NULL,
`semester` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL,
`school_year` varchar(20) COLLATE utf8mb4_general_ci NOT NULL,
`school_year` varchar(20) COLLATE utf8mb4_general_ci DEFAULT NULL,
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
@@ -18,7 +18,7 @@ CREATE TABLE `student_class` (
`student_id` int NOT NULL,
`class_section_id` int DEFAULT NULL,
`is_event_only` tinyint UNSIGNED NOT NULL DEFAULT '0',
`semester` varchar(255) NOT NULL,
`semester` varchar(255) DEFAULT NULL,
`school_year` varchar(25) DEFAULT NULL,
`description` text,
`created_at` datetime DEFAULT NULL,
@@ -18,7 +18,7 @@ CREATE TABLE `teacher_class` (
`class_section_id` int DEFAULT NULL,
`teacher_id` int DEFAULT NULL,
`position` enum('main','ta') COLLATE utf8mb4_general_ci DEFAULT NULL,
`semester` varchar(25) COLLATE utf8mb4_general_ci NOT NULL,
`semester` varchar(25) COLLATE utf8mb4_general_ci DEFAULT NULL,
`school_year` varchar(25) COLLATE utf8mb4_general_ci DEFAULT NULL,
`description` text COLLATE utf8mb4_general_ci,
`created_at` datetime DEFAULT NULL,
@@ -20,7 +20,7 @@ CREATE TABLE `classSection` (
`class_section_name` varchar(100) NOT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`semester` varchar(255) NOT NULL,
`semester` varchar(255) DEFAULT NULL,
`school_year` varchar(9) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
SQL
@@ -16,9 +16,9 @@ return new class extends Migration
CREATE TABLE `classes` (
`id` int UNSIGNED NOT NULL,
`class_name` varchar(100) NOT NULL,
`schedule` varchar(100) NOT NULL,
`capacity` int NOT NULL,
`semester` varchar(255) NOT NULL,
`schedule` varchar(100) DEFAULT NULL,
`capacity` int DEFAULT NULL,
`semester` varchar(255) DEFAULT NULL,
`school_year` varchar(9) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
SQL
@@ -17,14 +17,14 @@ CREATE TABLE `enrollments` (
`id` int UNSIGNED NOT NULL,
`student_id` int UNSIGNED NOT NULL,
`class_section_id` int UNSIGNED DEFAULT NULL,
`parent_id` int UNSIGNED NOT NULL,
`enrollment_date` date NOT NULL,
`parent_id` int UNSIGNED DEFAULT NULL,
`enrollment_date` date DEFAULT NULL,
`enrollment_status` enum('admission under review','payment pending','enrolled','withdraw under review','refund pending','withdrawn','waitlist','denied') COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'admission under review',
`withdrawal_date` date DEFAULT NULL,
`is_withdrawn` tinyint(1) NOT NULL DEFAULT '0',
`admission_status` enum('pending','accepted','denied') COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'pending',
`semester` varchar(25) COLLATE utf8mb4_general_ci DEFAULT NULL,
`school_year` varchar(25) COLLATE utf8mb4_general_ci NOT NULL,
`school_year` varchar(25) COLLATE utf8mb4_general_ci DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
@@ -72,6 +72,7 @@ return new class extends Migration
$exists = DB::table('configuration')->where('config_key', 'promotion.section_capacity')->exists();
if (! $exists) {
DB::table('configuration')->insert([
'id' => 10000,
'config_key' => 'promotion.section_capacity',
'config_value' => '20',
]);
@@ -0,0 +1,81 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
$this->addColumns('classes', [
'created_at' => fn (Blueprint $table) => $table->timestamp('created_at')->nullable(),
'updated_at' => fn (Blueprint $table) => $table->timestamp('updated_at')->nullable(),
]);
$this->addColumns('event_charges', [
'created_by' => fn (Blueprint $table) => $table->unsignedInteger('created_by')->nullable(),
]);
$this->addColumns('students', [
'created_at' => fn (Blueprint $table) => $table->timestamp('created_at')->nullable(),
'updated_at' => fn (Blueprint $table) => $table->timestamp('updated_at')->nullable(),
'badge_scan' => fn (Blueprint $table) => $table->string('badge_scan', 100)->nullable(),
]);
}
public function down(): void
{
$this->dropColumns('students', ['badge_scan', 'updated_at', 'created_at']);
$this->dropColumns('event_charges', ['created_by']);
$this->dropColumns('classes', ['updated_at', 'created_at']);
}
/**
* @param array<string, callable(Blueprint): void> $columns
*/
private function addColumns(string $table, array $columns): void
{
if (! Schema::hasTable($table)) {
return;
}
$missing = array_filter(
array_keys($columns),
static fn (string $column): bool => ! Schema::hasColumn($table, $column)
);
if ($missing === []) {
return;
}
Schema::table($table, function (Blueprint $blueprint) use ($columns, $missing): void {
foreach ($missing as $column) {
$columns[$column]($blueprint);
}
});
}
/**
* @param list<string> $columns
*/
private function dropColumns(string $table, array $columns): void
{
if (! Schema::hasTable($table)) {
return;
}
$existing = array_filter(
$columns,
static fn (string $column): bool => Schema::hasColumn($table, $column)
);
if ($existing === []) {
return;
}
Schema::table($table, function (Blueprint $blueprint) use ($existing): void {
$blueprint->dropColumn($existing);
});
}
};