From aa07c84fb0e3a683742f944a9f6d961c47bbe4fc Mon Sep 17 00:00:00 2001 From: Babak Alizadeh Date: Tue, 31 Dec 2024 14:56:52 +0000 Subject: [PATCH] add users online --- .../src/Controller/AdminController.php | 18 +++++++++++++ .../src/Controller/BusinessController.php | 2 +- .../Controller/NotificationsController.php | 13 +++++++++- hesabixCore/src/Entity/UserToken.php | 15 +++++++++++ .../src/Repository/UserTokenRepository.php | 25 ++++++++++--------- 5 files changed, 59 insertions(+), 14 deletions(-) diff --git a/hesabixCore/src/Controller/AdminController.php b/hesabixCore/src/Controller/AdminController.php index 2010c80..4fcb8fb 100644 --- a/hesabixCore/src/Controller/AdminController.php +++ b/hesabixCore/src/Controller/AdminController.php @@ -14,6 +14,7 @@ use App\Entity\Registry; use App\Entity\Settings; use App\Entity\StoreroomTicket; use App\Entity\User; +use App\Entity\UserToken; use App\Entity\WalletTransaction; use App\Service\Extractor; use App\Service\Jdate; @@ -581,6 +582,23 @@ class AdminController extends AbstractController return $this->json($extractor->operationSuccess(array_reverse($temps))); } + #[Route('/api/admin/onlineusers/list', name: 'api_admin_online_users_list')] + public function api_admin_online_users_list(Extractor $extractor,Jdate $jdate, EntityManagerInterface $entityManager): JsonResponse + { + $tokens = $entityManager->getRepository(UserToken::class)->getOnlines(120); + $res = []; + foreach($tokens as $token){ + $res[] = [ + 'name' => $token->getUser()->getFullName(), + 'email'=>$token->getUser()->getEmail(), + 'mobile'=>$token->getUser()->getMobile(), + 'lastActive'=>$token->getLastActive() - time(), + ]; + } + return $this->json($res); + } + + /** * @throws Exception */ diff --git a/hesabixCore/src/Controller/BusinessController.php b/hesabixCore/src/Controller/BusinessController.php index c0fc632..6866b65 100644 --- a/hesabixCore/src/Controller/BusinessController.php +++ b/hesabixCore/src/Controller/BusinessController.php @@ -218,7 +218,7 @@ class BusinessController extends AbstractController } } if (array_key_exists('profitCalcType', $params)) { - if ($params['profitCalcType'] == 'lis' || $params['profitCalcType'] == 'avgis') { + if ($params['profitCalcType'] == 'lis' || $params['profitCalcType'] == 'avgis' || $params['profitCalcType'] == 'simple') { $business->setProfitCalcType($params['profitCalcType']); } } else { diff --git a/hesabixCore/src/Controller/NotificationsController.php b/hesabixCore/src/Controller/NotificationsController.php index 7a06580..3986e48 100644 --- a/hesabixCore/src/Controller/NotificationsController.php +++ b/hesabixCore/src/Controller/NotificationsController.php @@ -4,6 +4,7 @@ namespace App\Controller; use App\Entity\Business; use App\Entity\Notification; +use App\Entity\UserToken; use App\Service\Access; use App\Service\Jdate; use App\Service\Log; @@ -11,13 +12,14 @@ use App\Service\twigFunctions; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; +use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; class NotificationsController extends AbstractController { #[Route('/api/notifications/list/{type}', name: 'api_notification_list')] - public function api_notification_list(twigFunctions $twigFunctions,Access $access, Jdate $jdate, EntityManagerInterface $entityManager,String $type = 'all'): JsonResponse + public function api_notification_list(twigFunctions $twigFunctions,Access $access,Request $request, Jdate $jdate, EntityManagerInterface $entityManager,String $type = 'all'): JsonResponse { if(!$this->getUser()) throw $this->createAccessDeniedException('lot loged in'); @@ -62,6 +64,15 @@ class NotificationsController extends AbstractController $temp['id'] = $item->getId(); $temps[] = $temp; } + + $userToken = $entityManager->getRepository(UserToken::class)->findOneBy([ + 'token'=> $request->headers->get('X-AUTH-TOKEN') + ]); + if($userToken){ + $userToken->setLastActive(time()); + $entityManager->persist($userToken); + $entityManager->flush(); + } return $this->json($temps); } diff --git a/hesabixCore/src/Entity/UserToken.php b/hesabixCore/src/Entity/UserToken.php index eb3d8d3..f7935da 100644 --- a/hesabixCore/src/Entity/UserToken.php +++ b/hesabixCore/src/Entity/UserToken.php @@ -23,6 +23,9 @@ class UserToken #[ORM\Column(length: 255, nullable: true)] private ?string $tokenID = null; + #[ORM\Column(length: 40, nullable: true)] + private ?string $lastActive = null; + public function getId(): ?int { return $this->id; @@ -63,4 +66,16 @@ class UserToken return $this; } + + public function getLastActive(): ?string + { + return $this->lastActive; + } + + public function setLastActive(?string $lastActive): static + { + $this->lastActive = $lastActive; + + return $this; + } } diff --git a/hesabixCore/src/Repository/UserTokenRepository.php b/hesabixCore/src/Repository/UserTokenRepository.php index 2d53ea8..8c54572 100644 --- a/hesabixCore/src/Repository/UserTokenRepository.php +++ b/hesabixCore/src/Repository/UserTokenRepository.php @@ -43,7 +43,7 @@ class UserTokenRepository extends ServiceEntityRepository /** * @throws NonUniqueResultException */ - public function findByApiToken($value): UserToken | null + public function findByApiToken($value): UserToken|null { return $this->createQueryBuilder('u') ->andWhere('u.token = :val') @@ -52,13 +52,13 @@ class UserTokenRepository extends ServiceEntityRepository ->setMaxResults(10) ->getQuery() ->getOneOrNullResult() - ; + ; } /** * @throws NonUniqueResultException */ - public function findByApiTokenID($value): UserToken | null + public function findByApiTokenID($value): UserToken|null { return $this->createQueryBuilder('u') ->andWhere('u.tokenID = :val') @@ -67,13 +67,14 @@ class UserTokenRepository extends ServiceEntityRepository ->getQuery() ->getOneOrNullResult(); } -// public function findOneBySomeField($value): ?UserToken -// { -// return $this->createQueryBuilder('u') -// ->andWhere('u.exampleField = :val') -// ->setParameter('val', $value) -// ->getQuery() -// ->getOneOrNullResult() -// ; -// } + + public function getOnlines($maxTime = 120): ?array + { + return $this->createQueryBuilder('u') + ->andWhere('u.lastActive > :maxTime') + ->setParameter('maxTime', time() - $maxTime) + ->getQuery() + ->getResult() + ; + } }