Gig Applications
Overview
Section titled “Overview”Users apply to gigs by submitting an application with an optional message. The gig owner reviews applications and accepts or rejects them. Multiple applicants can be accepted. A user cannot apply to their own gig.
Application Lifecycle
Section titled “Application Lifecycle”PENDING ──► ACCEPTED │ └──────► REJECTED- PENDING: Default status when an application is submitted.
- ACCEPTED: The gig owner accepted the applicant.
- REJECTED: The gig owner rejected the applicant.
Routing Note
Section titled “Routing Note”Gig application endpoints use /gigs/:gigId/applications. The :gigId parameter is an Event ID — the system validates that the referenced event has type = GIG. If the event has type = EVENT, the endpoint responds with 400 Bad Request. There is no separate gigs table; /gigs/ is a routing alias into the Event table filtered by type.
Behaviors
Section titled “Behaviors”Applying
Section titled “Applying”Any authenticated user can apply to a gig they do not own. Each user can apply to a given gig only once. The application includes an optional message (cover note).
Applying creates an Interaction with action APPLY.
Reviewing Applications
Section titled “Reviewing Applications”The gig owner can list all applications for their gig. Each application shows the applicant’s profile, message, and status.
Accepting / Rejecting
Section titled “Accepting / Rejecting”The gig owner can accept or reject any PENDING application. Accepting one application does not affect other applications — the owner can accept multiple applicants. The gig remains OPEN until the owner manually changes its status.
Notifications
Section titled “Notifications”When an application status changes, the applicant receives an in-app notification.
Scenarios
Section titled “Scenarios”S-APP-1: Apply to a gig
Section titled “S-APP-1: Apply to a gig”GIVEN user B is authenticatedAND gig G exists, owned by user AWHEN user B sends POST /gigs/G/applications with { message: "I'm interested" }THEN an Application is created with status PENDING, applicantId = user B, gigId = GAND an Interaction is created with action APPLY for user B on event GS-APP-2: Cannot apply to own gig
Section titled “S-APP-2: Cannot apply to own gig”GIVEN user A created gig GWHEN user A sends POST /gigs/G/applicationsTHEN the API responds with 403 ForbiddenS-APP-3: Cannot apply twice
Section titled “S-APP-3: Cannot apply twice”GIVEN user B already applied to gig GWHEN user B sends POST /gigs/G/applications againTHEN the API responds with 409 ConflictS-APP-4: Accept an application
Section titled “S-APP-4: Accept an application”GIVEN gig G has a PENDING application from user BWHEN the gig owner sends PATCH /gigs/G/applications/app1 with { status: "ACCEPTED" }THEN the application status is ACCEPTEDAND user B receives a notification of type APPLICATION_ACCEPTEDS-APP-5: Reject an application
Section titled “S-APP-5: Reject an application”GIVEN gig G has a PENDING application from user BWHEN the gig owner sends PATCH /gigs/G/applications/app1 with { status: "REJECTED" }THEN the application status is REJECTEDAND user B receives a notification of type APPLICATION_REJECTEDS-APP-6: Accept multiple applicants
Section titled “S-APP-6: Accept multiple applicants”GIVEN gig G has PENDING applications from user B, user C, and user DWHEN the gig owner accepts user B and user CTHEN user B's application is ACCEPTEDAND user C's application is ACCEPTEDAND user D's application is still PENDINGAND gig G's status is still OPENS-APP-7: Cannot apply to non-gig event
Section titled “S-APP-7: Cannot apply to non-gig event”GIVEN event E has type EVENT (not GIG)WHEN user B sends POST /gigs/E/applicationsTHEN the API responds with 400 Bad RequestS-APP-8: Cannot apply to cancelled gig
Section titled “S-APP-8: Cannot apply to cancelled gig”GIVEN gig G has status CANCELLEDWHEN user B sends POST /gigs/G/applicationsTHEN the API responds with 400 Bad RequestS-APP-9: Cannot change status of non-PENDING application
Section titled “S-APP-9: Cannot change status of non-PENDING application”GIVEN user B's application to gig G has status ACCEPTEDWHEN the gig owner sends PATCH /gigs/G/applications/app1 with { status: "REJECTED" }THEN the API responds with 400 Bad RequestAND the application status remains ACCEPTEDS-APP-10: Application received notification to gig owner
Section titled “S-APP-10: Application received notification to gig owner”GIVEN user B applies to gig G owned by user ATHEN user A receives a notification with type APPLICATION_RECEIVEDAND referenceId = the application IDAND referenceType = APPLICATION