Use cases
...
Tom has a set of data he wants to public and have people take a look at. However, no one is interested to know his data because no one know who Tom is. Tom would love for people to find his impressive work, but does not want to copy it from his linkedin profile to his post. He would love for his work to be shown in every posts somehow so that it gives more credits to what he says.
Approach
Image RemovedImage Added
Each project has a Forum. A Forum has one or many ModeratorModerators, and many Threads. A Thread is created by a user (Author) and has many Replies. A Replies Reply is created by a user (Author).
In the second phase, we could add new features so that a user could help the community by marking a Thread is helpful, and by marking a Reply is helpful or unhelpful.
...
Mockups
Phase 1
Summary View
Paginated Threads
Image Added
Thread View
Paginated Replies
Image Added
Author View
Moderator View
Phase 2
Summary View
Image Removed
Thread View
Image Removed
Files View
Image Removed
Query Result View
Image Removed
Models
Image Removed
API
...
Removed (Hidden) Replies
Image Added
New Thread
Image Added
New Reply
Image Added
Models
Image Added
API
| Action | Intended User | URI | Method | Request Parameters | Request Body | Response Body | Notification Sent to ( |
Phase 2P2) |
1 | Get Forum Metadata for a Project | authorized user | /forum/{projectId} | GET |
| | Update Forum Description | Moderator | /forum/{forumId}/description | PUT | | String | | |
|
2 | Get Threads of a Forum | authorized user | /forum/{forumId}/threads | GET | order, limit, offset |
|
3 | Create a Thread | authorized user | /thread | POST |
|
4 | Get a Thread by its ID | authorized user | /thread/{threadId} | GET |
|
|
5 | Create a Reply | authorized user | /reply | POST |
|
| CreateReply | Reply | Thread’s Author |
6 | Get a Reply by its ID | authorized user | /reply/{replyId} | GET |
| Flag authorized userModerator | /thread/{threadId} |
/flagPUTFlag | | | Moderator | authorized userModerator | /reply/{replyId} |
/flagPUT | | | Moderator | Pin
|
|
|
|
9 | Get Replies for a Thread |
Moderatorauthorized user | /thread/{threadId}/ |
pinUnpin a Thread | ModeratorPUT | | | | | GET | order, limit, offset |
| PaginatedReplies |
|
10 | Update a Thread’s Message | Author | /thread/{threadId}/ |
unpin Remove a Flag on a Thread | Moderator | /thread/{threadId}/unflag | PUT | | | | |
Remove a Flag on a Reply | Moderator | /reply/{replyId}/unflag | PUT | | | | |
Remove a Reply | Moderator | /reply/{replyId} | DELETE | | | | |
Remove a Thread | | | 11 | Update a Reply’s Message | Author | /reply/{replyId}/message | PUT |
| String |
|
|
12 | Update a Thread's title | Author | /thread/{threadId}/title | PUT |
| String |
|
|
13 | Restore a deleted thread | Moderator | /thread/{threadId}/restore |
DELETE | | | | Get Replies for a Thread
|
|
|
|
14 | Retrieve a paginated list of moderator for a given forum | authorized user | / |
threadthreadIdrepliesorder, PaginatedRepliesFuture Potential Extensions
...
...
Search
Notification
Vote (up and down) on responses
Flag a thread/ response as inappropriate
Mark a thread as helpful
Be able to see that there are discussions on a file / table* - DONE
Be able to link to a thread - DONE
- Moderator would be able to close a thread and link to another thread