A User logs into the app. On the page, you display the 52 cards in a standard playing cards deck ‘scattered’ on the screen.
At the bottom of the screen, have four ‘card holders’ - each labeled after a house of cards - spade, diamond, clubs, hearts.
The user can ‘clean up’ the space by dragging a card and dropping it into the right card holder.
1) You can only place a card in the correct cardholder. Spades in spades, hearts in hearts, etc.
2) If all cards are put into the right cardholder, show a “restart” button. If clicked, the cards should be again shuffled in the space above.
3) If user logs out, save the progress they made. On second login, game should start from where they left off.
4) Don’t worry about UI design too much - for the cards, just make simple divs with card type and number on it.
5) You can use any library you want for drag and drop.
6) As far as possible, use MEAN stack. If you feel really strongly that you are not comfortable with any part of this stack, you may choose to switch to another technology.
7) Submit your code with:
a) A git repository.
b) A readme file with instructions on how to use the app.
The following user functionality is also requested:
1. Create a new profile with the following fields
2. a. Name b. Age c. Skills - [array]
3. Ability to upload two photos.
4. Minimum size of photo 1280 x 960 pixels
a. Scale both uploaded photos down to 1280 x 960 pixels (figure out if you want to do scaling synchronously or asynchronously)
b. Give option to mark one as profile image.
c. Ensure the pictures are duplicates, even if they have different file names.
5. Ability to edit profile fields in-place by enabling an Edit mode on the profile, and double clicking each field to edit and a small check mark next to each field to save.
6. Build a small in-memory key-value caching system in the same process as the server (e.g. nodejs or php or whatever you are using) to store the responses of all API requests to the server.
7. The cache should support the option of adding data to it as well as removing data from it, with a preset limit of 100 megabytes of items.
a. It will be a key-value cache where the key will be the URL of the request and the value will be the response
b. Figure out the logic for when to do cache-invalidation (e.g. it can be time based expiry or it can be an active invalidation where you remove the item from cache based on when some item is updated in the database or some other logic).