# ACM Recruitment Task -- BackEnd Development ## The Idea You will be building the backend service to manage a dog adoption NGO. A person can list a dog for adoption(suppose they found a stray dog, and listed it on the platform) or can adopt a dog already listed(they adopt a dog listed by someone else). Anyone can list a dog for adoption. There can be multiple adoption requests for a dog, for which the admin has the final say on who gets to adopt the dog. Further communication amongst the NGO and adopter can happen off the platform. --- ## Implementing the Idea You can choose your own language+framework combination: - Django+Python - Node+Express As for the app, you are free to either: - Implement the backend+frontend using templates - Implement an API that can be used by a frontend developer. Note: No need to develop the frontend in this case. --- ## Mandatory Features - User authentication. Users must be able to register/login to your app. Do this using username/password or OAuth. - Each user must have a profile in which they can add/update data. This data can be: Name, Bio, Profile Pic, etc. - Users should be able to list a dog for adoption with name, profile-pic, age and gender. - Users should be able to submit adoption requests for a particular dog. - Let the user see a feed on the homepage. This feed should include all the dogs listed for adoption. Note that any adopted dog should not be shown here. - Only the admin should be able to select an adopter amongst all requests. Implement a logic for the same. - Implement a logic for the dog to be marked adopted once the admin selects the adopter. --- ## Bonus Features Once you are done with the mandatory features, here are a few ideas for you to extend the app. Note that you are not expected to implement any of these. They’re just here to give you ideas to stand out. - Let admins shadow ban a user for posting spam. - Implement a sorting algoritm on homepage feed to sort listed dogs for adoption by age and gender. Feel free to add features not mentioned above :) --- ## Evaluation While evaluating your code, we will look at the following: - Your database structure and its implementation in models - Readability of your code - Your ability to explain and describe your design choices (in the code) - Your creativity as a developer You are expected to complete the task within 4-5 days of reception. Have fun :) --- **Note**: You should create a public repository on GitHub with the name "ACM-R3". Even if you're not able to complete the task, push everything you've done to GitHub for evaluation. **Contact**: Reach out to me @wa.me/+919228632935 (Aditya Thakur) in case of any queries.