Skip to end of banner
Go to start of banner

Messaging services

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 53 Next »

Questions

  • (error) Should entities be allowed to have more than one associated message thread?  Or message threads to have more than one associated entity?

  • (error) Should we allow messages to be sent to multiple non-principals at once?
  • Should messages with low numbers of recipients be processed in an immediately consistent manner?
    • This will prevent unreasonable sending-lag and make it possible (if we want) to have real time chat. 
    • (tick) Sending messages to non-principals (i.e. commenting on an entity) does not need asynchronous processing
  • What ACCESS_TYPE should be associated with the ability to comment on an entity?
    • For now, I'm using the SEND_MESSAGE type.  
  • What ACCESS_TYPE should be associated with the ability to message a user?
    • For now, there is no restriction
  • Should the worker use SQS or RDS to manage the flow of messages to send?
    • Proposed RDS implementation:
      • 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
    • The worker cannot (question) rely on Amazon SQS and the ChangeMessage objects (Processed messages are reprocessed after migration, which is not ideal for notifications)
  • How should we bounce messages?  Silently?  Via an auto-generated message?

Objects

NameDBO

DTO

  • UserMessage
  • Primary key: Message ID
  • Key: Thread ID
  • Foreign key: CreatedBy (UserGroup)
  • RecipientType (string)
  • Recipients (gzip-blob)
  • Subject
  • S3 File Handle
  • CreatedOn
  • ID (derived from ID generator)
  • Thread ID (optional or derived from ID generator)
    • (question) Seems like this field can be hidden, instead users supply a replyTo parameter/field, which fills in this value
  • To (RecipientBundle)
  • Subject (string)
  • Message Body (string, no attachments)
  • CreatedOn
  • CreatedBy (principal ID) (upon creation filled in for the authenticated user)
  • Message Status
  • Foreign key: Message ID
  • Foreign key: Recipient ID (UserGroup)
  • States: UNREAD, READ, ARCHIVED
  • ID
  • Recipient
  • State
  • Node Messages
  • Foreign key: Thread ID
  • Foreign key: Node ID
N/A
  • Message Settings
  • Foreign key: User ID (UserGroup)
  • Blob of settings
  • ID
  • Notification levels
    • Update to an owned entity
    • Update to some favorite entity
    • Team
    • Message from user
    • Mail to everyone
    • Etc...
  • Message receipt email (if more than one)
  • Auto-mark mail as read if forwarded to email
  • MessageBundle
N/ABundles the User Message and Message Status
  • RecipientBundle
N/A
  • RecipientType
    • May be a principal, entity, ...
  • Array of IDs
    • All IDs must be valid (404 otherwise)

Other

Services

Note: services that return paginated results are assumed to have limit and offset parameters

MethodURIBodyParametersReturnDescriptionPermission
  • GET
/message/inbox 

orderBy=sendDate

descending=true

Paginated results<MessageBundle>Gets all messages the authenticated user has receivedAuthenticated User
  • GET
/message/outbox 

orderBy=sendDate

descending=true

Paginated results<UserMessage>Gets all messages the authenticated user has sentAuthenticated User
  • POST
/messageUserMessagereplyTo=null (i.e. another 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

  • POST
/message/{id}/forwardRecipientBundle  Forwards a message to other recipients. This is equivalent to getting a (visible) message and POST-ing it to /message 
  • POST
/entity/{id}/commentsUserMessage  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

  • GET
/message/{id}  UserMessageGets a specific messageSender or Receiver
  • GET
/message/{id}/thread 

orderBy=sendDate

descending=true

Paginated results<UserMessage>Gets messages belonging in the same thread as the message ID.  The list is filtered according to the user's ID.Sender or Receiver
  • GET
/entity/{id}/comments 

orderBy=sendDate

descending=true

Paginated results<UserMessage>Gets message belonging to the thread tied to the entity.Authenticated user with READ permission on entity
  • GET
/message/{id}/status  Message StatusGets the status of a messageReceiver
  • PUT
/message/{id}/statusMessage Status  

Marks a message as:

  • READ
  • UNREAD
  • ARCHIVED
Receiver
  • GET
/message/settings  Message SettingsGets the notification settings of the userAuthenticated User
  • PUT
/message/settingsMessage Settings  Changes notification settingsAuthenticated User
  • No labels