Nextcloud-App/lib/Controller/TicketApiController.php

118 lines
3 KiB
PHP
Raw Normal View History

<?php
2021-08-21 14:25:23 +00:00
namespace OCA\UPschooling\Controller;
2021-08-21 14:25:23 +00:00
use OCA\UPschooling\AppInfo\Application;
use OCA\UPschooling\Db\TicketMapper;
use OCA\UPschooling\Exceptions\RoomNotFoundException;
use OCA\UPschooling\Service\ChatService;
use OCA\UPschooling\Service\MatrixService;
2021-08-22 15:03:19 +00:00
use OCA\UPschooling\Service\TicketService;
use OCP\AppFramework\ApiController;
use OCP\AppFramework\Http\DataResponse;
use OCP\IRequest;
use Psr\Log\LoggerInterface;
2021-09-18 19:15:03 +00:00
class TicketApiController extends ApiController
{
/** @var LoggerInterface */
private $logger;
2021-08-22 15:03:19 +00:00
/** @var TicketService */
private $ticketService;
/** @var MatrixService */
private $matrixService;
/** @var ChatService */
private $chatService;
/** @var TicketMapper */
private $ticketMapper;
/** @var string */
private $userId;
use Errors;
public function __construct(
IRequest $request,
LoggerInterface $logger,
TicketService $ticketService,
TicketMapper $ticketMapper,
MatrixService $matrixService,
ChatService $chatService,
string $userId
) {
parent::__construct(Application::APP_ID, $request);
$this->logger = $logger;
$this->ticketService = $ticketService;
$this->ticketMapper = $ticketMapper;
$this->matrixService = $matrixService;
$this->chatService = $chatService;
$this->userId = $userId;
}
/**
* @NoAdminRequired
*/
2021-09-18 19:15:03 +00:00
public function index(): DataResponse
{
return new DataResponse($this->ticketService->findAll($this->userId));
}
/**
* @NoAdminRequired
*/
2021-09-18 19:15:03 +00:00
public function show(int $id): DataResponse
{
return $this->handleNotFound(function () use ($id) {
return $this->ticketService->find($id, $this->userId);
});
}
/**
* @NoAdminRequired
*/
public function fetchChat(int $id): DataResponse
{
return $this->handleNotFound(function () use ($id) {
$matrixUser = $this->ticketService->getOrCreateUser($this->userId);
$ticket = $this->ticketMapper->findForUser($id, $matrixUser);
$this->logger->debug("fetchChat found matrix data for ticket " . print_r($ticket->jsonSerialize(), true));
// returns 404 RoomNotFoundException if no room could/should be created
$chatRoom = $this->chatService->getOrCreateChatRoom($ticket);
$this->logger->debug("fetchChat got chat room " . print_r($chatRoom->jsonSerialize(), true));
return array(
'matrixChatRoom' => $chatRoom->getMatrixRoomId(),
'matrixAccessToken' => $matrixUser->getMatrixToken(),
'matrixServerUrl' => $this->matrixService->getServerUrl(),
);
});
}
2021-09-21 18:22:56 +00:00
/**
* @NoAdminRequired
*/
2021-09-18 19:15:03 +00:00
public function create(string $title, string $content): DataResponse
{
return new DataResponse($this->ticketService->create($title, $content, $this->userId));
}
2021-09-21 18:22:56 +00:00
/**
* @NoAdminRequired
*/
public function update(int $id): DataResponse
2021-09-18 19:15:03 +00:00
{
return new DataResponse($this->ticketService->assign($id, $this->userId));
}
2021-09-18 19:15:03 +00:00
public function destroy(int $id): DataResponse
{
return $this->handleNotFound(function () use ($id) {
return $this->ticketService->delete($id, $this->userId);
});
}
}