---
# System prepended metadata

title: ACM Recruitment Task -- BackEnd Development

---

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



