# 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.