Conversation
|
This PR adds full support for ticket management both admin-ui and engine side. new mutations added
New queries
new resolver access control permissions
Message templates
Admin-ui has Two-mode access in which Admins skip passcode (see all events), anonymous users authenticate via passcode (see only their events) |
2ceb5a2 to
88ed454
Compare
There was a problem hiding this comment.
i don't know, i think the event scanner pass code feature should be left out of this pr in general for a first version, it's fine if it works with properly logged in users with corect permissions in the beginning.
88ed454 to
7ddcee3
Compare
7ddcee3 to
4d3fdf1
Compare
|
All mutations and queries that are ticket specific have to live in the ticketing package, this extension can't be part of the normal api, it's too specific. |
pozylon
left a comment
There was a problem hiding this comment.
See my other comment about package
0406fe1 to
6764852
Compare
|
@Mikearaya check the diffs, it's not clean yet, setHeader and getHeader that kind of helpers is fine in api but isCanceled is ticketing specific |
9760678 to
74218da
Compare
|
@pozylon i've moved all the remaining ticketing-specific resolvers into ticketing packages now |
74218da to
986d457
Compare
|
Now admin-ui needs to somehow determine if the ticketing module is loaded on the engine before showing the gate control feature and ticketing. i am trying to figure out the best way to do this |
|
@Mikearaya can't you just check for permissions? ticketing has additional acl, right? and that's in User.allowedActions. admin-ui components don't have to be in the ticketing extensions |
|
I think that all ticket management related features should stay in one main menu point in admin-ui, so don't mix in the ticketing stuff in the normal products/user etc. |
|
what is important is that if a user has the scan ticket permission, he/she should have the scanner in the admin-ui so we don't have to build a scan page for every ticketing customer |
|
@pozylon The issue with
What I’ve been thinking about and working on is moving the relevant components into the ticketing module itself. These components could then be imported by any project that uses ticketing and injected through the new Admin UI plugin system. This approach would allow us to keep the ticketing-specific code within the ticketing module and prevent |
|
@Mikearaya yes it's a perfect case to battle-test your admin ui plugin system |
eeeb3c0 to
bf19ab6
Compare
|
@Mikearaya i merged the ESM plugin PR, please check this PR here |
pozylon
left a comment
There was a problem hiding this comment.
rebase and build upon the new esm plugin system
bf19ab6 to
a2fb8db
Compare
|
@pozylon Rebase, tested and fixed. everything is in place now |
efaa1d3 to
a8be669
Compare
… access control implementation
Scope gate access to authorized events and attendees, require explicit cancellation permissions, and preserve authenticated plugin-page defaults. Sign exact currency-bound voucher amounts, reserve credit across concurrent checkouts, and reimburse token quantities correctly. Repair event pagination, UI refreshes, and cross-platform dependency resolution. Validation: 758 unit tests and 13 integration tests passed, along with builds, typechecks, and backend lint. Admin UI lint is blocked by the existing formatjs/Unicode dependency mismatch.
…ents Product managers (manageProducts) can now view tokens and attendees of ticket events including drafts, while scanners keep active-only access. Access decisions and attendee lookups are memoized per request. cancelEvent requires the dedicated cancelTicket action like cancelTicket does, and the admin plugin hides cancel and redeem buttons the viewer may not use. Reimbursement codes accept every currency code the currencies module stores, the usage balance is computed in JavaScript with the order pricing sheet, reservation release never throws, and both invalidation mutations report a concurrent redemption as TokenWrongStatusError instead of a generic server error. Gate event listing pre-filters redeemed tickets and stops at the first redeemable one. Tests no longer cross package boundaries, docs describe the actual permission model, and the lockfile hoists the rollup Linux binary as on master.
…icing into the extension Event/ticket cancellation e-mail templates and the reimbursement-code discount adapter were ticketing-specific yet lived in @unchainedshop/platform and @unchainedshop/plugins, so every shop carried them even without ticketing. - Templates: new packages/ticketing/src/templates exporting TicketingMessageTypes and registerTicketingTemplates(), invoked from setupTicketing(). Removed both resolvers, their MessageTypes entries, and their registrations from platform's setupTemplates; services.ts now emits via the shared constants. - Pricing: moved discount-reimbursement-code into the ticketing package (the adapter only needs @unchainedshop/core and the passes module). Added a "./pricing/*" package export; the integration test and example README import from @unchainedshop/ticketing/pricing/discount-reimbursement-code.
eslint-plugin-formatjs@6 imported @unicode/unicode-17.0.0/.../regex.js, but the installed @unicode 2.x ships that module as regex.mjs, so eslint crashed before linting a single file. v8 imports the .mjs build. With eslint running again, clear the debt it had been masking: - prettier-fix the hand-written sources it flagged; - exclude the graphql-codegen outputs (operation-types/schema-types) from linting instead of hand-formatting generated files; - give .mjs helper scripts Node/browser globals so URL and friends resolve. Unrelated to the ticketing work; the root lint already ignores ./admin-ui.
…orCheckout The optional discount-adapter hook prepareForCheckout and its orchestrator prepareOrderDiscountsForCheckout reserve scarce credit for the checkout/payment window, which is distinct from the cart-lifecycle reserve()/release(). Rename both to reserveForCheckout / reserveOrderDiscountsForCheckout so the pairing with reserve() is obvious, and document how the two windows differ where the hooks are declared.
8665511 to
7569620
Compare
No description provided.