@mostajs/ticketing 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ export default function TicketsPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=TicketsPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TicketsPage.d.ts","sourceRoot":"","sources":["../../pages/TicketsPage.tsx"],"names":[],"mappings":"AAKA,MAAM,CAAC,OAAO,UAAU,WAAW,4CAsBlC"}
@@ -0,0 +1,16 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ // @mostajs/ticketing — TicketsPage
4
+ // Author: Dr Hamid MADANI drmdh@msn.com
5
+ import { useEffect, useState } from 'react';
6
+ export default function TicketsPage() {
7
+ const [tickets, setTickets] = useState([]);
8
+ const [loading, setLoading] = useState(true);
9
+ useEffect(() => {
10
+ fetch('/api/tickets').then(r => r.json()).then(d => { setTickets(d.data || []); setLoading(false); });
11
+ }, []);
12
+ if (loading)
13
+ return _jsx("div", { className: "p-6", children: "Chargement..." });
14
+ return (_jsxs("div", { className: "p-6 space-y-4", children: [_jsx("h1", { className: "text-2xl font-bold", children: "Tickets" }), _jsx("div", { className: "grid gap-2", children: tickets.map((t) => (_jsxs("div", { className: `p-3 border rounded ${t.status === 'active' ? 'bg-green-50' : 'bg-gray-50'}`, children: ["#", t.ticketNumber, " \u2014 ", t.clientName, " \u2014 ", t.activityName, " \u2014 ", t.status] }, t.id))) })] }));
15
+ }
16
+ //# sourceMappingURL=TicketsPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TicketsPage.js","sourceRoot":"","sources":["../../pages/TicketsPage.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AACZ,mCAAmC;AACnC,wCAAwC;AACxC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE3C,MAAM,CAAC,OAAO,UAAU,WAAW;IACjC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAQ,EAAE,CAAC,CAAA;IACjD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAE5C,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;IACtG,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,IAAI,OAAO;QAAE,OAAO,cAAK,SAAS,EAAC,KAAK,8BAAoB,CAAA;IAE5D,OAAO,CACL,eAAK,SAAS,EAAC,eAAe,aAC5B,aAAI,SAAS,EAAC,oBAAoB,wBAAa,EAC/C,cAAK,SAAS,EAAC,YAAY,YACxB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CACvB,eAAgB,SAAS,EAAE,sBAAsB,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,EAAE,kBACnG,CAAC,CAAC,YAAY,cAAK,CAAC,CAAC,UAAU,cAAK,CAAC,CAAC,YAAY,cAAK,CAAC,CAAC,MAAM,KADzD,CAAC,CAAC,EAAE,CAER,CACP,CAAC,GACE,IACF,CACP,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../register.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AASxD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE;IAAE,QAAQ,CAAC,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAkClF"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../register.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAUxD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE;IAAE,QAAQ,CAAC,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAsClF"}
package/dist/register.js CHANGED
@@ -7,6 +7,7 @@ import { TicketRepository } from './repositories/ticket.repository';
7
7
  import { ScanLogRepository } from './repositories/scan-log.repository';
8
8
  import { ticketingMenuContribution } from './lib/menu';
9
9
  import { TICKETING_PERMISSIONS, TICKETING_PERMISSION_DEFINITIONS, TICKETING_CATEGORY_DEFINITIONS } from './lib/permissions';
10
+ import TicketsPage from './pages/TicketsPage';
10
11
  export function register(registry) {
11
12
  registry.register({
12
13
  manifest: {
@@ -35,6 +36,9 @@ export function register(registry) {
35
36
  definitions: TICKETING_PERMISSION_DEFINITIONS,
36
37
  categories: TICKETING_CATEGORY_DEFINITIONS,
37
38
  },
39
+ pages: [
40
+ { path: 'tickets', component: TicketsPage, permission: 'ticket:view' },
41
+ ],
38
42
  menu: ticketingMenuContribution,
39
43
  });
40
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../register.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,wCAAwC;AAGxC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,qBAAqB,EAAE,gCAAgC,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAA;AAE3H,MAAM,UAAU,QAAQ,CAAC,QAAmD;IAC1E,QAAQ,CAAC,QAAQ,CAAC;QAChB,QAAQ,EAAE;YACR,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,oBAAoB;YAC7B,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,EAAE;YACZ,YAAY,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC;YACvC,WAAW,EAAE,aAAa;YAC1B,WAAW,EAAE,8CAA8C;YAC3D,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,oBAAoB;SAC/B;QAED,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE;YACxC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE;YAC1C,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE;SAC3C;QAED,YAAY,EAAE;YACZ,UAAU,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,OAAgB,CAAC;YACxE,WAAW,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,IAAI,iBAAiB,CAAC,OAAgB,CAAC;SAC3E;QAED,WAAW,EAAE;YACX,WAAW,EAAE,qBAAqB;YAClC,WAAW,EAAE,gCAAgC;YAC7C,UAAU,EAAE,8BAA8B;SAC3C;QAED,IAAI,EAAE,yBAAyB;KAChC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../register.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,wCAAwC;AAGxC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,qBAAqB,EAAE,gCAAgC,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAA;AAC3H,OAAO,WAAW,MAAM,qBAAqB,CAAA;AAE7C,MAAM,UAAU,QAAQ,CAAC,QAAmD;IAC1E,QAAQ,CAAC,QAAQ,CAAC;QAChB,QAAQ,EAAE;YACR,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,oBAAoB;YAC7B,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,EAAE;YACZ,YAAY,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC;YACvC,WAAW,EAAE,aAAa;YAC1B,WAAW,EAAE,8CAA8C;YAC3D,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,oBAAoB;SAC/B;QAED,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE;YACxC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE;YAC1C,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE;SAC3C;QAED,YAAY,EAAE;YACZ,UAAU,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,OAAgB,CAAC;YACxE,WAAW,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,IAAI,iBAAiB,CAAC,OAAgB,CAAC;SAC3E;QAED,WAAW,EAAE;YACX,WAAW,EAAE,qBAAqB;YAClC,WAAW,EAAE,gCAAgC;YAC7C,UAAU,EAAE,8BAA8B;SAC3C;QAED,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE;SACvE;QAED,IAAI,EAAE,yBAAyB;KAChC,CAAC,CAAA;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mostajs/ticketing",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "Ticketing module — ticket lifecycle, scan validation, quota management",
5
5
  "author": "Dr Hamid MADANI <drmdh@msn.com>",
6
6
  "license": "MIT",
@@ -37,12 +37,17 @@
37
37
  "types": "./dist/register.d.ts",
38
38
  "import": "./dist/register.js",
39
39
  "default": "./dist/register.js"
40
+ },
41
+ "./pages/TicketsPage": {
42
+ "types": "./dist/pages/TicketsPage.d.ts",
43
+ "import": "./dist/pages/TicketsPage.js",
44
+ "default": "./dist/pages/TicketsPage.js"
40
45
  }
41
46
  },
42
47
  "files": [
43
48
  "dist",
44
49
  "i18n",
45
- "ticketing.wire.json",
50
+ "wire.json",
46
51
  "LICENSE",
47
52
  "README.md"
48
53
  ],
@@ -73,7 +78,8 @@
73
78
  "peerDependencies": {
74
79
  "@mostajs/socle": ">=2.0.0",
75
80
  "@mostajs/subscriptions": ">=1.0.0",
76
- "next": ">=14"
81
+ "next": ">=14",
82
+ "react": ">=18"
77
83
  },
78
84
  "peerDependenciesMeta": {
79
85
  "next": {
@@ -86,7 +92,9 @@
86
92
  "devDependencies": {
87
93
  "@mostajs/socle": "^2.0.0",
88
94
  "@types/node": "^25.3.3",
95
+ "@types/react": "^19.0.0",
89
96
  "next": "^16.1.6",
97
+ "react": "^19.0.0",
90
98
  "typescript": "^5.9.3"
91
99
  }
92
100
  }
package/wire.json ADDED
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "ticketing",
3
+ "package": "@mostajs/ticketing",
4
+ "version": "2.0.0",
5
+ "type": "business",
6
+ "priority": 95,
7
+ "dependencies": ["auth", "subscriptions"],
8
+ "displayName": "Billetterie",
9
+ "description": "Tickets, scan, validation — billetterie pure",
10
+ "icon": "Ticket",
11
+ "register": "./dist/register.js"
12
+ }
@@ -1,72 +0,0 @@
1
- {
2
- "name": "ticketing",
3
- "package": "@mostajs/ticketing",
4
- "version": "2.0.0",
5
- "type": "business",
6
-
7
- "schemas": {
8
- "from": "@mostajs/ticketing",
9
- "exports": ["TicketSchema", "ClientAccessSchema", "ScanLogSchema", "SubscriptionPlanSchema", "ActivitySchema", "CounterSchema"]
10
- },
11
-
12
- "repositories": [
13
- { "class": "TicketRepository", "type": "TicketDTO", "factory": "ticketRepo", "from": "@mostajs/ticketing" },
14
- { "class": "ClientAccessRepository", "type": "ClientAccessDTO", "factory": "clientAccessRepo", "from": "@mostajs/ticketing" },
15
- { "class": "ScanLogRepository", "type": "ScanLogDTO", "factory": "scanLogRepo", "from": "@mostajs/ticketing" },
16
- { "class": "SubscriptionPlanRepository", "type": "SubscriptionPlanDTO", "factory": "subscriptionPlanRepo", "from": "@mostajs/ticketing" },
17
- { "class": "ActivityRepository", "type": "ActivityDTO", "factory": "activityRepo", "from": "@mostajs/ticketing" }
18
- ],
19
-
20
- "menu": {
21
- "name": "ticketingMenuContribution",
22
- "from": "@mostajs/ticketing/lib/menu"
23
- },
24
-
25
- "permissions": {
26
- "from": "@mostajs/ticketing/lib/permissions",
27
- "permissionsConst": "TICKETING_PERMISSIONS",
28
- "definitionsConst": "TICKETING_PERMISSION_DEFINITIONS",
29
- "categoriesConst": "TICKETING_CATEGORY_DEFINITIONS",
30
- "roles": [
31
- {
32
- "name": "agent_accueil",
33
- "addPermissions": ["ticket:create", "ticket:view", "scan:validate", "scan:view_history"]
34
- },
35
- {
36
- "name": "agent_attraction",
37
- "addPermissions": ["ticket:view", "scan:validate"]
38
- },
39
- {
40
- "name": "superviseur",
41
- "addPermissions": ["ticket:view", "scan:view_history"]
42
- }
43
- ]
44
- },
45
-
46
- "i18n": [
47
- { "namespace": "activities", "source": "node_modules/@mostajs/ticketing/i18n/fr/activities.json" },
48
- { "namespace": "tickets", "source": "node_modules/@mostajs/ticketing/i18n/fr/tickets.json" }
49
- ],
50
-
51
- "apiRoutes": [
52
- {
53
- "path": "src/app/api/tickets/route.ts",
54
- "code": "// Author: Dr Hamid MADANI drmdh@msn.com\nimport { createTicketsHandler } from '@mostajs/ticketing/api/tickets.route'\nimport { ticketRepo, clientRepo, clientAccessRepo, activityRepo } from '@/dal/service'\nimport { checkPermission } from '@/lib/authCheck'\n\nexport const { GET, POST } = createTicketsHandler({\n getRepositories: async () => ({\n ticketRepo: await ticketRepo(),\n clientRepo: await clientRepo(),\n clientAccessRepo: await clientAccessRepo(),\n activityRepo: await activityRepo(),\n }),\n checkAuth: async (req, perm) => {\n const result = await checkPermission(perm)\n return { error: result.error || null, userId: result.userId || '' }\n },\n})"
55
- },
56
- {
57
- "path": "src/app/api/scan/route.ts",
58
- "code": "// Author: Dr Hamid MADANI drmdh@msn.com\nimport { createScanHandler } from '@mostajs/ticketing/api/scan.route'\nimport { ticketRepo, clientAccessRepo, scanLogRepo, clientRepo } from '@/dal/service'\nimport { checkPermission } from '@/lib/authCheck'\n\nexport const { POST } = createScanHandler({\n getRepositories: async () => ({\n ticketRepo: await ticketRepo(),\n clientAccessRepo: await clientAccessRepo(),\n scanLogRepo: await scanLogRepo(),\n clientRepo: await clientRepo(),\n }),\n checkAuth: async (req) => {\n const result = await checkPermission('scan:validate')\n return { error: result.error || null, userId: result.userId || '' }\n },\n})"
59
- }
60
- ],
61
-
62
- "pages": [
63
- {
64
- "path": "src/app/dashboard/tickets/page.tsx",
65
- "code": "'use client'\n// Author: Dr Hamid MADANI drmdh@msn.com\nimport { useEffect, useState } from 'react'\n\nexport default function TicketsPage() {\n const [tickets, setTickets] = useState<any[]>([])\n const [loading, setLoading] = useState(true)\n\n useEffect(() => {\n fetch('/api/tickets').then(r => r.json()).then(d => { setTickets(d.data || []); setLoading(false) })\n }, [])\n\n if (loading) return <div className=\"p-6\">Chargement...</div>\n\n return (\n <div className=\"p-6 space-y-4\">\n <h1 className=\"text-2xl font-bold\">Tickets</h1>\n <div className=\"grid gap-2\">\n {tickets.map((t: any) => (\n <div key={t.id} className={`p-3 border rounded ${t.status === 'active' ? 'bg-green-50' : 'bg-gray-50'}`}>\n #{t.ticketNumber} — {t.clientName} — {t.activityName} — {t.status}\n </div>\n ))}\n </div>\n </div>\n )\n}"
66
- },
67
- {
68
- "path": "src/app/dashboard/scan/page.tsx",
69
- "code": "'use client'\n// Author: Dr Hamid MADANI drmdh@msn.com\nimport { ScannerView } from '@mostajs/scan'\n\nexport default function ScanPage() {\n return (\n <div className=\"p-6 space-y-4\">\n <h1 className=\"text-2xl font-bold\">Scanner</h1>\n <ScannerView apiEndpoint=\"/api/scan\" />\n </div>\n )\n}"
70
- }
71
- ]
72
- }