@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.
- package/dist/pages/TicketsPage.d.ts +2 -0
- package/dist/pages/TicketsPage.d.ts.map +1 -0
- package/dist/pages/TicketsPage.js +16 -0
- package/dist/pages/TicketsPage.js.map +1 -0
- package/dist/register.d.ts.map +1 -1
- package/dist/register.js +4 -0
- package/dist/register.js.map +1 -1
- package/package.json +11 -3
- package/wire.json +12 -0
- package/ticketing.wire.json +0 -72
|
@@ -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"}
|
package/dist/register.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../register.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;
|
|
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
|
}
|
package/dist/register.js.map
CHANGED
|
@@ -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;
|
|
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.
|
|
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
|
-
"
|
|
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
|
+
}
|
package/ticketing.wire.json
DELETED
|
@@ -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
|
-
}
|