I am designing an application where users message one another privately, and may send messages to any
Entity in the database (an
Entity may not have a user account yet, it is a professional database). I am not sure how to best design the database and the API to allow messaging unregistered users. The application should remain secure, and data only accessed by those with correct permissions.
Messages sent to persons without user accounts serve as an invitation. The invited person should be able to view the message, act on it, and complete the user registration upon receiving an
In simple terms, I have:
User misc user fields (email, pw, dateJoined) Entity (large professional dataset): personalDetails... user->User (may be null) UserMessage: sender->User recipient->User dateCreated messageContent, other fields..... InviteMessage: sender->User recipient->Entity expiringUrl inviteeEmail inviteePhone
I plan to alert the user when selecting a
recipient that is not registered yet, and inform that he may send the message as an invitation by providing email, phone where we can send the invitation.
Invitations will have a unique, one-time-use URL, e.g.
uuid.uuid4(). When accessed, the invitee will see the
InviteMessage and details about completing his/her registration profile.
When registration is complete,
InviteMessage details to a new instance of
UserMessage (to not lose their data), and assign it to the newly created
The ability to interact with and invite persons who do not yet have accounts is a key feature of the application, and it seems better to separate the invitation from the private, app messages (easier to keep functionality separate, better if data model changes).
- Is this a reasonable, good design?
- If not, what would you suggest?
- Do you have any improvements?
- Am I correct to choose to create a separate endpoint for creating invitations via the API?