...
Name | DBO | Migration | DTO | ||||
---|---|---|---|---|---|---|---|
(Immutable after creation) |
| Backup via ID Note: Etag is required because MessageStatus is mutable. | Interface
| ||||
(Immutable after creation) |
| Secondary to MessageContent | Implements MessageContent
| ||||
(Immutable after creation) |
| Secondary to MessageContent | |||||
|
| Secondary to MessageContent |
| ||||
(Immutable after creation) |
| Secondary to MessageContent | Implements MessageContent
| ||||
| Part of UserProfile Use existing services to support this | Secondary to UserGroup |
| ||||
|
| TBD |
|
|
| TBD |
|
| Bundles the MessageToUser and Message Status | ||||||
|
|
...
- 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.
- TBD: Process change of other ObjectTypes (i.e. ENTITY) for notifications
- Needs additional state: either a link between ObjectID/Type and messageContent or ObjectID/Type and UserID
...
Method | URI | Body | Parameters | Return | Description | Permission |
---|---|---|---|---|---|---|
| /message | Message | inReplyTo=null (i.e. another Message) | Message | Sends a message. Note, message delivery permission is on a recipient-by-recipient basis, asynchronous to the message creation. Unauthorized delivery may result in silent failure or a bounce message (TBD). | Authenticated User
Must be admin to send to AUTH_USERS Must have SEND_MESSAGE permission on team to send to team |
| /message/inbox | Sorting + pagination | Paginated results<MessageBundle> | Gets all messages the authenticated user has received | Authenticated User | |
| /message/outbox | Sorting + pagination | Paginated results<Message> | Gets all messages the authenticated user has sent | Authenticated User | |
| /message/{id} | Message | Gets a specific message | Sender or Receiver | ||
| /message/{id}/forward | MessageRecipientSet | Message | Forwards a message to other recipients. This is equivalent to getting a (visible) message and POST-ing it to /message | Sender or Receiver | |
| /message/{id}/conversation | Sorting + pagination | Paginated results<Message> | Gets messages belonging in the same thread as the message ID. The list is filtered according to the user's ID. | Sender or Receiver | |
| /message/status | MessageStatus | Marks a message as:
| Receiver | ||
| /entity/{id}/comments | Message | Message | Convenience method for commenting on an entity. The service fills out fields like message ID, thread ID, and recipients, leaving just subject and body for the user. | Authenticated user with SEND_MESSAGE permission on entity | |
| /entity/{id}/comments | Sorting + pagination | Paginated results<Message> | Gets message belonging to the thread tied to the entity. | Authenticated user with READ permission on entity | |
| /message/settings | MessageSettings | Gets the notification settings of the user | Authenticated User | ||
| /message/settings | MessageSettings | Changes notification settings | Authenticated User |