File size: 2,705 Bytes
4b12e15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# 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/`