@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 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
@@ -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"}
@@ -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.1",
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
+ }