Refactor Talk and Gestion services to use user identifiers for talk room creation and notifications

This commit is contained in:
Narindra ezway 2025-03-12 15:29:47 +03:00
parent 903eed7cb9
commit 1727db1cc2
3 changed files with 36 additions and 31 deletions

View File

@ -153,7 +153,7 @@ class TalkDb {
$rooms = $this->execSQLNoJsonReturn( $rooms = $this->execSQLNoJsonReturn(
$sql, $sql,
[$names['createdByUser'],$names['createdByAdmin']]); [$names['target'],$names['sender']]);
if(!empty($rooms)){ if(!empty($rooms)){
return $rooms[0]; return $rooms[0];
@ -161,13 +161,13 @@ class TalkDb {
return null; return null;
} }
public function createDevisTalkRoomAndReturnDevisTalkRoom($idNextCloud,$token){ public function createDevisTalkRoomAndReturnDevisTalkRoom($targetUser,$senderUser,$token){
$roomName = '["'.$idNextCloud.'","'.BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD.'"]'; $roomName = '["'.$targetUser.'","'.$senderUser.'"]';
$this->createDevisTalkRoom($roomName,$token); $this->createDevisTalkRoom($roomName,$token);
$room = $this->getDevisTalkRoomByName($roomName); $room = $this->getDevisTalkRoomByName($roomName);
$attendees = [ $attendees = [
$idNextCloud, $targetUser,
BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD $senderUser
]; ];
$this->createDevisTalkRoomAttendeesByActors($attendees,$room['id']); $this->createDevisTalkRoomAttendeesByActors($attendees,$room['id']);
return $room; return $room;

View File

@ -37,6 +37,7 @@ use OCA\Gestion\Service\Order\OrderPdfService;
use OCP\DB\Exception; use OCP\DB\Exception;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use OCA\Gestion\Helpers\VCalendarHelpers; use OCA\Gestion\Helpers\VCalendarHelpers;
use OCP\IUserSession;
class GestionService { class GestionService {
/** @var Bdd */ /** @var Bdd */
@ -53,19 +54,27 @@ class GestionService {
private $orderPdfService; private $orderPdfService;
private $devisPdfService; private $devisPdfService;
private $userSession;
private string $userConnectedUuid;
public function __construct( public function __construct(
Bdd $gestionBdd, Bdd $gestionBdd,
OrderBdd $orderBdd, OrderBdd $orderBdd,
LoggerInterface $logger, LoggerInterface $logger,
OrderPdfService $orderPdfService, OrderPdfService $orderPdfService,
DevisPdfService $devisPdfService, DevisPdfService $devisPdfService,
TalkService $talkService) { TalkService $talkService,
IUserSession $userSession
) {
$this->orderBdd = $orderBdd; $this->orderBdd = $orderBdd;
$this->logger = $logger; $this->logger = $logger;
$this->gestionBdd = $gestionBdd; $this->gestionBdd = $gestionBdd;
$this->orderPdfService = $orderPdfService; $this->orderPdfService = $orderPdfService;
$this->devisPdfService = $devisPdfService; $this->devisPdfService = $devisPdfService;
$this->talkService = $talkService; $this->talkService = $talkService;
$this->userSession = $userSession;
$this->userConnectedUuid = $userSession->getUser()?->getUID() ?? BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD;
} }
private function GetCalendarSummaryFromVCalendarString(string $vCalendarString): string private function GetCalendarSummaryFromVCalendarString(string $vCalendarString): string
@ -194,15 +203,13 @@ class GestionService {
$order = $this->orderBdd->getOrderByDevisId($devisId); $order = $this->orderBdd->getOrderByDevisId($devisId);
$this->logger->debug(json_encode($order)); $this->logger->debug(json_encode($order));
if($order != null){ if($order != null){
$this->orderPdfService->generateOrderPdfByOrderId($order['id'],BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD); $this->orderPdfService->generateOrderPdfByOrderId($order['id'],$this->userConnectedUuid);
$this->orderPdfService->generateOrderPdfByOrderId($order['id'],BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD);
} }
} }
} }
$devisTalkMessage = $this->gestionBdd->getDevisTalkRoomMessage($devisId,$userName); $devisTalkMessage = $this->gestionBdd->getDevisTalkRoomMessage($devisId,$userName);
$this->talkService->sendDevisTalkNotifications($devisTalkMessage,$userName); $this->talkService->sendDevisTalkNotifications($devisTalkMessage,$userName,$this->userConnectedUuid);
$this->devisPdfService->generateDevisPdfByDevisId($devisId,BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD); $this->devisPdfService->generateDevisPdfByDevisId($devisId,$this->userConnectedUuid);
$this->devisPdfService->generateDevisPdfByDevisId($devisId,BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD);
$this->gestionBdd->createDevisTrajetFromVCalendar($devisId,$userName); $this->gestionBdd->createDevisTrajetFromVCalendar($devisId,$userName);
} }
catch(Exception $e){ catch(Exception $e){
@ -321,10 +328,9 @@ class GestionService {
$this->UpdateDevisDataByVCalendarString($devis,$vCalendarString); $this->UpdateDevisDataByVCalendarString($devis,$vCalendarString);
$userName = $this->GetThanatoNameFromVCalendarString($vCalendarString); $userName = $this->GetThanatoNameFromVCalendarString($vCalendarString);
$devisTalkMessage = $this->gestionBdd->getDevisTalkRoomMessage($devis['id'],$userName); $devisTalkMessage = $this->gestionBdd->getDevisTalkRoomMessage($devis['id'],$userName);
$this->talkService->sendDevisTalkNotifications($devisTalkMessage,$userName); $this->talkService->sendDevisTalkNotifications($devisTalkMessage,$userName,$this->userConnectedUuid);
} }
$this->devisPdfService->generateDevisPdfByDevisId($devis['id'],BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD); $this->devisPdfService->generateDevisPdfByDevisId($devis['id'],$this->userConnectedUuid);
$this->devisPdfService->generateDevisPdfByDevisId($devis['id'],BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD);
return true; return true;
} }
catch(Exception $e){ catch(Exception $e){

View File

@ -48,12 +48,12 @@ class TalkService {
$this->talkDb = $talkDb; $this->talkDb = $talkDb;
} }
private function getUserDevisTalkRoomNames($idNextCloud){ private function getUserDevisTalkRoomNames($target ,$senderUser){
$roomNamesCreatedByUser = '["'.$idNextCloud.'","'.BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD.'"]'; $roomNamesCreatedBytargetUser = '["'.$target.'","'.$senderUser.'"]';
$roomNamesCreatedByAdmin = '["'.BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD.'","'.$idNextCloud.'"]'; $roomNamesCreatedBySenderUser = '["'.$senderUser.'","'.$target.'"]';
return [ return [
"createdByUser" => $roomNamesCreatedByUser, "target" => $roomNamesCreatedBytargetUser,
"createdByAdmin" => $roomNamesCreatedByAdmin "sender" => $roomNamesCreatedBySenderUser
]; ];
} }
@ -68,35 +68,34 @@ class TalkService {
return $randomToken; return $randomToken;
} }
private function getNotificationsSubjectsParameters(){ private function getNotificationsSubjectsParameters(string $senderUser){
return '{"userType":"users","userId":"'.BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD.'"}'; return '{"userType":"users","userId":"'.$senderUser.'"}';
} }
private function getNotificationsMessageParameters($commentId){ private function getNotificationsMessageParameters($commentId){
return '{"commentId":"'.$commentId.'"}'; return '{"commentId":"'.$commentId.'"}';
} }
public function sendDevisTalkNotifications(string $message,string $idNextcloud){ public function sendDevisTalkNotifications(string $message,string $targetUser ,string $senderUser){
if($idNextcloud === BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD || $idNextcloud === BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD){ $senderAndTargetIsTheSameUser = $targetUser == $senderUser;
return true; $senderUser = $senderAndTargetIsTheSameUser ? BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD : $senderUser;
} $roomNames = $this->getUserDevisTalkRoomNames($targetUser , $senderUser);
$roomNames = $this->getUserDevisTalkRoomNames($idNextcloud);
$room = $this->talkDb->getDevisTalkRoomByNames($roomNames); $room = $this->talkDb->getDevisTalkRoomByNames($roomNames);
if($room == null){ if($room == null){
$roomToken = $this->generateTalkRandomToken(); $roomToken = $this->generateTalkRandomToken();
$room = $this->talkDb->createDevisTalkRoomAndReturnDevisTalkRoom($idNextcloud,$roomToken); $room = $this->talkDb->createDevisTalkRoomAndReturnDevisTalkRoom($targetUser,$senderUser, $roomToken);
$initialMessage = $this->talkDb->setDevisTalkRoomInitialMessageAndReturnMessage($room['id'],$idNextcloud); $initialMessage = $this->talkDb->setDevisTalkRoomInitialMessageAndReturnMessage($room['id'],$targetUser);
} }
else{ else{
$roomToken = $room['token']; $roomToken = $room['token'];
} }
$devisMessage = $this->talkDb->createDevisTalkRoomMessageAndReturnMessage($room['id'],$message); $devisMessage = $this->talkDb->createDevisTalkRoomMessageAndReturnMessage($room['id'],$message);
$this->talkDb->updateRoomLastMessage($room['id'],$devisMessage['id']); $this->talkDb->updateRoomLastMessage($room['id'],$devisMessage['id']);
$this->talkDb->setAttendeeLastReadMessage($room['id'],$devisMessage['id'],BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD); $this->talkDb->setAttendeeLastReadMessage($room['id'],$devisMessage['id'],$senderUser);
//send notifications //send notifications
$notificationsSubjectsParameters = $this->getNotificationsSubjectsParameters(); $notificationsSubjectsParameters = $this->getNotificationsSubjectsParameters($senderUser);
$notificationsMessageParameters = $this->getNotificationsMessageParameters($devisMessage['id']); $notificationsMessageParameters = $this->getNotificationsMessageParameters($devisMessage['id']);
$this->talkDb->sendAttendeeNotifications($idNextcloud,$roomToken,$notificationsSubjectsParameters,$notificationsMessageParameters); $this->talkDb->sendAttendeeNotifications($targetUser,$roomToken,$notificationsSubjectsParameters,$notificationsMessageParameters);
return true; return true;
} }