1

I am trying to learn about Google Datastore and creating a basic application to have some practical experience with it opposed to just reading the docs. I would like to create a basic social application where users can send messages to their friends and view the messages their friends have sent them.

My Basic App Requirements:

Users Section:

  • A user registers to the app. The user can then log in by using their username/email and checking if the password is correct and the status must be VALID and not something like DEACTIVATED.
  • A user can also be deleted. When a user is deleted If a user deletes their account their references from all their friends need to be removed and messages needs to be removed (or hidden). This is obviously expensive.

Users Model

-username (need to be able to make equality searches on this field. e.g select * from kind where username = 'Bob') (index)
-email    (need to be able to make equality searches on this field. e.g select * from kind where email = '[email protected]') (index)
-fullname
-password
-status   (need to be able to make equality searches on this field. e.g select * from kind where status = 'DEACTIVATED') (index)
-time_created

Friends Section:

  • A user can query to find all of their friends (Accepted and Pending).
  • A user can add another user to be friends (make sure relationship doesn't already exist and make sure user exists).
  • A user can accept/reject a friend request.
  • A user may have a max of 100 friends.

Friends Model

-User1  (index)
-User2  (index)
-status
-time_created

Messages Section:

  • A user may see all the messages they sent/received to/from confirmed friends

  • A user can send a message to a confirmed friend.

  • A user may receive a message to a confirmed friend.

  • Messages will be paginated in the application so 10 messages at a time come up sorted by the newest coming first.

Messages Model

-from (need to be able to make equality searches on this field. e.g select * from kind where from = 'Bob')
-to (need to be able to make equality searches on this field. e.g select * from kind where to = 'Bob')
-msg
-time_created (need to sort on this so that the newest messages come first)

My plan is to make 3 kinds: Users, Friends, and Messages (each would have the attributes shown above).

Some concerns I have is regarding atomic operations. For users, would it be wiser to create a one way relationship between friends or two-way. If two-way, say the friends request gets accepted or rejected, would the application be atomic? Another question is if a user gets removed, how best to handle this to be inexpensive and keep data consistent.

Is this a good model for this basic/popular type of social application? I am very interested to hear of anyone suggestion how they would implement this basic application and the reasons why.

Cheers!

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.