feat(api): add dashboard endpoints for clinic, doctor, and secretary roles

- Implemented GET /api/v1/dashboard/clinic to return clinic stats and today's schedule for clinic owners.
- Implemented GET /api/v1/dashboard/doctor to return doctor's stats and today's schedule for doctors.
- Implemented GET /api/v1/dashboard/secretary to return stats and conditional appointments for secretaries.

feat(migrations): create user_active_context and mobile_verification_otp tables

- Added migration to create user_active_context table for tracking active user sessions.
- Added migration to create mobile_verification_otp table for handling mobile number verification.

feat(migrations): create site_config table for application settings

- Added migration to create site_config table to store various site configuration settings.

feat(appointments): create MyAppointmentsController for user-specific appointments

- Added MyAppointmentsController to handle fetching user-specific appointments with pagination and filtering.

feat(auth): implement NotificationMobileController for mobile number verification

- Added NotificationMobileController to handle OTP requests and verification for mobile number changes.

feat(auth): create MobileVerificationOtp entity for OTP management

- Created MobileVerificationOtp entity to manage OTP records for mobile verification.

feat(auth): create UserActiveContext entity for user session management

- Created UserActiveContext entity to manage user active sessions.

feat(config): implement SiteConfigController for managing site settings

- Added SiteConfigController to handle fetching and updating site configuration settings.

feat(config): create SiteConfig entity and repository for configuration management

- Created SiteConfig entity and repository to manage site configuration data.
This commit is contained in:
hamed
2026-06-11 12:20:12 +03:30
parent 54c491c734
commit e7b90a6399
32 changed files with 3780 additions and 354 deletions
@@ -0,0 +1,61 @@
<?php
namespace App\Config\Repository;
use App\Config\Entity\SiteConfig;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
class SiteConfigRepository extends ServiceEntityRepository
{
// Default values returned when a key is missing from DB
private const DEFAULTS = [
'commission_enabled' => '0',
'commission_percent' => '0',
'site_name' => 'ClinicPro',
'support_phone' => '',
'max_cancel_hours_before' => '24',
'appointment_reminder_hours' => '2',
];
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, SiteConfig::class);
}
public function get(string $key): ?string
{
$row = $this->find($key);
if ($row !== null) {
return $row->getValue();
}
return self::DEFAULTS[$key] ?? null;
}
public function getAll(): array
{
$rows = $this->findAll();
$map = [];
foreach ($rows as $row) {
$map[$row->getKey()] = $row->getValue();
}
// Fill missing keys with defaults
foreach (self::DEFAULTS as $key => $default) {
if (!isset($map[$key])) {
$map[$key] = $default;
}
}
return $map;
}
public function set(string $key, ?string $value): void
{
$row = $this->find($key);
if ($row === null) {
$row = new SiteConfig($key, $value);
$this->getEntityManager()->persist($row);
} else {
$row->setValue($value);
}
}
}