- Create user controller
- Set up auth provider
- Registration
- Login
- Permissions per page
-
Users
-
Name
-
Email
-
Password
-
Role (Admin, Applicant, Judge, Observer)
-
Questions
-
Question
-
Type (Input, Text, Dropdown, Boolean, File)
-
Options (Text, only used for dropdowns for now)
-
Required
-
Parent
-
Order
-
Applications
-
Name
-
Description
-
Status (New, Submitted, Review, Follow Up, Accepted, Rejected)
-
Objective Score
-
Subjective Score
-
Total Score
-
Scored (Boolean)
-
User ID
-
Answers
-
Application ID
-
Question ID
-
Answer
-
Documents
-
Name
-
Description
-
File
-
Application ID
-
Answer ID (Nullable, cascade on delete set null)
-
User ID (Useful for tracking if admins have attached a file to an application)
-
Criteria
-
Question
-
Type (Objective, Subjective)
-
Required
-
Parent
-
Order
-
Scores
-
Score
-
Answer
-
Application ID
-
Criteria ID
-
User ID (Judge)
-
Judged
-
Application ID
-
User ID (Judge)
-
Feedback
-
Message (So judges can ask questions or give criticism)
-
Type (Input, Text, Dropdown, Boolean, File)
-
Options (Text, only used for dropdowns now)
-
Response (Response from the user)
-
Application ID
-
User ID (Which judge requested the feedback)
-
Regarding ID (The ID of the data this feedback is related to, if any)
-
Regarding Type (Can be a question or a document)
-
Notifications
-
Type (Info, Warning, Email)
-
Status (New, Sent)
-
Message
-
Metadata (Some notifications are queued and combined into a single message)
-
User From
-
User To
- Home page
- User dashboard
- Admin dashboard
- Judge dashboard
- Create question
- Create application
- Answering questions
- Judging applications
- Follow up questions
- One to many + One to one between users <-> applications
- One to one + One to many between answers <-> applications
- One to one between answers -> questions
- One to many + One to one between questions <-> question children
- One to many + One to one between applications <-> documents
- One to many + One to one between questions <-> documents
- One to one between documents -> judges (users)
- One to one + One to many between feedback <-> applications
- One to one between feedback -> judges (users)
- One to one polymorphic between feedback -> answers and documents
- One to one + One to many between scores <-> applications
- One to one between scores -> critera
- One to one between scores -> judges (users)
- User Registered
- Application Submitted
- Application Needs Review
- Application Accepted
- Application Rejected
- Send user email when user is registered
- Send judges email when application is submitted
- Send user email when application feedback is requested
- Send judge email when application feedback is answered
- Send user email when application is accepted / rejected
- Send judge email when application is accepted / rejected
- Send admins all activity
- Create application
- Update application
- Answer questions
- Uploading files
- Review page
- Submitting applications
- Server-side checking for required answers
- AJAX autosave for answers
- View submitted applications
- Remove per-question rating options
- Display judge criteria on review page
- AJAX autosave for judge answers / ratings
- Judge submitting final answers / ratings
- Server-side checking for required answers
- Score aggregation when ratings are submitted
- Provide feedback
- Approve / deny applications