From f91b5b871009f99056d8292bde0199583e5c79bd Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Thu, 25 Dec 2025 18:54:06 +0330 Subject: [PATCH] fix bug pager created notification --- PAGER_SOCKET_TEST.md | 148 ------------------ .../pager/listeners/notification.listeners.ts | 10 +- 2 files changed, 7 insertions(+), 151 deletions(-) delete mode 100644 PAGER_SOCKET_TEST.md diff --git a/PAGER_SOCKET_TEST.md b/PAGER_SOCKET_TEST.md deleted file mode 100644 index eaa1b0d..0000000 --- a/PAGER_SOCKET_TEST.md +++ /dev/null @@ -1,148 +0,0 @@ -# Pager Socket.IO Testing Guide - -## Quick Start - -1. **Start your NestJS server:** - ```bash - npm run start:dev - ``` - -2. **Open the test page:** - - Open `test-pager-socket.html` in your web browser - - Or serve it via a simple HTTP server: - ```bash - # Using Python - python3 -m http.server 8080 - # Then open http://localhost:8080/test-pager-socket.html - - # Using Node.js (if you have http-server installed) - npx http-server -p 8080 - ``` - -## Testing Scenarios - -### Scenario 1: Test as Restaurant Admin/Staff - -1. **Get your admin JWT token:** - - Login as admin via your API to get the JWT token - - Example: - ```bash - curl -X POST http://localhost:4000/admin/auth/login \ - -H "Content-Type: application/json" \ - -d '{ - "email": "admin@example.com", - "password": "password" - }' - ``` - - Copy the `accessToken` from the response - -2. **Connect to the server:** - - Enter server URL: `http://localhost:4000` - - Enter your admin JWT token in the "Admin Token" field - - Click "Connect" - -3. **Join restaurant room:** - - Select "Restaurant (Admin/Staff)" from User Type - - Click "Join Room" - - The restaurant ID will be automatically extracted from your token - -3. **Create a pager request (via API):** - ```bash - curl -X POST http://localhost:4000/public/pager \ - -H "Content-Type: application/json" \ - -H "X-Slug: your-restaurant-slug" \ - -d '{ - "tableNumber": "5", - "message": "Need assistance" - }' - ``` - -4. **Observe the event:** - - You should see `pager:created` event in the Events Log - -### Scenario 2: Test as Public User - -1. **Create a pager request first (to get cookie ID):** - ```bash - curl -X POST http://localhost:4000/public/pager \ - -H "Content-Type: application/json" \ - -H "X-Slug: your-restaurant-slug" \ - -d '{ - "tableNumber": "3", - "message": "Need water" - }' \ - -c cookies.txt - ``` - -2. **Get the cookie ID:** - - Check the response or cookies.txt file for `pagerId` cookie value - -3. **Connect and join session:** - - Connect to the server - - Select "Session (Public User)" from User Type - - Enter the cookie ID from step 2 - - Click "Join Room" - -4. **Update pager status (via API as admin):** - ```bash - curl -X PATCH http://localhost:4000/admin/pager/{pagerId}/status \ - -H "Content-Type: application/json" \ - -H "Authorization: Bearer YOUR_ADMIN_TOKEN" \ - -d '{ - "status": "acknowledged" - }' - ``` - -5. **Observe the event:** - - You should see `pager:status:updated` event in the Events Log - -## Socket Events Reference - -### Client → Server Events - -| Event | Payload | Description | -|-------|---------|-------------| -| `join:restaurant` | `{}` (empty, restId extracted from token) | Join restaurant room for admin/staff. **Requires authentication via JWT token in connection auth** | -| `join:session` | `{ cookieId: string }` | Join session room for public user | -| `leave:room` | `{ room: string }` | Leave a specific room | - -**Note:** For `join:restaurant`, the restaurant ID is automatically extracted from the authenticated admin's JWT token. You must provide the token when connecting: - -```javascript -const socket = io('http://localhost:4000/pager', { - auth: { - token: 'your-jwt-token-here' // or 'Bearer your-jwt-token-here' - } -}); -``` - -### Server → Client Events - -| Event | Payload | Description | -|-------|---------|-------------| -| `pager:created` | `{ pager: {...} }` | New pager request created | -| `pager:status:updated` | `{ pager: {...} }` | Pager status updated | -| `joined` | `{ room: string, message: string }` | Successfully joined a room | -| `left` | `{ room: string, message: string }` | Successfully left a room | -| `error` | `{ message: string }` | Error occurred | - -## Room Names - -- **Restaurant Room:** `restaurant:{restId}` -- **Session Room:** `cookie:{cookieId}` - -## Testing Tips - -1. **Open multiple browser tabs/windows** to simulate multiple clients -2. **Use browser DevTools** to inspect WebSocket connections -3. **Check server logs** to see gateway activity -4. **Test reconnection** by disconnecting and reconnecting -5. **Test room isolation** by joining different rooms in different tabs - -## Troubleshooting - -- **Connection fails:** Check if server is running on the correct port -- **No events received:** Verify you've joined the correct room -- **CORS errors:** Ensure CORS is enabled in your NestJS app (already configured in gateway) -- **Events not showing:** Check browser console for errors - diff --git a/src/modules/pager/listeners/notification.listeners.ts b/src/modules/pager/listeners/notification.listeners.ts index 1ae8bfd..58921db 100644 --- a/src/modules/pager/listeners/notification.listeners.ts +++ b/src/modules/pager/listeners/notification.listeners.ts @@ -5,15 +5,19 @@ import { PagerCreatedEvent } from '../events/pager.events'; import { Permission } from 'src/common/enums/permission.enum'; import { NotifTitleEnum } from 'src/modules/notifications/interfaces/notification.interface'; import { NotificationService } from 'src/modules/notifications/services/notification.service'; +import { ConfigService } from '@nestjs/config'; @Injectable() export class PagerListeners { private readonly logger = new Logger(PagerListeners.name); - + private readonly smsPatternPagerCreated: string constructor( private readonly adminService: AdminRepository, private readonly notificationService: NotificationService, - ) {} + private readonly configService: ConfigService, + ) { + this.smsPatternPagerCreated = this.configService.get('SMS_PATTERN_PAGER_CREATED') ?? '123'; + } @OnEvent(PagerCreatedEvent.name) async handlePagerCreated(event: PagerCreatedEvent) { @@ -30,7 +34,7 @@ export class PagerListeners { title: NotifTitleEnum.PAGER_CREATED, content: `میز شماره ${event.tableNumber} پیج جدیدی انجام داد`, sms: { - templateId: '1234567890', + templateId: this.smsPatternPagerCreated, parameters: { tableNumber: event.tableNumber.toString(), },