{
  "event": [
    {
      "listen": "prerequest",
      "script": {
        "type": "text/javascript",
        "exec": [
          "const expired = (t) => {",
          "  if (!t) return true;",
          "  try {",
          "    const p = JSON.parse(atob(t.split('.')[1].replace(/-/g,'+').replace(/_/g,'/')));",
          "    return !p.exp || (p.exp * 1000) < (Date.now() + 60000);   // refresh a minute early",
          "  } catch (e) { return true; }",
          "};",
          "",
          "const logins = [",
          "  { v: 'token',      user: pm.collectionVariables.get('userName') },",
          "  { v: 'staffToken', user: pm.collectionVariables.get('staffUserName') },",
          "  { v: 'regToken',   user: pm.collectionVariables.get('regUserName') },",
          "];",
          "",
          "const need = logins.filter(l => l.user && expired(pm.collectionVariables.get(l.v)));",
          "if (need.length) {",
          "  need.forEach(l => {",
          "    pm.sendRequest({",
          "      url: pm.collectionVariables.get('baseUrl') + '/auth/login',",
          "      method: 'POST',",
          "      header: { 'Content-Type': 'application/json' },",
          "      body: { mode: 'raw', raw: JSON.stringify({ UserName: l.user, Password: pm.collectionVariables.get('password') || 'demo' }) },",
          "    }, (err, res) => {",
          "      if (err) { console.log('auto-login failed for ' + l.user, err); return; }",
          "      const j = res.json();",
          "      if (j.result !== 'Ok') { console.log('auto-login rejected for ' + l.user, j.details); return; }",
          "      const u = j.UserMainData || {};",
          "      pm.collectionVariables.set(l.v, (j.token && j.token.data) || '');",
          "      if (l.v === 'token') {",
          "        pm.collectionVariables.set('edStudId', u.ED_STUD_ID || '');",
          "        pm.collectionVariables.set('seUserId', u.SE_USER_ID || '');",
          "        pm.collectionVariables.set('seUserAccntId', u.SE_USER_ACCNT_ID || '');",
          "        pm.collectionVariables.set('facultyId', u.AS_FACULTY_INFO_ID || '');",
          "        pm.collectionVariables.set('acadYearId', u.ED_ACAD_YEAR_ID || '');",
          "        pm.collectionVariables.set('semesterId', u.ED_CODE_SEMESTER_ID || '');",
          "      } else if (l.v === 'regToken') {",
          "        pm.collectionVariables.set('regStudId', u.ED_STUD_ID || '');",
          "      } else {",
          "        pm.collectionVariables.set('staffId', u.SA_STAFF_MEMBER_ID || u.ED_STUD_ID || '');",
          "        pm.collectionVariables.set('staffSeUserId', u.SE_USER_ID || '');",
          "      }",
          "      console.log('auto-login ok: ' + l.user);",
          "    });",
          "  });",
          "}"
        ]
      }
    }
  ],
  "info": {
    "name": "الإشعارات · Notifications",
    "description": "# الإشعارات — Notifications\n\nصندوق الإشعارات: المقروء وغير المقروء، مع إمكانية التعليم كمقروء أو الإسقاط.\n\n---\n\n**إزاي تشغّله:** شغّل `0) Login` الأول — هيملأ التوكن وكل الـ ids لوحده، وبعدها كل الريكوستات تشتغل على طول.\n\n**الحالة:** 7 شغال · 0 شغال بدون داتا · 0 ناقص",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{token}}",
        "type": "string"
      }
    ]
  },
  "item": [
    {
      "name": "0) Login (run me first)",
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "// Stores the identity + token so every other request just works.",
              "const j = pm.response.json();",
              "if (j.result === \"Ok\") {",
              "    const u = j.UserMainData;",
              "    pm.collectionVariables.set(\"token\",        j.token.data);",
              "    pm.collectionVariables.set(\"edStudId\",     u.ED_STUD_ID);",
              "    pm.collectionVariables.set(\"staffId\",      u.SA_STAFF_MEMBER_ID);",
              "    pm.collectionVariables.set(\"seUserId\",     u.SE_USER_ID);",
              "    pm.collectionVariables.set(\"seUserAccntId\",u.SE_USER_ACCNT_ID);",
              "    pm.collectionVariables.set(\"facultyId\",    u.AS_FACULTY_INFO_ID);",
              "    pm.collectionVariables.set(\"acadYearId\",   u.ED_ACAD_YEAR_ID);",
              "    pm.collectionVariables.set(\"semesterId\",   u.ED_CODE_SEMESTER_ID);",
              "    console.log(\"signed in:\", u.ED_STUD_ID, u.YEAR_DESC_EN, u.SEM_DESC_EN);",
              "}",
              "pm.test(\"login ok\", () => pm.expect(j.result).to.eql(\"Ok\"));"
            ]
          }
        }
      ],
      "request": {
        "method": "POST",
        "auth": {
          "type": "noauth"
        },
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\n  \"UserName\": \"{{userName}}\",\n  \"Password\": \"{{password}}\"\n}"
        },
        "url": {
          "raw": "{{baseUrl}}/auth/login",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "auth",
            "login"
          ]
        },
        "description": "يخزّن التوكن وكل الـ ids في متغيرات الكوليكشن. **شغّله الأول.**"
      }
    },
    {
      "name": "0b) Login as STAFF (for the 👨‍🏫 requests)",
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "const j = pm.response.json();",
              "pm.test('staff login ok', () => pm.expect(j.result).to.eql('Ok'));",
              "const u = j.UserMainData || {};",
              "pm.collectionVariables.set('staffToken', (j.token && j.token.data) || '');",
              "pm.collectionVariables.set('staffId', u.SA_STAFF_MEMBER_ID || u.ED_STUD_ID || '');",
              "pm.collectionVariables.set('staffSeUserId', u.SE_USER_ID || '');",
              "pm.test('is NOT a student', () => pm.expect(u.IsStudent).to.eql(false));"
            ]
          }
        }
      ],
      "request": {
        "method": "POST",
        "auth": {
          "type": "noauth"
        },
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\n  \"UserName\": \"{{staffUserName}}\",\n  \"Password\": \"{{password}}\"\n}"
        },
        "url": {
          "raw": "{{baseUrl}}/auth/login",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "auth",
            "login"
          ]
        },
        "description": "نفس إندبوينت الدخول بحساب دكتور. بيخزّن **staffToken** و**staffId**. الريكويستات اللي عليها 👨‍🏫 بتستخدمه."
      }
    },
    {
      "name": "🎓  POST students/GetMobileNotifications",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          },
          {
            "key": "Authorization",
            "value": "Bearer {{token}}"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\n  \"SE_USER_ACCNT_ID\": \"{{seUserAccntId}}\"\n}"
        },
        "url": {
          "raw": "{{baseUrl}}/students/GetMobileNotifications",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "students",
            "GetMobileNotifications"
          ]
        },
        "description": "**✅ شغال بداتا حقيقية**\nالصندوق — فيه رسايل دلوقتي\n\n> بحساب **طالب** — شغّل «0) Login» الأول."
      },
      "response": [
        {
          "name": "رد حقيقي — فيه داتا · 200",
          "originalRequest": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"SE_USER_ACCNT_ID\": \"{{seUserAccntId}}\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/students/GetMobileNotifications",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "students",
                "GetMobileNotifications"
              ]
            },
            "description": "**✅ شغال بداتا حقيقية**\nالصندوق — فيه رسايل دلوقتي\n\n> بحساب **طالب** — شغّل «0) Login» الأول."
          },
          "status": "OK",
          "code": 200,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            }
          ],
          "cookie": [],
          "body": "{\n  \"result\": \"Ok\",\n  \"details\": \"NO ERROR\",\n  \"data\": [\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-05T12:03:40.923\",\n      \"SV_USER_MESSAGE_ID\": 30983,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-05T12:01:26.11\",\n      \"SV_USER_MESSAGE_ID\": 30982,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-05T11:59:50.157\",\n      \"SV_USER_MESSAGE_ID\": 30981,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-05T11:52:20.377\",\n      \"SV_USER_MESSAGE_ID\": 30980,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-05T11:38:59.15\",\n      \"SV_USER_MESSAGE_ID\": 30979,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-05T11:32:19.483\",\n      \"SV_USER_MESSAGE_ID\": 30978,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-05T10:37:40.297\",\n      \"SV_USER_MESSAGE_ID\": 30977,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-05T10:35:11.013\",\n      \"SV_USER_MESSAGE_ID\": 30976,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-04T18:30:59.65\",\n      \"SV_USER_MESSAGE_ID\": 30975,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-04T18:25:32.107\",\n      \"SV_USER_MESSAGE_ID\": 30974,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-04T17:34:50.443\",\n      \"SV_USER_MESSAGE_ID\": 30973,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-04T17:22:30.797\",\n      \"SV_USER_MESSAGE_ID\": 30972,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-04T16:47:05.3\",\n      \"SV_USER_MESSAGE_ID\": 30971,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-04T16:24:42.433\",\n      \"SV_USER_MESSAGE_ID\": 30970,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-04T16:03:34.24\",\n      \"SV_USER_MESSAGE_ID\": 30969,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-04T13:05:31.817\",\n      \"SV_USER_MESSAGE_ID\": 30968,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-04T12:58:44.077\",\n      \"SV_USER_MESSAGE_ID\": 30967,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-04T12:14:57.597\",\n      \"SV_USER_MESSAGE_ID\": 30966,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-04T12:12:26.957\",\n      \"SV_USER_MESSAGE_ID\": 30965,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-04T12:08:13.697\",\n      \"SV_USER_MESSAGE_ID\": 30964,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-04T12:04:02.923\",\n      \"SV_USER_MESSAGE_ID\": 30963,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-04T11:33:05.137\",\n      \"SV_USER_MESSAGE_ID\": 30962,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-04T10:52:36.337\",\n      \"SV_USER_MESSAGE_ID\": 30961,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-03T15:53:59.39\",\n      \"SV_USER_MESSAGE_ID\": 30960,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-03T14:02:40.25\",\n      \"SV_USER_MESSAGE_ID\": 30959,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your instalment is due.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-03T14:00:22.203\",\n      \"SV_USER_MESSAGE_ID\": 30958,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"القسط مستحق\",\n      \"MSG_SUBJECT\": \"تذكير بالرسوم\",\n      \"MSG_DATE\": \"2026-08-03T13:07:47.41\",\n      \"SV_USER_MESSAGE_ID\": 30957,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"القسط مستحق\",\n      \"MSG_SUBJECT\": \"تذكير بالرسوم\",\n      \"MSG_DATE\": \"2026-08-03T12:25:46.83\",\n      \"SV_USER_MESSAGE_ID\": 30956,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"القسط مستحق\",\n      \"MSG_SUBJECT\": \"تذكير بالرسوم\",\n      \"MSG_DATE\": \"2026-08-03T12:13:09.61\",\n      \"SV_USER_MESSAGE_ID\": 30955,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"القسط مستحق\",\n      \"MSG_SUBJECT\": \"تذكير بالرسوم\",\n      \"MSG_DATE\": \"2026-08-03T12:11:40.69\",\n      \"SV_USER_MESSAGE_ID\": 30954,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"القسط مستحق\",\n      \"MSG_SUBJECT\": \"تذكير بالرسوم\",\n      \"MSG_DATE\": \"2026-08-03T12:06:55.327\",\n      \"SV_USER_MESSAGE_ID\": 30953,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"القسط مستحق\",\n      \"MSG_SUBJECT\": \"تذكير بالرسوم\",\n      \"MSG_DATE\": \"2026-08-03T12:05:10.67\",\n      \"SV_USER_MESSAGE_ID\": 30952,\n      \"OPENED_FLG\": false\n    },\n    {\n      \"MSG_CONTENT\": \"Your spring instalment is due on 15 August.\",\n      \"MSG_SUBJECT\": \"Fees reminder\",\n      \"MSG_DATE\": \"2026-08-01T12:07:01.27\",\n      \"SV_USER_MESSAGE_ID\": 30951,\n      \"OPENED_FLG\": true\n    }\n  ]\n}"
        }
      ]
    },
    {
      "name": "🎓  POST students/SetReadedNotification",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          },
          {
            "key": "Authorization",
            "value": "Bearer {{token}}"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\n  \"SV_USER_MESSAGE_ID\": 1\n}"
        },
        "url": {
          "raw": "{{baseUrl}}/students/SetReadedNotification",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "students",
            "SetReadedNotification"
          ]
        },
        "description": "**✅ شغال بداتا حقيقية**\n✍️ تعليم كمقروء\n\n> بحساب **طالب** — شغّل «0) Login» الأول."
      },
      "response": [
        {
          "name": "رد حقيقي — فيه داتا · 200",
          "originalRequest": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"SV_USER_MESSAGE_ID\": 1\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/students/SetReadedNotification",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "students",
                "SetReadedNotification"
              ]
            },
            "description": "**✅ شغال بداتا حقيقية**\n✍️ تعليم كمقروء\n\n> بحساب **طالب** — شغّل «0) Login» الأول."
          },
          "status": "OK",
          "code": 200,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            }
          ],
          "cookie": [],
          "body": "{\n  \"result\": \"Ok\",\n  \"details\": \"NO ERROR\",\n  \"data\": \"Done\"\n}"
        }
      ]
    },
    {
      "name": "🎓  POST students/SetDeletedNotification",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          },
          {
            "key": "Authorization",
            "value": "Bearer {{token}}"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\n  \"SV_USER_MESSAGE_ID\": 1\n}"
        },
        "url": {
          "raw": "{{baseUrl}}/students/SetDeletedNotification",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "students",
            "SetDeletedNotification"
          ]
        },
        "description": "**✅ شغال بداتا حقيقية**\n✍️ حذف\n\n> بحساب **طالب** — شغّل «0) Login» الأول."
      },
      "response": [
        {
          "name": "رد حقيقي — فيه داتا · 200",
          "originalRequest": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"SV_USER_MESSAGE_ID\": 1\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/students/SetDeletedNotification",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "students",
                "SetDeletedNotification"
              ]
            },
            "description": "**✅ شغال بداتا حقيقية**\n✍️ حذف\n\n> بحساب **طالب** — شغّل «0) Login» الأول."
          },
          "status": "OK",
          "code": 200,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            }
          ],
          "cookie": [],
          "body": "{\n  \"result\": \"Ok\",\n  \"details\": \"NO ERROR\",\n  \"data\": \"Done\"\n}"
        }
      ]
    },
    {
      "name": "🎓  GET students/GetTokenHelp",
      "request": {
        "method": "GET",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{token}}"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/students/GetTokenHelp",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "students",
            "GetTokenHelp"
          ]
        },
        "description": "**✅ شغال بداتا حقيقية**\nأنواع الأجهزة واللغات\n\n> بحساب **طالب** — شغّل «0) Login» الأول."
      },
      "response": [
        {
          "name": "رد حقيقي — فيه داتا · 200",
          "originalRequest": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/students/GetTokenHelp",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "students",
                "GetTokenHelp"
              ]
            },
            "description": "**✅ شغال بداتا حقيقية**\nأنواع الأجهزة واللغات\n\n> بحساب **طالب** — شغّل «0) Login» الأول."
          },
          "status": "OK",
          "code": 200,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            }
          ],
          "cookie": [],
          "body": "{\n  \"result\": \"Ok\",\n  \"details\": \"NO ERROR\",\n  \"data\": {\n    \"DeviceTypes\": [\n      {\n        \"SV_CDE_DEVICE_TYPE_ID\": 1,\n        \"NameAr\": \"اندرويد\",\n        \"NameEn\": \"Android\"\n      },\n      {\n        \"SV_CDE_DEVICE_TYPE_ID\": 2,\n        \"NameAr\": \"اندرويد\",\n        \"NameEn\": \"Android\"\n      },\n      {\n        \"SV_CDE_DEVICE_TYPE_ID\": 3,\n        \"NameAr\": \"أيفون\",\n        \"NameEn\": \"IOS\"\n      },\n      {\n        \"SV_CDE_DEVICE_TYPE_ID\": 4,\n        \"NameAr\": \"أيفون\",\n        \"NameEn\": \"IOS\"\n      }\n    ],\n    \"Languages\": [\n      \"AR\",\n      \"EN\"\n    ]\n  }\n}"
        }
      ]
    },
    {
      "name": "🎓  POST students/SaveToken",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          },
          {
            "key": "Authorization",
            "value": "Bearer {{token}}"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\n  \"TOKEN\": \"<fcm-token>\",\n  \"SV_CDE_DEVICE_TYPE_ID\": 1,\n  \"Language\": \"AR\"\n}"
        },
        "url": {
          "raw": "{{baseUrl}}/students/SaveToken",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "students",
            "SaveToken"
          ]
        },
        "description": "**✅ شغال بداتا حقيقية**\nتسجيل توكن الإشعارات بعد كل لوجين — <span class=\"new\">جديد</span> صاحب الجهاز من اللوجين نفسه (<code>SE_USER_ID</code> في الـ body بيتجاهل). 1 = Android · 2 = iOS — <a href=\"#w3-tokens\">الدليل</a>\n\n> بحساب **طالب** — شغّل «0) Login» الأول."
      },
      "response": [
        {
          "name": "رد ناجح من غير داتا · 200",
          "originalRequest": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"TOKEN\": \"<fcm-token>\",\n  \"SV_CDE_DEVICE_TYPE_ID\": 1,\n  \"Language\": \"AR\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/students/SaveToken",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "students",
                "SaveToken"
              ]
            },
            "description": "**✅ شغال بداتا حقيقية**\nتسجيل توكن الإشعارات بعد كل لوجين — <span class=\"new\">جديد</span> صاحب الجهاز من اللوجين نفسه (<code>SE_USER_ID</code> في الـ body بيتجاهل). 1 = Android · 2 = iOS — <a href=\"#w3-tokens\">الدليل</a>\n\n> بحساب **طالب** — شغّل «0) Login» الأول."
          },
          "status": "OK",
          "code": 200,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            }
          ],
          "cookie": [],
          "body": "{\n  \"result\": \"Ok\",\n  \"details\": \"NO ERROR\"\n}"
        }
      ]
    },
    {
      "name": "👨‍🏫  POST academicstaff/SaveToken",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          },
          {
            "key": "Authorization",
            "value": "Bearer {{staffToken}}"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\n  \"TOKEN\": \"<FCM token>\",\n  \"SV_CDE_DEVICE_TYPE_ID\": 1,\n  \"Language\": \"AR\"\n}"
        },
        "url": {
          "raw": "{{baseUrl}}/academicstaff/SaveToken",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "academicstaff",
            "SaveToken"
          ]
        },
        "description": "**✅ شغال بداتا حقيقية**\n<span class=\"new\">جديد</span> تسجيل جهاز الدكتور للإشعارات — صاحب الجهاز من اللوجين\n\n> بحساب **دكتور** — شغّل «0b) Login as STAFF» الأول. بتوكن طالب هيرجّع `data not found`."
      },
      "response": []
    },
    {
      "name": "🎓  POST students/RemoveToken",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          },
          {
            "key": "Authorization",
            "value": "Bearer {{token}}"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\n  \"TOKEN\": \"<FCM token>\"\n}"
        },
        "url": {
          "raw": "{{baseUrl}}/students/RemoveToken",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "students",
            "RemoveToken"
          ]
        },
        "description": "**✅ شغال بداتا حقيقية**\n<span class=\"new\">جديد</span> عند تسجيل الخروج (وacademicstaff/RemoveToken للدكتور)\n\n> بحساب **طالب** — شغّل «0) Login» الأول."
      },
      "response": []
    },
    {
      "name": "🎓  POST students/SendNotification",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          },
          {
            "key": "Authorization",
            "value": "Bearer {{token}}"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\n  \"SE_USER_ACCNT_ID\": \"{{seUserAccntId}}\",\n  \"TitleEn\": \"Fees reminder\",\n  \"BodyEn\": \"Your instalment is due.\",\n  \"TitleAr\": \"تذكير بالرسوم\",\n  \"BodyAr\": \"القسط مستحق\"\n}"
        },
        "url": {
          "raw": "{{baseUrl}}/students/SendNotification",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "students",
            "SendNotification"
          ]
        },
        "description": "**sandbox**\nإرسال — بيشتغل بالـ Sandbox والرسالة بتتسجّل في الصندوق\n\n> بحساب **طالب** — شغّل «0) Login» الأول."
      },
      "response": [
        {
          "name": "رد حقيقي — فيه داتا · 200",
          "originalRequest": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"SE_USER_ACCNT_ID\": \"{{seUserAccntId}}\",\n  \"TitleEn\": \"Fees reminder\",\n  \"BodyEn\": \"Your instalment is due.\",\n  \"TitleAr\": \"تذكير بالرسوم\",\n  \"BodyAr\": \"القسط مستحق\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/students/SendNotification",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "students",
                "SendNotification"
              ]
            },
            "description": "**sandbox**\nإرسال — بيشتغل بالـ Sandbox والرسالة بتتسجّل في الصندوق\n\n> بحساب **طالب** — شغّل «0) Login» الأول."
          },
          "status": "OK",
          "code": 200,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            }
          ],
          "cookie": [],
          "body": "{\n  \"result\": \"Ok\",\n  \"details\": \"NO ERROR\",\n  \"data\": \"sent; sent; sent; sent\"\n}"
        }
      ]
    },
    {
      "name": "🎓  POST students/SendNotificationSIS",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{token}}"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/students/SendNotificationSIS",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "students",
            "SendNotificationSIS"
          ]
        },
        "description": "**🟡 محتاج بيانات اعتماد خارجية**\nمن الباك أوفيس (X-Api-Key)\n\n> بحساب **طالب** — شغّل «0) Login» الأول."
      },
      "response": [
        {
          "name": "الرد لما الخاصية مقفولة أو ناقصها إعدادات · 200",
          "originalRequest": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{token}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/students/SendNotificationSIS",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "students",
                "SendNotificationSIS"
              ]
            },
            "description": "**🟡 محتاج بيانات اعتماد خارجية**\nمن الباك أوفيس (X-Api-Key)\n\n> بحساب **طالب** — شغّل «0) Login» الأول."
          },
          "status": "OK",
          "code": 200,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            }
          ],
          "cookie": [],
          "body": "{\n  \"result\": \"ERROR\",\n  \"details\": \"Invalid or missing API key.\"\n}"
        }
      ]
    }
  ],
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.109.123.243.32.sslip.io"
    },
    {
      "key": "userName",
      "value": "mahmoued.eprahim.23010062"
    },
    {
      "key": "staffUserName",
      "value": "atef.dahesh"
    },
    {
      "key": "regUserName",
      "value": "mahmoued.eprahim.23010062"
    },
    {
      "key": "password",
      "value": "demo"
    },
    {
      "key": "token",
      "value": ""
    },
    {
      "key": "staffToken",
      "value": ""
    },
    {
      "key": "regToken",
      "value": ""
    },
    {
      "key": "edStudId",
      "value": ""
    },
    {
      "key": "regStudId",
      "value": ""
    },
    {
      "key": "staffId",
      "value": ""
    },
    {
      "key": "staffSeUserId",
      "value": ""
    },
    {
      "key": "seUserId",
      "value": ""
    },
    {
      "key": "seUserAccntId",
      "value": ""
    },
    {
      "key": "facultyId",
      "value": ""
    },
    {
      "key": "acadYearId",
      "value": ""
    },
    {
      "key": "semesterId",
      "value": ""
    }
  ]
}