Motivation
Enable users to comment in a threaded manner on website items through a generalized commenting service. Site designers should be able to "Comment-enable" aspects of the website, for example: articles, image galleries, blog entries etc
Comments
Composition of a comment
- Date
- Author ID
- external ID (for top of thread to relate item to external id)
- Comment ID (internal) numeric)
- Reply to ID (internal numeric, Null if root)
- Title (use is optional)
- Body
- Requires moderation flag
- Approve / Decline moderation flag
Relate a thread to an object
Service should be able to relate a thread to a unique key. Example keys
- Article URL
- Image URL
- Content item UUID
- Forum name
Authentication
The commenting system allows authenticated users to interact in a read/write capacity while unauthenticated users have a read only interaction with the comment content. High level requirements for authentication include
- loosely couple with a concept of profile
- Know who the user is:
- User/Screen Name
- Email address
- First Name
- Last Name
- Know who the user is:
- loosely couple with authentication and authorization service
Anonymous
- Read comments
Logged in
- Read comments
- Post a new comment
- Reply to an existing comment
Administrative capabilities
Administrators should be able to
- lock out abusive accounts.
- Perform Moderation
Moderation
Back-office/Editorial moderation
Administrative users should have the ability to moderate the comment stream
- Ability to approve or decline a message at any time
- Messages can be declined (unapproved) at any time
- If a thread exits, the children in the particular branch of the thread should be removed at the same time
- Messages can be declined (unapproved) at any time
Citizen policing
Users should have the ability to flag articles as containing questionable content / requiring moderation.
Scalability and Data Volume
- No part of the model should prohibit the following implementation characteristics
- Use of read-write separation
- Use of sharding
Technical Requirements
- System should be service oriented in order to support RESTful invocation
- profanity filtering
- filtering for cross-site scripting and other browser hacks