<?php declare(strict_types=1);
namespace App\Notification\Controller;
use App\Authentication\Entity\User;
use App\Framework\Controller\APIController;
use App\Framework\Serializer\APISerializerGroup;
use App\Notification\Entity\Notification;
use App\Notification\Service\NotificationService;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Component\Routing\Annotation\Route;
#[Route(path: '/api/users/{id}/notifications')]
#[Security("is_granted('IS_AUTHENTICATED_FULLY')")]
class NotificationsController extends APIController
{
/**
* @return Notification[]
*/
#[Route(path: '', methods: ['GET'])]
#[APISerializerGroup('user:default', 'default')]
public function getNotificationsAction(User $user, NotificationService $notificationService): array
{
return $notificationService->getNotificationsByUser($user);
}
/**
* @return Notification[]
*/
#[Route(path: '/{ids}', methods: ['PATCH'])]
public function readNotificationsAction(User $user, string $ids, NotificationService $notificationService): array
{
// Get array of ids that we want to pack
$ids = array_map('intval', explode(',', $ids));
// Mark them as read
$notifications = $notificationService->getNotificationsByIds($ids);
$notificationService->markNotificationsAsRead($notifications);
// And re-fetch to return a view
return $notificationService->getNotificationsByUser($user);
}
}