@mostajs/ticketing 1.0.1 → 1.0.3
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/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/menu.d.ts +14 -0
- package/dist/lib/menu.d.ts.map +1 -0
- package/dist/lib/menu.js +15 -0
- package/dist/lib/menu.js.map +1 -0
- package/dist/lib/permissions.d.ts +37 -0
- package/dist/lib/permissions.d.ts.map +1 -0
- package/dist/lib/permissions.js +23 -0
- package/dist/lib/permissions.js.map +1 -0
- package/i18n/fr/activities.json +34 -0
- package/i18n/fr/tickets.json +29 -0
- package/package.json +13 -1
- package/ticketing.wire.json +72 -0
package/dist/index.d.ts
CHANGED
|
@@ -8,5 +8,7 @@ export { decrementQuota, isQuotaDepleted, wouldExceedQuota } from './lib/quota-m
|
|
|
8
8
|
export { DAY_MULTIPLIER, DAY_MODULO, YEAR_MODULO, MAX_SEQUENCE, MAX_TICKET_VALUE, getDayOfYear, computeCombinedDay, extractCombinedDayFromTicket, extractDayFromTicket, extractYearFromTicket, extractSequenceFromTicket, isTicketFromToday, isValidTicketFormat, } from './lib/ticket-number';
|
|
9
9
|
export { createScanHandler } from './api/scan.route';
|
|
10
10
|
export { createTicketsHandler } from './api/tickets.route';
|
|
11
|
+
export { TICKETING_PERMISSIONS, TICKETING_PERMISSION_DEFINITIONS, TICKETING_CATEGORY_DEFINITIONS } from './lib/permissions';
|
|
12
|
+
export type { TicketingPermission } from './lib/permissions';
|
|
11
13
|
export type { CodeFormat, ValidityMode, TicketStatus, ScanResult, ScanMethod, AccessType, AccessStatus, ActivityStatus, PlanType, DenyReason, ScanInput, ScanOutput, ScanGrantedResult, ScanDeniedResult, TicketInfo, ClientInfo, AccessInfo, CreateTicketInput, ScanHandlerConfig, TicketsHandlerConfig, } from './types/index';
|
|
12
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,aAAa,GACd,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,SAAS,EACT,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGxF,OAAO,EACL,cAAc,EACd,UAAU,EACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,4BAA4B,EAC5B,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,YAAY,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,UAAU,EACV,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,aAAa,GACd,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,SAAS,EACT,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGxF,OAAO,EACL,cAAc,EACd,UAAU,EACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,4BAA4B,EAC5B,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,qBAAqB,EAAE,gCAAgC,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAC5H,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG7D,YAAY,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,UAAU,EACV,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -13,4 +13,6 @@ export { DAY_MULTIPLIER, DAY_MODULO, YEAR_MODULO, MAX_SEQUENCE, MAX_TICKET_VALUE
|
|
|
13
13
|
// ── API route factories ────────────────────────────────────────────
|
|
14
14
|
export { createScanHandler } from './api/scan.route';
|
|
15
15
|
export { createTicketsHandler } from './api/tickets.route';
|
|
16
|
+
// ── Permissions ──────────────────────────────────────────────────────
|
|
17
|
+
export { TICKETING_PERMISSIONS, TICKETING_PERMISSION_DEFINITIONS, TICKETING_CATEGORY_DEFINITIONS } from './lib/permissions';
|
|
16
18
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,wCAAwC;AAExC,sEAAsE;AACtE,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,sEAAsE;AACtE,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAY9B,sEAAsE;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGnD,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAExF,oEAAoE;AACpE,OAAO,EACL,cAAc,EACd,UAAU,EACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,4BAA4B,EAC5B,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,sEAAsE;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,wCAAwC;AAExC,sEAAsE;AACtE,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,sEAAsE;AACtE,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAY9B,sEAAsE;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGnD,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAExF,oEAAoE;AACpE,OAAO,EACL,cAAc,EACd,UAAU,EACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,4BAA4B,EAC5B,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,sEAAsE;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,wEAAwE;AACxE,OAAO,EAAE,qBAAqB,EAAE,gCAAgC,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const ticketingMenuContribution: {
|
|
2
|
+
id: string;
|
|
3
|
+
label: string;
|
|
4
|
+
icon: string;
|
|
5
|
+
order: number;
|
|
6
|
+
items: {
|
|
7
|
+
id: string;
|
|
8
|
+
label: string;
|
|
9
|
+
href: string;
|
|
10
|
+
icon: string;
|
|
11
|
+
permission: string;
|
|
12
|
+
}[];
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../lib/menu.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,yBAAyB;;;;;;;;;;;;CAWrC,CAAC"}
|
package/dist/lib/menu.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// @mostajs/ticketing — Menu contribution
|
|
2
|
+
// Author: Dr Hamid MADANI drmdh@msn.com
|
|
3
|
+
export const ticketingMenuContribution = {
|
|
4
|
+
id: 'ticketing',
|
|
5
|
+
label: 'Billetterie',
|
|
6
|
+
icon: 'Ticket',
|
|
7
|
+
order: 30,
|
|
8
|
+
items: [
|
|
9
|
+
{ id: 'tickets', label: 'Tickets', href: '/dashboard/tickets', icon: 'Ticket', permission: 'ticket:view' },
|
|
10
|
+
{ id: 'scan', label: 'Scan', href: '/dashboard/scan', icon: 'ScanLine', permission: 'scan:validate' },
|
|
11
|
+
{ id: 'activities', label: 'Activites', href: '/dashboard/activities', icon: 'Dumbbell', permission: 'activity:view' },
|
|
12
|
+
{ id: 'plans', label: 'Abonnements', href: '/dashboard/plans', icon: 'CreditCard', permission: 'access:view' },
|
|
13
|
+
],
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.js","sourceRoot":"","sources":["../../lib/menu.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,wCAAwC;AAExC,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,EAAE,EAAE,WAAW;IACf,KAAK,EAAE,aAAa;IACpB,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,EAAE;IACT,KAAK,EAAE;QACL,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE;QAC1G,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE;QACrG,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE;QACtH,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE;KAC/G;CACF,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export declare const TICKETING_PERMISSIONS: {
|
|
2
|
+
readonly TICKET_CREATE: "ticket:create";
|
|
3
|
+
readonly TICKET_VIEW: "ticket:view";
|
|
4
|
+
readonly SCAN_VALIDATE: "scan:validate";
|
|
5
|
+
readonly SCAN_VIEW_HISTORY: "scan:view_history";
|
|
6
|
+
};
|
|
7
|
+
export type TicketingPermission = typeof TICKETING_PERMISSIONS[keyof typeof TICKETING_PERMISSIONS];
|
|
8
|
+
export declare const TICKETING_PERMISSION_DEFINITIONS: ({
|
|
9
|
+
code: "ticket:create";
|
|
10
|
+
name: string;
|
|
11
|
+
description: string;
|
|
12
|
+
category: string;
|
|
13
|
+
} | {
|
|
14
|
+
code: "ticket:view";
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
category: string;
|
|
18
|
+
} | {
|
|
19
|
+
code: "scan:validate";
|
|
20
|
+
name: string;
|
|
21
|
+
description: string;
|
|
22
|
+
category: string;
|
|
23
|
+
} | {
|
|
24
|
+
code: "scan:view_history";
|
|
25
|
+
name: string;
|
|
26
|
+
description: string;
|
|
27
|
+
category: string;
|
|
28
|
+
})[];
|
|
29
|
+
export declare const TICKETING_CATEGORY_DEFINITIONS: {
|
|
30
|
+
name: string;
|
|
31
|
+
label: string;
|
|
32
|
+
description: string;
|
|
33
|
+
icon: string;
|
|
34
|
+
order: number;
|
|
35
|
+
system: boolean;
|
|
36
|
+
}[];
|
|
37
|
+
//# sourceMappingURL=permissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../lib/permissions.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,qBAAqB;;;;;CAQxB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,OAAO,qBAAqB,CAAC,MAAM,OAAO,qBAAqB,CAAC,CAAC;AAEnG,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;IAQ5C,CAAC;AAEF,eAAO,MAAM,8BAA8B;;;;;;;GAG1C,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// @mostajs/ticketing — Permission constants
|
|
2
|
+
// Author: Dr Hamid MADANI drmdh@msn.com
|
|
3
|
+
export const TICKETING_PERMISSIONS = {
|
|
4
|
+
// Tickets
|
|
5
|
+
TICKET_CREATE: 'ticket:create',
|
|
6
|
+
TICKET_VIEW: 'ticket:view',
|
|
7
|
+
// Scan
|
|
8
|
+
SCAN_VALIDATE: 'scan:validate',
|
|
9
|
+
SCAN_VIEW_HISTORY: 'scan:view_history',
|
|
10
|
+
};
|
|
11
|
+
export const TICKETING_PERMISSION_DEFINITIONS = [
|
|
12
|
+
// Tickets
|
|
13
|
+
{ code: TICKETING_PERMISSIONS.TICKET_CREATE, name: 'ticket:create', description: 'Creer un ticket', category: 'ticket' },
|
|
14
|
+
{ code: TICKETING_PERMISSIONS.TICKET_VIEW, name: 'ticket:view', description: 'Voir les tickets', category: 'ticket' },
|
|
15
|
+
// Scan
|
|
16
|
+
{ code: TICKETING_PERMISSIONS.SCAN_VALIDATE, name: 'scan:validate', description: 'Scanner et valider un ticket', category: 'scan' },
|
|
17
|
+
{ code: TICKETING_PERMISSIONS.SCAN_VIEW_HISTORY, name: 'scan:view_history', description: 'Voir l\'historique des scans', category: 'scan' },
|
|
18
|
+
];
|
|
19
|
+
export const TICKETING_CATEGORY_DEFINITIONS = [
|
|
20
|
+
{ name: 'ticket', label: 'Tickets', description: 'Gestion des tickets d\'acces', icon: 'Ticket', order: 7, system: true },
|
|
21
|
+
{ name: 'scan', label: 'Scan', description: 'Validation et historique des scans', icon: 'ScanLine', order: 8, system: true },
|
|
22
|
+
];
|
|
23
|
+
//# sourceMappingURL=permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../lib/permissions.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,wCAAwC;AAExC,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,UAAU;IACV,aAAa,EAAE,eAAe;IAC9B,WAAW,EAAI,aAAa;IAE5B,OAAO;IACP,aAAa,EAAK,eAAe;IACjC,iBAAiB,EAAE,mBAAmB;CAC9B,CAAC;AAIX,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,UAAU;IACV,EAAE,IAAI,EAAE,qBAAqB,CAAC,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACxH,EAAE,IAAI,EAAE,qBAAqB,CAAC,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAErH,OAAO;IACP,EAAE,IAAI,EAAE,qBAAqB,CAAC,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,8BAA8B,EAAE,QAAQ,EAAE,MAAM,EAAE;IACnI,EAAE,IAAI,EAAE,qBAAqB,CAAC,iBAAiB,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,8BAA8B,EAAE,QAAQ,EAAE,MAAM,EAAE;CAC5I,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,8BAA8B,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;IACzH,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,oCAAoC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;CAC7H,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_author": "Dr Hamid MADANI drmdh@msn.com",
|
|
3
|
+
"title": "Activités",
|
|
4
|
+
"create": "Nouvelle activité",
|
|
5
|
+
"fields": {
|
|
6
|
+
"name": "Nom",
|
|
7
|
+
"slug": "Identifiant",
|
|
8
|
+
"description": "Description",
|
|
9
|
+
"capacity": "Capacité",
|
|
10
|
+
"currentOccupancy": "Occupation actuelle",
|
|
11
|
+
"price": "Prix unitaire",
|
|
12
|
+
"status": "Statut",
|
|
13
|
+
"ticketValidityMode": "Mode de validité ticket",
|
|
14
|
+
"ticketDuration": "Durée (minutes)"
|
|
15
|
+
},
|
|
16
|
+
"validityModes": {
|
|
17
|
+
"day_reentry": "Journée (ré-entrée possible)",
|
|
18
|
+
"single_use": "Usage unique",
|
|
19
|
+
"time_slot": "Créneau horaire",
|
|
20
|
+
"unlimited": "Illimité"
|
|
21
|
+
},
|
|
22
|
+
"schedule": {
|
|
23
|
+
"title": "Horaires",
|
|
24
|
+
"days": {
|
|
25
|
+
"0": "Dimanche",
|
|
26
|
+
"1": "Lundi",
|
|
27
|
+
"2": "Mardi",
|
|
28
|
+
"3": "Mercredi",
|
|
29
|
+
"4": "Jeudi",
|
|
30
|
+
"5": "Vendredi",
|
|
31
|
+
"6": "Samedi"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_author": "Dr Hamid MADANI drmdh@msn.com",
|
|
3
|
+
"title": "Tickets",
|
|
4
|
+
"create": "Générer ticket",
|
|
5
|
+
"fields": {
|
|
6
|
+
"ticketNumber": "N° Ticket",
|
|
7
|
+
"client": "Client",
|
|
8
|
+
"activity": "Activité",
|
|
9
|
+
"ticketType": "Type",
|
|
10
|
+
"status": "Statut",
|
|
11
|
+
"validUntil": "Valide jusqu'au",
|
|
12
|
+
"amount": "Montant"
|
|
13
|
+
},
|
|
14
|
+
"types": {
|
|
15
|
+
"standard": "Standard",
|
|
16
|
+
"cadeau": "Cadeau"
|
|
17
|
+
},
|
|
18
|
+
"statuses": {
|
|
19
|
+
"active": "Actif",
|
|
20
|
+
"used": "Utilisé",
|
|
21
|
+
"expired": "Expiré",
|
|
22
|
+
"cancelled": "Annulé"
|
|
23
|
+
},
|
|
24
|
+
"gift": {
|
|
25
|
+
"title": "Ticket Cadeau",
|
|
26
|
+
"source": "Offert par",
|
|
27
|
+
"anonymous": "Porteur anonyme"
|
|
28
|
+
}
|
|
29
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mostajs/ticketing",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Reusable ticketing module — ticket lifecycle, scan validation, quota management, API route factories",
|
|
5
5
|
"author": "Dr Hamid MADANI <drmdh@msn.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -33,6 +33,16 @@
|
|
|
33
33
|
"import": "./dist/api/*.js",
|
|
34
34
|
"default": "./dist/api/*.js"
|
|
35
35
|
},
|
|
36
|
+
"./lib/permissions": {
|
|
37
|
+
"types": "./dist/lib/permissions.d.ts",
|
|
38
|
+
"import": "./dist/lib/permissions.js",
|
|
39
|
+
"default": "./dist/lib/permissions.js"
|
|
40
|
+
},
|
|
41
|
+
"./lib/menu": {
|
|
42
|
+
"types": "./dist/lib/menu.d.ts",
|
|
43
|
+
"import": "./dist/lib/menu.js",
|
|
44
|
+
"default": "./dist/lib/menu.js"
|
|
45
|
+
},
|
|
36
46
|
"./types": {
|
|
37
47
|
"types": "./dist/types/index.d.ts",
|
|
38
48
|
"import": "./dist/types/index.js",
|
|
@@ -41,6 +51,8 @@
|
|
|
41
51
|
},
|
|
42
52
|
"files": [
|
|
43
53
|
"dist",
|
|
54
|
+
"i18n",
|
|
55
|
+
"ticketing.wire.json",
|
|
44
56
|
"LICENSE",
|
|
45
57
|
"README.md"
|
|
46
58
|
],
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_doc": "Manifeste de câblage pour @mostajs/ticketing",
|
|
3
|
+
"package": "@mostajs/ticketing",
|
|
4
|
+
"version": "1.0.1",
|
|
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
|
+
}
|