auto
This commit is contained in:
parent
a98aa394ac
commit
4af65e72f7
|
@ -2,11 +2,19 @@
|
||||||
|
|
||||||
namespace Bluesquare\NotificationsBundle\Controller;
|
namespace Bluesquare\NotificationsBundle\Controller;
|
||||||
|
|
||||||
|
use Bluesquare\NotificationsBundle\Entity\Notification;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Oui, je throw des exceptions sans catch, c'est comme ça qu'on utilise ce framework proprement
|
||||||
|
* https://symfony.com/doc/current/controller.html#managing-errors-and-404-pages
|
||||||
|
*
|
||||||
|
* Class MainController
|
||||||
|
* @package Bluesquare\NotificationsBundle\Controller
|
||||||
|
*/
|
||||||
class MainController extends AbstractController
|
class MainController extends AbstractController
|
||||||
{
|
{
|
||||||
public function myUser()
|
public function getAll()
|
||||||
{
|
{
|
||||||
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
|
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
|
||||||
|
|
||||||
|
@ -16,4 +24,62 @@ class MainController extends AbstractController
|
||||||
$notifs = $notifssrv->getForUser($user, true);
|
$notifs = $notifssrv->getForUser($user, true);
|
||||||
return $this->json($notifs);
|
return $this->json($notifs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function delete($id)
|
||||||
|
{
|
||||||
|
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
|
||||||
|
$em = $this->getDoctrine()->getManager();
|
||||||
|
$user = $this->getUser();
|
||||||
|
$notif = $em->getRepository(Notification::class)->find($id);
|
||||||
|
|
||||||
|
if (!$notif)
|
||||||
|
throw $this->createNotFoundException('Notification not found');
|
||||||
|
|
||||||
|
if ($notif->getUser() != $user)
|
||||||
|
throw $this->createAccessDeniedException();
|
||||||
|
|
||||||
|
$em->remove($notif);
|
||||||
|
$em->flush();
|
||||||
|
|
||||||
|
return $this->json(["message" => 'OK']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function markSeen($id)
|
||||||
|
{
|
||||||
|
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
|
||||||
|
$em = $this->getDoctrine()->getManager();
|
||||||
|
$user = $this->getUser();
|
||||||
|
$notif = $em->getRepository(Notification::class)->find($id);
|
||||||
|
|
||||||
|
if (!$notif)
|
||||||
|
throw $this->createNotFoundException('Notification not found');
|
||||||
|
|
||||||
|
if ($notif->getUser() != $user)
|
||||||
|
throw $this->createAccessDeniedException();
|
||||||
|
|
||||||
|
$notif->setSeenAt(new \DateTime());
|
||||||
|
|
||||||
|
$em->persist($notif);
|
||||||
|
$em->flush();
|
||||||
|
|
||||||
|
return $this->json(["message" => 'OK']);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test()
|
||||||
|
{
|
||||||
|
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
|
||||||
|
$user = $this->getUser();
|
||||||
|
$notifssrv = $this->get('bluesquare.notifications_bundle.notifssrv');
|
||||||
|
|
||||||
|
$notif = new Notification();
|
||||||
|
$notif->setTitle("Bonjour");
|
||||||
|
$notif->setDescription("Skippy vous attend dans son antre");
|
||||||
|
$notif->setData("le_nom_de_la_route_en_react");
|
||||||
|
|
||||||
|
$users = [$user]; // Peut contenir plein d'users
|
||||||
|
$notifssrv->notifyUsers($users, $notif);
|
||||||
|
|
||||||
|
return $this->json(["message" => 'OK']);
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,3 +1,18 @@
|
||||||
bluesquare_notifications_bundle_notifications:
|
bluesquare_notifications_bundle_notifications_get:
|
||||||
path: /my-user
|
path: /get
|
||||||
controller: Bluesquare\NotificationsBundle\Controller\MainController::myUser
|
controller: Bluesquare\NotificationsBundle\Controller\MainController::getAll
|
||||||
|
methods: [GET]
|
||||||
|
|
||||||
|
bluesquare_notifications_bundle_notifications_delete:
|
||||||
|
path: /delete/{id}
|
||||||
|
controller: Bluesquare\NotificationsBundle\Controller\MainController::delete
|
||||||
|
methods: [DELETE]
|
||||||
|
requirements:
|
||||||
|
id: '\d+'
|
||||||
|
|
||||||
|
bluesquare_notifications_bundle_notifications_mark_seen:
|
||||||
|
path: /mark-seen/{id}
|
||||||
|
controller: Bluesquare\NotificationsBundle\Controller\MainController::markSeen
|
||||||
|
methods: [POST]
|
||||||
|
requirements:
|
||||||
|
id: '\d+'
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
bluesquare_notifications_bundle_notifications_test:
|
||||||
|
path: /add-dev
|
||||||
|
controller: Bluesquare\NotificationsBundle\Controller\MainController::test
|
17
README.md
17
README.md
|
@ -6,7 +6,7 @@ Ajout de notifications pour les users (backend seulement)
|
||||||
## Restrictions
|
## Restrictions
|
||||||
|
|
||||||
Votre classe User doit absoluement être dans le namespace \App\Entity et s'appeler User, soit etre
|
Votre classe User doit absoluement être dans le namespace \App\Entity et s'appeler User, soit etre
|
||||||
\App\Entity\User.
|
`\App\Entity\User\`.
|
||||||
|
|
||||||
## Routes:
|
## Routes:
|
||||||
|
|
||||||
|
@ -18,17 +18,28 @@ notifications:
|
||||||
resource: '@NotificationsBundle/Resources/config/routes.yaml'
|
resource: '@NotificationsBundle/Resources/config/routes.yaml'
|
||||||
```
|
```
|
||||||
|
|
||||||
à votre config/routes.yaml
|
à votre `config/routes.yaml`
|
||||||
|
|
||||||
|
Il existe aussi le fichier `routes_dev.yaml` qui ajoute le endpoint à `/add-dev` qui permet
|
||||||
|
d'ajouter une notification de test à l'utilisateur courant.
|
||||||
|
|
||||||
Pour créer des notifs, il faut utiliser le service. Effectivement on ne veut pas permettre
|
Pour créer des notifs, il faut utiliser le service. Effectivement on ne veut pas permettre
|
||||||
aux clients de spammer les routes de notifications ou lire les notifs de toute le monde.
|
aux clients de spammer les routes de notifications ou lire les notifs de toute le monde.
|
||||||
Vous pouvez ajouter des routes dans votre application pour plus de flexibilité.
|
Vous pouvez ajouter des routes dans votre application pour plus de flexibilité.
|
||||||
|
|
||||||
|
|
||||||
* **GET** /notifications/my-user
|
* **GET** /get
|
||||||
|
|
||||||
Récupère toutes les notifications de l'utilisateur courant.
|
Récupère toutes les notifications de l'utilisateur courant.
|
||||||
|
|
||||||
|
* **DELETE** /delete/{id}
|
||||||
|
|
||||||
|
Supprime la notification à l'id indiqué si elle appartient à l'user courant.
|
||||||
|
|
||||||
|
* **POST** /mark-seen/{id}
|
||||||
|
|
||||||
|
Marque la notifiquation à l'id indiqué comme lue si elle appartient à l'user courant.
|
||||||
|
|
||||||
## Service
|
## Service
|
||||||
|
|
||||||
La classe est `NotificationsService`. Toutes les méthodes sont commentées, veuillez vous
|
La classe est `NotificationsService`. Toutes les méthodes sont commentées, veuillez vous
|
||||||
|
|
Loading…
Reference in New Issue