main
I'll provide a more in-depth explanation of the YetiForce FastAPI application based on the documents you've shared. Let's break down the key aspects of the application:
Architecture Overview
This is a FastAPI-based web application that serves as an intermediary between client applications and a YetiForce CRM system. The primary purpose is to manage various types of feedback and user-related operations.
Key Technical Components
1. Application Setup
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
- Uses FastAPI for creating the web API
- Configures CORS (Cross-Origin Resource Sharing) middleware to allow requests from any origin
- This makes the API flexible and accessible from different client applications
2. Logging Configuration
logger = setup_logger(
name="Api",
log_file="Api.log",
level=logging.DEBUG,
fieldstyle=temp_fieldstyle
)
- Custom logging setup using a
setup_loggerfunction - Logs are color-coded using the
richlibrary - Writes logs to "Api.log" file
- Set to DEBUG level for comprehensive logging
3. YetiForce Client Initialization
ywr = YetiForceClientCredentials().load_from_config()
- Uses a credentials management system to load YetiForce CRM client configuration
- Allows secure and flexible authentication to the CRM system
4. Pydantic Models for Data Validation
class FamilyFeedbackBody(BaseModel):
feedbackBody: str
cleaningScore: str
foodScore: str
# ... other fields
- Uses Pydantic models to define the structure of incoming JSON data
- Provides automatic validation and serialization of request bodies
- Ensures data integrity before processing
Endpoint Categories
-
User Authentication and Retrieval
/getUser: Retrieve user details/trylogUser: Attempt user login/checkNumberMail: Check profile completion status
-
Feedback Creation Endpoints
/createFeedbackFamily/createFeedbackPlacement/createFeedbackErasmus/createFeedbackHybrid
-
Feedback Check Endpoints
/check_family_feedback/check_placement_feedback/check_erasmus_feedback/check_hybrid_feedback
Interesting Technical Details
Token Renewal
@app.on_event('startup')
@repeat_every(seconds=60*60) # 1 hour
async def print_hello():
logger.info("Polling for new tokens")
ywr._RenewToken()
- Automatically renews authentication tokens every hour
- Ensures continuous access to the YetiForce CRM
Error Handling Pattern
if data.get("status") == 1:
response.status_code = status.HTTP_200_OK
else:
response.status_code = status.HTTP_400_BAD_REQUEST
- Consistent error handling across endpoints
- Uses status codes to communicate the result of operations
Main Use Cases
-
Managing different types of feedback:
- Host family experiences
- Job placement experiences
- Erasmus program experiences
- Hybrid learning experiences
-
User authentication and profile management
-
Checking existing feedback submissions
Potential Improvements
- Implement more robust error handling
- Add more comprehensive input validation
- Consider rate limiting
- Enhance logging with more context
Technology Stack
- FastAPI
- Pydantic
- YetiForce Wrapper
- Rich (for logging)
- Requests library
This application provides a flexible, secure, and well-structured API for managing user feedback and interactions with a CRM system.