Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
26 / 26
100.00% covered (success)
100.00%
12 / 12
CRAP
100.00% covered (success)
100.00%
1 / 1
PlaceController
100.00% covered (success)
100.00%
26 / 26
100.00% covered (success)
100.00%
12 / 12
13
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 json
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 respond
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 create
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 sessionusers
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 exndnfo
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 invoicelst
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 ticketlst
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 productlst
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 productnfo
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 qrcodepdf
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 ticketlog
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5use Psr\Http\Message\ResponseInterface as Response;
6use Psr\Http\Message\ServerRequestInterface as Request;
7use UppServices\PlaceService;
8
9/**
10 * Slim controller for place endpoints.
11 * Delegates to PlaceService.
12 */
13class PlaceController
14{
15    private readonly PlaceService $placeService;
16
17    public function __construct(PlaceService $placeService)
18    {
19        $this->placeService = $placeService;
20    }
21
22    private function json(Response $response, array $data, int $status = 200): Response
23    {
24        $response->getBody()->write(json_encode($data));
25        return $response->withHeader('Content-Type', 'application/json')->withStatus($status);
26    }
27
28    private function respond(Response $response, array $result): Response
29    {
30        $response->getBody()->write($result['output']);
31        return $response->withHeader('Content-Type', $result['contentType']);
32    }
33
34    /**
35     * POST /place/create - create a new place (central PLACE row with status PA + place database).
36     */
37    public function create(Request $request, Response $response): Response
38    {
39        $body = $request->getBody()->getContents();
40        $data = $body !== '' ? (json_decode($body, true) ?? []) : [];
41        $result = $this->placeService->create($request->getQueryParams(), $data);
42        return $this->json($response, $result);
43    }
44
45    /** POST /place/sessionusers - get usernames for session list */
46    public function sessionusers(Request $request, Response $response): Response
47    {
48        return $this->respond($response, $this->placeService->sessionusers(
49            (string) $request->getBody(),
50            $request->getQueryParams()
51        ));
52    }
53
54    /** GET /place/exndnfo - license extended period info */
55    public function exndnfo(Request $request, Response $response): Response
56    {
57        return $this->respond($response, $this->placeService->exndnfo($request->getQueryParams()));
58    }
59
60    /** GET /place/invoicelst - invoice list for date range */
61    public function invoicelst(Request $request, Response $response): Response
62    {
63        return $this->respond($response, $this->placeService->invoicelst($request->getQueryParams()));
64    }
65
66    /** GET /place/ticketlst - ticket list for date range */
67    public function ticketlst(Request $request, Response $response): Response
68    {
69        return $this->respond($response, $this->placeService->ticketlst($request->getQueryParams()));
70    }
71
72    /** GET /place/productlst - product list for date range */
73    public function productlst(Request $request, Response $response): Response
74    {
75        return $this->respond($response, $this->placeService->productlst($request->getQueryParams()));
76    }
77
78    /** POST /place/productnfo - load product details by objids */
79    public function productnfo(Request $request, Response $response): Response
80    {
81        return $this->respond($response, $this->placeService->productnfo(
82            (string) $request->getBody(),
83            $request->getQueryParams()
84        ));
85    }
86
87    /** POST /place/qrcodepdf - render QR stickers PDF from HTML */
88    public function qrcodepdf(Request $request, Response $response): Response
89    {
90        return $this->respond($response, $this->placeService->qrcodepdf(
91            (string) $request->getBody(),
92            $request->getQueryParams()
93        ));
94    }
95
96    /** GET /place/ticketlog - ticket activity log */
97    public function ticketlog(Request $request, Response $response): Response
98    {
99        return $this->respond($response, $this->placeService->ticketlog($request->getQueryParams()));
100    }
101}