Skip to content

Feat/316 duplicate tier id check#372

Open
Chibey-max wants to merge 5 commits intoAgora-Events:mainfrom
Chibey-max:feat/316-duplicate-tier-id-check
Open

Feat/316 duplicate tier id check#372
Chibey-max wants to merge 5 commits intoAgora-Events:mainfrom
Chibey-max:feat/316-duplicate-tier-id-check

Conversation

@Chibey-max
Copy link
Copy Markdown
Contributor

Closes #316

Ensures data integrity during event registration by detecting duplicate ticket tier IDs before persisting to storage.

Problem
Soroban's Map silently overwrites duplicate keys on construction — if a caller sets the same tier ID twice, the second value wins and the first is lost. This leads to silent inventory miscounts with no error surfaced to the caller.

Changes
error.rs — added DuplicateTierId = 46 with display message
types.rs — added tier_ids: Vec to EventRegistrationArgs so callers explicitly declare their intended tier IDs alongside the map
lib.rs — in register_event, compares tier_ids.len() against tiers.len(); a mismatch means a duplicate key was silently collapsed by the map
test.rs — added test_register_event_duplicate_tier_id_fails which sets the same tier ID twice and asserts DuplicateTierId is returned
All existing test fixtures updated to include the new tier_ids field

- Add `name` field to `EventRegistrationArgs` and `EventInfo` structs
- Implement `trim_string` helper to strip leading/trailing ASCII whitespace
- Apply trimming to event name in `register_event` before persisting
- Add `name` field to local `EventInfo` copy in ticket_payment contract
- Add `test_register_event_name_trimming` test with intentionally messy names
- Update all existing test fixtures to include the new `name` field
Excludes target/, .env files, .git/, editor artifacts, and other
non-essential files from the Docker build context.

- target/ is the primary source of bloat (can be GBs in Rust projects)
- .env files must never be baked into images
- .git/ metadata (~30MB) is not needed at build time
- Docs, scripts, and OS artifacts excluded for a leaner context
Add /// and //! doc comments to all structs and fields in
server/src/models/ to improve database layer understandability.

- User: documents role distinction from Organizer
- Organizer: documents ownership relationship to Events
- Event: documents FK to Organizer and cascade behaviour
- TicketTier: documents quantity tracking semantics
- Ticket: documents status lifecycle (active/used/cancelled)
  and QR code generation timing
- Transaction: documents status lifecycle (pending/completed/failed)
  and Stellar hash usage for on-chain payments
- mod.rs: adds module-level doc with entity relationship diagram
…-Events#316)

- Add `DuplicateTierId = 46` to `EventRegistryError`
- Add `tier_ids: Vec<String>` field to `EventRegistrationArgs` so callers
  declare their intended tier IDs alongside the map
- In `register_event`, compare `tier_ids.len()` against `tiers.len()`:
  Soroban's Map silently collapses duplicate keys, so a mismatch reveals
  a duplicate was supplied
- Add `test_register_event_duplicate_tier_id_fails` test that sets the
  same tier ID twice and asserts `DuplicateTierId` is returned
- Update all existing test fixtures to include the new `tier_ids` field
@vercel
Copy link
Copy Markdown

vercel bot commented Mar 30, 2026

@Chibey-max is attempting to deploy a commit to the oseh-svg's projects Team on Vercel.

A member of the Team first needs to authorize it.

@drips-wave
Copy link
Copy Markdown

drips-wave bot commented Mar 30, 2026

@Chibey-max Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@OSEH-svg
Copy link
Copy Markdown
Contributor

@Chibey-max your lint and test checks are failing

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Contract] Check for duplicate tier IDs

2 participants