Skip to content

Commit

Permalink
Merge pull request GH-425 from rinkp/feat/apiinternalerroris500
Browse files Browse the repository at this point in the history
Reviewers: Tom Udding <tomudding@users.noreply.github.com>
  • Loading branch information
rinkp committed Jul 24, 2024
2 parents 4692ad9 + ed4c354 commit b3d6ec9
Show file tree
Hide file tree
Showing 18 changed files with 381 additions and 93 deletions.
4 changes: 2 additions & 2 deletions module/Application/src/Controller/IndexController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

namespace Application\Controller;

use Laminas\Http\Response;
use Laminas\Http\Response as HttpResponse;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\Mvc\Plugin\Identity\Identity;
use Laminas\Session\Container as SessionContainer;
Expand All @@ -16,7 +16,7 @@
*/
class IndexController extends AbstractActionController
{
public function langAction(): Response
public function langAction(): HttpResponse
{
$session = new SessionContainer('lang');
$session->lang = $this->params()->fromRoute('lang');
Expand Down
10 changes: 10 additions & 0 deletions module/Database/config/module.config.php
Original file line number Diff line number Diff line change
Expand Up @@ -660,6 +660,16 @@
],
],
],
'example500' => [
'type' => Literal::class,
'options' => [
'route' => '/example500',
'defaults' => [
'controller' => ApiController::class,
'action' => 'example500',
],
],
],
'members' => [
'type' => Literal::class,
'options' => [
Expand Down
50 changes: 40 additions & 10 deletions module/Database/src/Controller/ApiController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@

namespace Database\Controller;

use Database\Model\Enums\ApiResponseStatuses;
use Database\Service\Api as ApiService;
use Laminas\Http\Response;
use Laminas\Http\Response as HttpResponse;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\JsonModel;
use RuntimeException;
use User\Model\Enums\ApiPermissions;
use User\Service\ApiAuthenticationService;

Expand All @@ -30,7 +32,19 @@ public function healthyAction(): JsonModel

$syncPaused = $this->apiService->isSyncPaused();

return new JsonModel(['healthy' => true, 'sync_paused' => $syncPaused]);
return new JsonModel([
'status' => ApiResponseStatuses::Success,
'healthy' => true,
'sync_paused' => $syncPaused,
]);
}

/**
* Error 500 action.
*/
public function example500Action(): JsonModel
{
throw new RuntimeException('An example exception was thrown.');
}

/**
Expand All @@ -48,15 +62,18 @@ public function membersAction(): JsonModel
$allowDeleted = $this->apiAuthService->currentUserCan(ApiPermissions::MembersDeleted);

$members = $this->apiService->getMembers($additionalProperties, $allowDeleted);
$res = ['data' => $members];
$res = [
'status' => ApiResponseStatuses::Success,
'data' => $members,
];

return new JsonModel($res);
}

/**
* Return member
*/
public function memberAction(): JsonModel|Response
public function memberAction(): JsonModel
{
$this->apiAuthService->assertCan(ApiPermissions::MembersR);

Expand All @@ -70,7 +87,10 @@ public function memberAction(): JsonModel|Response
return $this->noContent();
}

$res = ['data' => $member];
$res = [
'status' => ApiResponseStatuses::Success,
'data' => $member,
];

return new JsonModel($res);
}
Expand All @@ -90,20 +110,30 @@ public function membersActiveAction(): JsonModel
$includeInactiveFraternity,
$allowDeleted,
);
$res = ['data' => $members];
$res = [
'status' => ApiResponseStatuses::Success,
'data' => $members,
];

return new JsonModel($res);
}

/**
* To follow best practices, we generate a 204 for empty datasets
*/
private function noContent(): Response
private function noContent(): JsonModel
{
$response = new Response();
$response->setStatusCode(Response::STATUS_CODE_204);
$response = $this->getResponse();
if ($response instanceof HttpResponse) {
$response->setStatusCode(HttpResponse::STATUS_CODE_204);
}

return $response;
$res = [
'status' => ApiResponseStatuses::Success,
'data' => null,
];

return new JsonModel($res);
}

/**
Expand Down
6 changes: 3 additions & 3 deletions module/Database/src/Controller/MeetingController.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
use Database\Service\Api as ApiService;
use Database\Service\Meeting as MeetingService;
use Doctrine\DBAL\Exception\ForeignKeyConstraintViolationException;
use Laminas\Http\Response;
use Laminas\Http\Response as HttpResponse;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\JsonModel;
use Laminas\View\Model\ViewModel;
Expand Down Expand Up @@ -42,7 +42,7 @@ public function indexAction(): ViewModel
/**
* Create a new meeting.
*/
public function createAction(): Response|ViewModel
public function createAction(): HttpResponse|ViewModel
{
$request = $this->getRequest();

Expand Down Expand Up @@ -159,7 +159,7 @@ protected function getDecisionForms(
/**
* Decision form action.
*/
public function decisionformAction(): Response|ViewModel
public function decisionformAction(): HttpResponse|ViewModel
{
if (!$this->getRequest()->isPost()) {
return $this->redirect()->toRoute('meeting');
Expand Down
53 changes: 32 additions & 21 deletions module/Database/src/Controller/MemberController.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,11 @@
use Database\Service\Stripe as StripeService;
use DateTime;
use Laminas\Http\Header\HeaderInterface;
use Laminas\Http\Response;
use Laminas\Http\Response as HttpResponse;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\Mvc\I18n\Translator;
use Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger;
use Laminas\Stdlib\ResponseInterface;
use Laminas\View\Model\JsonModel;
use Laminas\View\Model\ViewModel;

Expand Down Expand Up @@ -48,7 +49,7 @@ public function indexAction(): ViewModel
/**
* Subscribe action.
*/
public function subscribeAction(): Response|ViewModel
public function subscribeAction(): HttpResponse|ViewModel
{
$ipMCS = ip2long($this->remoteAddress) >= ip2long('131.155.68.0')
&& ip2long($this->remoteAddress) <= ip2long('131.155.71.255');
Expand Down Expand Up @@ -118,7 +119,7 @@ public function checkoutStatusAction(): ViewModel
return new ViewModel($results);
}

public function checkoutRestartAction(): Response|ViewModel
public function checkoutRestartAction(): HttpResponse|ViewModel
{
$token = (string) $this->params()->fromRoute('token');
$paymentLink = $this->stripeService->getPaymentLink($token);
Expand All @@ -138,10 +139,10 @@ public function checkoutRestartAction(): Response|ViewModel

return $this->redirect()
->toUrl($restartedCheckoutLink)
->setStatusCode(Response::STATUS_CODE_303);
->setStatusCode(HttpResponse::STATUS_CODE_303);
}

public function paymentWebhookAction(): Response
public function paymentWebhookAction(): ResponseInterface
{
$signature = $this->getRequest()->getHeader('Stripe-Signature');

Expand All @@ -153,13 +154,23 @@ public function paymentWebhookAction(): Response
// (good) support for using Fibers to do this concurrently.
$this->stripeService->handleEvent($event);

return $this->getResponse()
->setStatusCode(Response::STATUS_CODE_200);
// We know this is always going to be an HttpResponse
$response = $this->getResponse();
if ($response instanceof HttpResponse) {
$response->setStatusCode(HttpResponse::STATUS_CODE_200);
}

return $response;
}
}

return $this->getResponse()
->setStatusCode(Response::STATUS_CODE_400);
// We know this is always going to be an HttpResponse
$response = $this->getResponse();
if ($response instanceof HttpResponse) {
$response->setStatusCode(HttpResponse::STATUS_CODE_400);
}

return $response;
}

/**
Expand Down Expand Up @@ -243,7 +254,7 @@ public function searchFilteredAction(): JsonModel
*
* Shows member information.
*/
public function showAction(): Response|ViewModel
public function showAction(): HttpResponse|ViewModel
{
$lidnr = (int) $this->params()->fromRoute('id');
$member = $this->memberService->getMemberWithDecisions($lidnr);
Expand Down Expand Up @@ -295,7 +306,7 @@ public function showAction(): Response|ViewModel
*
* Toggles if a member wants a supremum
*/
public function setSupremumAction(): Response|ViewModel
public function setSupremumAction(): HttpResponse|ViewModel
{
$member = $this->memberService->getMember((int) $this->params()->fromRoute('id'));

Expand All @@ -322,7 +333,7 @@ public function setSupremumAction(): Response|ViewModel
*
* Edit member information.
*/
public function editAction(): Response|ViewModel
public function editAction(): HttpResponse|ViewModel
{
$member = $this->memberService->getMember((int) $this->params()->fromRoute('id'));

Expand Down Expand Up @@ -367,7 +378,7 @@ public function editAction(): Response|ViewModel
*
* Delete a member.
*/
public function deleteAction(): Response|ViewModel
public function deleteAction(): HttpResponse|ViewModel
{
$member = $this->memberService->getMember((int) $this->params()->fromRoute('id'));

Expand Down Expand Up @@ -404,7 +415,7 @@ public function deleteAction(): Response|ViewModel
*
* Update list membership.
*/
public function listsAction(): Response|ViewModel
public function listsAction(): HttpResponse|ViewModel
{
$member = $this->memberService->getMember((int) $this->params()->fromRoute('id'));

Expand Down Expand Up @@ -449,7 +460,7 @@ public function listsAction(): Response|ViewModel
*
* Update / renew membership.
*/
public function membershipAction(): Response|ViewModel
public function membershipAction(): HttpResponse|ViewModel
{
$member = $this->memberService->getMember((int) $this->params()->fromRoute('id'));

Expand Down Expand Up @@ -505,7 +516,7 @@ public function membershipAction(): Response|ViewModel
*
* Extend the duration of the membership.
*/
public function expirationAction(): Response|ViewModel
public function expirationAction(): HttpResponse|ViewModel
{
$member = $this->memberService->getMember((int) $this->params()->fromRoute('id'));

Expand Down Expand Up @@ -553,7 +564,7 @@ public function expirationAction(): Response|ViewModel
*
* Edit a member's address.
*/
public function editAddressAction(): Response|ViewModel
public function editAddressAction(): HttpResponse|ViewModel
{
$type = AddressTypes::tryFrom($this->params()->fromRoute('type'));

Expand Down Expand Up @@ -610,7 +621,7 @@ public function editAddressAction(): Response|ViewModel
*
* Add a member's address.
*/
public function addAddressAction(): Response|ViewModel
public function addAddressAction(): HttpResponse|ViewModel
{
$type = AddressTypes::tryFrom($this->params()->fromRoute('type'));

Expand Down Expand Up @@ -672,7 +683,7 @@ public function addAddressAction(): Response|ViewModel
*
* Remove a member's address.
*/
public function removeAddressAction(): Response|ViewModel
public function removeAddressAction(): HttpResponse|ViewModel
{
$type = AddressTypes::tryFrom($this->params()->fromRoute('type'));

Expand Down Expand Up @@ -789,7 +800,7 @@ public function showUpdateAction(): ViewModel
/**
* Approve a pending member update.
*/
public function approveUpdateAction(): Response|ViewModel
public function approveUpdateAction(): HttpResponse|ViewModel
{
$memberUpdate = $this->memberService->getPendingMemberUpdate((int) $this->params()->fromRoute('id'));

Expand Down Expand Up @@ -835,7 +846,7 @@ public function approveUpdateAction(): Response|ViewModel
/**
* Reject a member update.
*/
public function rejectUpdateAction(): Response|ViewModel
public function rejectUpdateAction(): HttpResponse|ViewModel
{
$memberUpdate = $this->memberService->getPendingMemberUpdate((int) $this->params()->fromRoute('id'));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
use Database\Model\ProspectiveMember as ProspectiveMemberModel;
use Database\Service\Member as MemberService;
use Database\Service\Stripe as StripeService;
use Laminas\Http\Response;
use Laminas\Http\Response as HttpResponse;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\Mvc\I18n\Translator;
use Laminas\View\Model\JsonModel;
Expand Down Expand Up @@ -72,7 +72,7 @@ public function showAction(): ViewModel
*
* Shows prospective member information.
*/
public function finalizeAction(): Response
public function finalizeAction(): HttpResponse
{
$lidnr = (int) $this->params()->fromRoute('id');

Expand Down Expand Up @@ -111,7 +111,7 @@ public function finalizeAction(): Response
*
* Delete a prospective member.
*/
public function deleteAction(): Response|ViewModel
public function deleteAction(): HttpResponse|ViewModel
{
$lidnr = (int) $this->params()->fromRoute('id');
$prospectiveMember = $this->memberService->getProspectiveMember($lidnr);
Expand Down
6 changes: 3 additions & 3 deletions module/Database/src/Controller/QueryController.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
namespace Database\Controller;

use Database\Service\Query as QueryService;
use Laminas\Http\Response;
use Laminas\Http\Response as HttpResponse;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;

Expand All @@ -18,7 +18,7 @@ public function __construct(private readonly QueryService $queryService)
/**
* Index action.
*/
public function indexAction(): Response|ViewModel
public function indexAction(): HttpResponse|ViewModel
{
if ($this->getRequest()->isPost()) {
$post = $this->getRequest()->getPost()->toArray();
Expand Down Expand Up @@ -74,7 +74,7 @@ public function showAction(): ViewModel
/**
* Export action.
*/
public function exportAction(): Response|ViewModel
public function exportAction(): HttpResponse|ViewModel
{
if ($this->getRequest()->isPost()) {
$result = $this->queryService->execute(
Expand Down
Loading

0 comments on commit b3d6ec9

Please sign in to comment.