| # Adding New Routes |
|
|
| This document explains how to add new routes to the application using the dynamic route registration system. |
|
|
| ## Overview |
|
|
| The application now uses a dynamic route registration system that automatically discovers and registers all Flask blueprints in the `routes` directory. This means you no longer need to manually import and register blueprints in `app.py`. |
|
|
| ## How to Add a New Route |
|
|
| 1. **Create a new route file** |
|
|
| Create a new Python file in the appropriate location in the `routes` directory. For a v1 API endpoint, you would typically place it in a subdirectory under `routes/v1/` based on the functionality. |
|
|
| For example: |
| ``` |
| routes/v1/email/send_email.py |
| ``` |
|
|
| 2. **Define your Blueprint** |
|
|
| In your route file, define a Flask Blueprint with a unique name. Make sure to follow the naming convention: |
| |
| ```python |
| # routes/v1/email/send_email.py |
| from flask import Blueprint, request |
| from services.authentication import authenticate |
| from app_utils import queue_task_wrapper |
| |
| v1_email_send_bp = Blueprint('v1_email_send', __name__) |
| |
| @v1_email_send_bp.route('/v1/email/send', methods=['POST']) |
| @authenticate |
| @queue_task_wrapper(bypass_queue=False) |
| def send_email(job_id, data): |
| """ |
| Send an email |
| |
| Args: |
| job_id (str): Job ID assigned by queue_task_wrapper |
| data (dict): Request data containing email details |
| |
| Returns: |
| Tuple of (response_data, endpoint_string, status_code) |
| """ |
| # Your implementation here |
| endpoint = "/v1/email/send" |
| |
| # Return response |
| return {"message": "Email sent"}, endpoint, 200 |
| ``` |
|
|
| 3. **That's it!** |
|
|
| No need to modify `app.py`. The blueprint will be automatically discovered and registered when the application starts. |
|
|
| ## Naming Conventions |
|
|
| When creating new routes, please follow these naming conventions: |
|
|
| 1. **Blueprint names**: Use the format `{version}_{category}_{action}_bp` |
| - Example: `v1_email_send_bp` for sending emails |
|
|
| 2. **Route paths**: Use the format `/{version}/{category}/{action}` |
| - Example: `/v1/email/send` |
|
|
| 3. **File structure**: Place files in directories that match the route structure |
| - Example: `routes/v1/email/send_email.py` |
|
|
| ## Testing Your Route |
|
|
| After adding your route, restart the application and your new endpoint should be available immediately. |
|
|
| ## Troubleshooting |
|
|
| If your route isn't being registered: |
|
|
| 1. Check logs for any import errors |
| 2. Ensure your blueprint variable is defined at the module level |
| 3. Verify the blueprint name follows the naming convention |
| 4. Make sure your Python file is in the correct directory under `routes/` |