Files
alrahma_sunday_school_api/app/Services/SchoolIdService.php
T
2026-06-08 23:45:55 -04:00

70 lines
1.6 KiB
PHP

<?php
namespace App\Services;
use App\Models\User;
use Illuminate\Support\Facades\DB;
class SchoolIdService
{
public function assignSchoolIdToUser(int $userId): ?string
{
$user = User::query()->find($userId);
if (!$user) {
return null;
}
$existing = (string) ($user->school_id ?? '');
if ($existing !== '') {
return $existing;
}
$schoolId = $this->generateUserSchoolId();
$user->school_id = $schoolId;
$user->save();
return $schoolId;
}
public function generateStudentSchoolId(): string
{
$year = date('y');
$maxId = 0;
$row = DB::table('students')
->selectRaw('MAX(school_id) AS max_id')
->where('school_id', 'like', "STU{$year}%")
->first();
if (!empty($row?->max_id)) {
$numericPart = substr((string) $row->max_id, 5);
$maxId = (int) $numericPart;
}
$nextId = str_pad($maxId + 1, 5, '0', STR_PAD_LEFT);
return "STU{$year}{$nextId}";
}
public function generateUserSchoolId(): string
{
$year = date('y');
$maxId = 0;
$row = DB::table('users')
->selectRaw('MAX(school_id) AS max_id')
->where('school_id', 'not like', 'S%')
->where('school_id', 'like', "{$year}%")
->first();
if (!empty($row?->max_id)) {
$numericPart = substr((string) $row->max_id, 2);
$maxId = max($maxId, (int) $numericPart);
}
$nextId = str_pad($maxId + 1, 5, '0', STR_PAD_LEFT);
return "{$year}{$nextId}";
}
}