...
- How many messages should a user be allowed to send?
- 10/min?
- 1/min?
- 1/sec?
- How many recipients can be sent to at once?
- 10?
- 50?
- Infinite?
How should we configure Amazon SES?
- Proposal:
- Reroute bounce and complaints to SNS
- Have a worker disable emails to hard-bounced recipients
- Also flip flags in settings for complaints
- Store the bounce/complaint in a blob
- Proposal:
- Should users be notified of bounces?
- How should we implement the worker that sends messages?
- Proposal:
- Add a migratable table with a single column of message IDs
- Add a worker that periodically polls the table
- If the table is not empty, process N rows from the top
- Delete rows once finished processing
- Proposal:
- Extend ObjectType to include a "MESSAGE" type
- Have DBOMessage extend ObservableEntity and TaggableEntity
- Send a change message when a message is created
- Implement a worker, subscribed to the repo-changes topic, that looks for MESSAGE-CREATED changes and processes it
- The worker should always check to see if a message has already been sent, so that messages do not get resent every time the stack changes.
- A message has been sent if there is a recipient. The worker is in charge of making sure all sent messages have at least one recipient. In the case where a user sends a message to multiple recipients, all of which are not visible to the user, then the worker should bounce the message back to the user, along with a bounce message. This ensures the message has a row in the MessageStatus table.
- Proposal:
- Should some messages be stored as templates?
- If we start sending out notifications about Entity changes and the like, most of the contents will be similar except for the ID and some small part of the message body. We could conceivably add a flag to the MessageToUser object that tells the client to fill in a messages according to some simple template. Then we could store the key-values of the template in a blob (perhaps following the same schema as StringAnnotations) along with the message.
- What options belong in the settings object?
- Send email when...
- Update to a favorite-ed entity
- Team is messaged
- Message from user
- Admin sends mail to everyone
- Mark message as read if forwarded to email?
- Send email when...
- When someone is added to a conversation, should they be allowed to see all previous messages within the conversation? Or should it be the client's job to forward each individual message to the person?
...
'* per Marcel, Comments may have a more complex set of references/relationships than Messages to Users have. Rather than just 'inReplyTo', it might be that one Comment is an 'answer' to another comment which is a question. Further, the multiple answers to a question may have 'previous' references which order them.
Message sender (worker)
- Extend ObjectType to include a "MESSAGE" type
- Have DBOMessage extend ObservableEntity and TaggableEntity
- Send a change message when a message is created
- Subscribe worker to the repo-changes topic
- Look for MESSAGE-CREATED changes to process
- The worker should always check to see if a message has already been sent, so that messages do not get resent every time the stack changes.
- A message has been sent if there is a recipient. The worker is in charge of making sure all sent messages have at least one recipient. In the case where a user sends a message to multiple recipients, all of which are not visible to the user, then the worker should bounce the message back to the user, along with a bounce message. This ensures the message has a row in the MessageStatus table.
...
Services
- Sorting & Pagination
- Sort by creation date
- Sort by subject
- Sort by recipient name
...