Skip to main content

Guild Applications

Configurable application forms that let prospective members apply to a guild. Officers review, accept, or reject applications — acceptance auto-creates a trial membership.

Application Flow

sequenceDiagram
participant A as Applicant
participant API as API
participant O as Guild Officers

A->>API: GET /application-form
API-->>A: form config + questions

A->>API: POST /applications
API-->>O: notification: application_submitted

O->>API: GET /applications (list all)
O->>API: PATCH /:id/review (accept/reject)
API-->>A: notification: application_reviewed

Note over API: On accept: trial membership created

Data Model

GuildApplicationForm

One form per guild, storing the question schema.

FieldDescription
idUUID
organizationIdGuild (unique — one form per guild)
isEnabledWhether the form accepts submissions
questionsJSON array of question definitions

Question Schema

[
{
"id": "uuid",
"type": "text | textarea | select | boolean | date",
"label": "Why do you want to join?",
"required": true,
"options": ["Option A", "Option B"]
}
]

Supported question types: text, textarea, select, boolean, date.

GuildApplication

FieldDescription
idUUID
organizationIdGuild
userIdApplicant
characterIdCharacter attached to application (optional)
referredByMemberIdMembership ID of referrer (optional)
statuspending, accepted, rejected, withdrawn
answersJSON array of { questionId, answer }
reviewedByIdOfficer who reviewed (nullable)
reviewNotesOfficer notes (nullable)
reviewedAtReview timestamp (nullable)

Validation Rules

  • One pending application per user per guild — submitting a second is rejected
  • Form must be enabled — submissions against disabled forms are rejected
  • Referral validation — if referredByMemberId is provided, the membership must exist and be active in the same guild
  • Withdrawal — only allowed while status is pending

Auto-Membership on Accept

When an officer accepts an application for a standalone guild, the service automatically creates a Membership with status trial for the applicant's character.

Events Emitted

EventWhenNotification recipients
application.submittedNew application createdOfficers with canManageMembers
application.reviewedApplication accepted/rejectedApplicant

API Endpoints

Application Form (Officers)

MethodPathAuthDescription
GET/organizations/:guildId/application-formOptionalGet form config
PUT/organizations/:guildId/application-formUpdate OrganizationUpdate form config

Applications

MethodPathAuthDescription
POST/organizations/:guildId/applicationsAuthenticatedSubmit application
GET/organizations/:guildId/applications/mineAuthenticatedGet my application
GET/organizations/:guildId/applicationsCreate MembershipList all (officers)
PATCH/organizations/:guildId/applications/:id/reviewCreate MembershipAccept/reject
DELETE/organizations/:guildId/applications/mineAuthenticatedWithdraw

Frontend

Pages

  • ApplyPage — Renders the application form with dynamic question types, character selection, referral member search, and status banner for existing applications.
  • ApplicationsPage — Officer view with status filter tabs, accept/reject actions, and reviewer notes.
  • SettingsApplicationsPage — Form editor with enable/disable toggle, drag-to-reorder questions, and question type configuration.