Develop a backend Django application for managing personal budgets. The application should allow users to create, update, delete, and view budget categories, transactions, and generate reports. Additionally, integrate Celery for background task processing, RabbitMQ as the message broker.
Requirements:
Models:
Create models for BudgetCategory, Transaction, and User with the following fields:
BudgetCategory:
Name
Description
Max Spend /Threshold (maximum allowed spending for the category)
Transaction:
Category (foreign key relationship with BudgetCategory model)
Amount
Description
Owner (foreign key relationship with User model)
Date
API Endpoints:
Implement RESTful API endpoints for CRUD operations on budget categories, transactions, and user management.
Implement token-based authentication using Django REST Framework.
Only authenticated users should be able to perform CRUD operations.
Users can only access and manage their own budget categories and transactions.
Background Task Processing:
Define a Celery task that checks the total spending for each budget category against a predefined threshold.
If the total spending meets 50% of the threshold, send an email notification to the user associated with that budget category.
If the total spending exceeds the threshold, send an email notification to the user associated with that budget category.
The email should contain information about the budget category, the current spending, and a reminder about the predefined threshold.
Testing:
Write unit and integration tests to ensure the correctness of the API endpoints, models and Celery tasks.
You have the freedom to decide what the Request and Response data would look like. Feel free to install any extra packages and libraries you would find helpful (don’t forget to update the requirements.txt file)
You are also free to add any Models you would need and remove the ones that you think are not necessary.
Evaluation Criteria:
Correctness of implementation
Adherence to best practices and guidelines
Effective use of Celery for background task processing
Integration and configuration of RabbitMQ as the message broker