aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Joe Banks <[email protected]>2020-11-30 14:23:53 +0000
committerGravatar Joe Banks <[email protected]>2020-11-30 14:23:53 +0000
commit0cdbea6d6a448852f7daab7045b4414c2f9d64f2 (patch)
treed2bbefb56d877d47c0ee6355f7d939f46afa0fb9
parentMerge pull request #2 from python-discord/ks123/readme (diff)
Add form schema
-rw-r--r--SCHEMA.md123
1 files changed, 117 insertions, 6 deletions
diff --git a/SCHEMA.md b/SCHEMA.md
index c499d43..11e5c86 100644
--- a/SCHEMA.md
+++ b/SCHEMA.md
@@ -1,11 +1,122 @@
-## Form features
+# Forms Schema
-`DISCOVERABLE`: The form should be displayed on the homepage of the forms application.
+Since MongoDB has no set schema, we document it here to document what our objects should look like. If you add new properties or remove them from objects **make sure to update them here**.
-`REQUIRES_LOGIN`: Requires the user to authenticate with Discord before completing the form.
+In this document:
+- [Form structure](#Form_structure)
+ - [Form features](#Form_features)
+ - [Form question](#Form_question)
-`OPEN`: The form is currently accepting responses.
+## Form structure
-`COLLECT_EMAIL`: The form should collect the email from submissions. Requires `REQUIRES_LOGIN`
+| Field | Type | Description | Example |
+| ----------- | ---------------------------------------- | ----------------------------------------------------------------------------------------- | --------------------------- |
+| `id` | Unique identifier | A user selected, unique, descriptive identifier (used in URL routes, so no spaces) | `"ban-appeals"` |
+| `features` | List of [form features](#Form_features) | A list of features to change the behaviour of the form, described in the features section | `["OPEN", "COLLECT_EMAIL"]` |
+| `questions` | List of [form questions](#Form_question) | The list of questions to render on a specific form | Too long! See below |
+| | | | |
-`DISABLE_ANTISPAM`: Disable the anti-spam checks from running on a form submission.
+### Form features
+
+| Flag | Description |
+| ------------------ | ----------------------------------------------------------------------------- |
+| `DISCOVERABLE` | The form should be displayed on the homepage of the forms application. |
+| `REQUIRES_LOGIN` | Requires the user to authenticate with Discord before completing the form. |
+| `OPEN` | The form is currently accepting responses. |
+| `COLLECT_EMAIL` | The form should collect the email from submissions. Requires `REQUIRES_LOGIN` |
+| `DISABLE_ANTISPAM` | Disable the anti-spam checks from running on a form submission. |
+
+### Form question
+
+| Field | Type | Description | Example |
+| ------ | ---------------------------------------- | ------------------------------------------------ | -------------------- |
+| `id` | string | Unique identifier of the question | `"aabbcc"` |
+| `name` | string | Name of the question | `"What's the time?"` |
+| `type` | one of [Question types](#Question_types) | The type of input for this question | `"radio"` |
+| `data` | [Question specific data](#Question_data) | Any specific data for the question type selected | Documented below |
+
+#### Question types
+
+| Name | Description |
+| ------------ | --------------------------------------------------------- |
+| `radio` | Radio buttons |
+| `checkbox` | Checkbox toggle |
+| `select` | Dropdown list |
+| `short_text` | One line input field |
+| `textarea` | Long text input |
+| `code` | Syntax highlighted code input |
+| `range` | Horizontal drag slider |
+| `section` | Not an input, just a section of text to explain something |
+
+#### Question data
+
+Different questions require different input data to render. All data is in an object with keys and values as defined in the below tables. **All fields are required unless stated otherwise**.
+
+##### `radio`
+
+```json
+{
+ // Option list for radio buttons
+ "options": [
+ "Spam",
+ "Eggs",
+ "Ham"
+ ]
+}
+```
+
+##### `checkbox`
+
+Checkboxes require no additional configuration
+
+##### `select`
+
+```json
+{
+ // Option list for select dropdown
+ "options": [
+ "United Kingdom",
+ "United States"
+ ]
+}
+```
+
+##### `short_text`
+
+Short text fields require no additional configuration.
+
+##### `textarea`
+
+Textareas require no additional configuration.
+
+##### `code`
+
+```json
+{
+ // A supported language from https://prismjs.com/#supported-languages
+ "language": "python"
+}
+```
+
+##### `range`
+
+```json
+{
+ // A list of options to put on the range, from left to right
+ "options": [
+ "Not at all",
+ "Not much",
+ "A little",
+ "A lot"
+ ]
+}
+```
+
+##### `section`
+
+```json
+{
+ // OPTIONAL: Additional text to place below the section header
+ "text": "This section will quiz you on A, B and C"
+}
+```