Medical Appointments API

AppointmentController extends BaseController
in package

The AppointmentController is responsible for handling time zone API requests.

Tags
OA\Tag

( name="Appointments", description="API Endpoints of Appointments" )

author

Luis Graciano contacto@luisgraciano.dev

Table of Contents

$path  : string
$routes  : array<string|int, mixed>
$path  : string
$routes  : array<string|int, mixed>
$appointmentService  : AppointmentService
__construct()  : mixed
AppointmentController constructor.
addApiRoutes()  : void
Create a RouteGroup for the controller and add the routes to it.
findAvailableSlots()  : ResponseInterface
Find available slots for a schedule and date.
save()  : ResponseInterface
Save an appointment.
checkParams()  : void
Check the given parameters against the given schema.
makeJsonResponse()  : ResponseInterface
Create a JSON response with the given result and status code.
addRoutes()  : void
Add routes to the given group.

Properties

$path

public string $path

The path of the controller (e.g. /appointment).

$routes

public array<string|int, mixed> $routes

The routes for the controller. The routes should be an array of arrays with the following keys: method, path, handler.

$routes

protected array<string|int, mixed> $routes = [['method' => 'GET', 'path' => '/find-available-slots', 'handler' => 'findAvailableSlots'], ['method' => 'POST', 'path' => '', 'handler' => 'save']]

The routes for the controller.

Methods

addApiRoutes()

Create a RouteGroup for the controller and add the routes to it.

public addApiRoutes(RouteCollectorProxy $group) : void
Parameters
$group : RouteCollectorProxy

The route group.

Tags
throws
Exception

If the controller does not have a path or routes property.

Return values
void

findAvailableSlots()

Find available slots for a schedule and date.

public findAvailableSlots(ServerRequestInterface $request, ResponseInterface $response, array<string|int, mixed> $args) : ResponseInterface
Parameters
$request : ServerRequestInterface
$response : ResponseInterface
$args : array<string|int, mixed>
Tags
OA\Get

( path="/appointment/find-available-slots", tags={"Appointments"}, summary="Find available slots", @OA\Parameter( name="schedule_id", in="query", description="Schedule id", required=true, example=1 ), @OA\Parameter( name="date", in="query", description="Date in format YYYY-MM-DD", required=true, example="2023-08-14" ), @OA\Response( response=200, description="Success", @OA\JsonContent(type="array", @OA\Items(ref="#/components/schemas/AppointmentTimeInterval")) ), @OA\Response(response=400, ref="#/components/responses/400"), @OA\Response(response=404, ref="#/components/responses/404"), @OA\Response(response=500, ref="#/components/responses/500") )

throws
NotFoundException

If the schedule or date is not found.

throws
UnhandledException

If an unhandled exception occurs.

throws
BusinessValidationException

If the schedule is not available.

Return values
ResponseInterface

save()

Save an appointment.

public save(ServerRequestInterface $request, ResponseInterface $response, array<string|int, mixed> $args) : ResponseInterface
Parameters
$request : ServerRequestInterface
$response : ResponseInterface
$args : array<string|int, mixed>
Tags
OA\Post

( path="/appointment", tags={"Appointments"}, summary="Save appointment", @OA\RequestBody( description="Appointment object", required=true, @OA\JsonContent(ref="#/components/schemas/Appointment") ), @OA\Response( response=200, description="Success", @OA\JsonContent(ref="#/components/schemas/Appointment") ), @OA\Response(response=400, ref="#/components/responses/400"), @OA\Response(response=500, ref="#/components/responses/500") )

throws
BusinessValidationException|UnhandledException
throws
Exception
Return values
ResponseInterface

checkParams()

Check the given parameters against the given schema.

protected checkParams(array<string|int, mixed> $params, array<string|int, mixed> $schema) : void
Parameters
$params : array<string|int, mixed>

The parameters to check.

$schema : array<string|int, mixed>

The schema to check against. The schema should be an array of arrays with the following keys: type, required, not_blank, min_number, max_number, min_length, max_length, regex, properties, items. The type can be one of the following: integer, string, boolean, object, array.

Tags
throws
BusinessValidationException

If a validation error occurs.

Return values
void

makeJsonResponse()

Create a JSON response with the given result and status code.

protected makeJsonResponse(ResponseInterface $response[, mixed $result = null ][, int $status_code = 200 ]) : ResponseInterface
Parameters
$response : ResponseInterface

The PSR-7 response.

$result : mixed = null

The data to be included in the JSON response.

$status_code : int = 200

The HTTP status code for the response (default is 200).

Return values
ResponseInterface

The PSR-7 response with JSON data and appropriate headers.

addRoutes()

Add routes to the given group.

private addRoutes(RouteCollectorProxy $newGroup) : void
Parameters
$newGroup : RouteCollectorProxy

The route group.

Tags
throws
Exception

If the controller does not have a routes property or if a route is missing a method, path, or handler.

Return values
void

Search results