adding assessment details
Browse files
backend/api/application_routes.py
CHANGED
|
@@ -4,7 +4,7 @@ from typing import List
|
|
| 4 |
import json
|
| 5 |
|
| 6 |
from database.database import get_db
|
| 7 |
-
from schemas import ApplicationCreate, ApplicationUpdate, ApplicationResponse, ApplicationListResponse, ApplicationDetailedResponse, ApplicationDetailedListResponse, MyApplicationsListResponse, MyApplicationResponse, MyApplicationsJob, MyApplicationsAssessment
|
| 8 |
from services import create_application, get_application, get_applications_by_job_and_assessment, calculate_application_score, get_applications_by_user
|
| 9 |
from services.assessment_service import get_assessment
|
| 10 |
from services.job_service import get_job
|
|
@@ -56,8 +56,18 @@ def get_applications_list(jid: str, aid: str, page: int = 1, limit: int = 10, db
|
|
| 56 |
# Create response object that matches technical requirements exactly
|
| 57 |
application_response = {
|
| 58 |
'id': application.id,
|
|
|
|
|
|
|
|
|
|
|
|
|
| 59 |
'score': score,
|
| 60 |
'passing_score': assessment.passing_score,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 61 |
'user': {
|
| 62 |
'id': user.id if user else None,
|
| 63 |
'first_name': user.first_name if user else None,
|
|
@@ -179,6 +189,19 @@ def get_application_detail(jid: str, aid: str, id: str, db: Session = Depends(ge
|
|
| 179 |
enriched_answers.append(enriched_answer)
|
| 180 |
|
| 181 |
# Create the detailed response
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 182 |
application_detail = ApplicationDetailedResponse(
|
| 183 |
id=application.id,
|
| 184 |
job_id=application.job_id,
|
|
@@ -187,6 +210,7 @@ def get_application_detail(jid: str, aid: str, id: str, db: Session = Depends(ge
|
|
| 187 |
answers=enriched_answers,
|
| 188 |
score=score,
|
| 189 |
passing_score=assessment.passing_score,
|
|
|
|
| 190 |
user={
|
| 191 |
'id': user.id if user else None,
|
| 192 |
'first_name': user.first_name if user else None,
|
|
|
|
| 4 |
import json
|
| 5 |
|
| 6 |
from database.database import get_db
|
| 7 |
+
from schemas import ApplicationCreate, ApplicationUpdate, ApplicationResponse, ApplicationListResponse, ApplicationDetailedResponse, ApplicationDetailedListResponse, MyApplicationsListResponse, MyApplicationResponse, MyApplicationsJob, MyApplicationsAssessment, ApplicationAssessment
|
| 8 |
from services import create_application, get_application, get_applications_by_job_and_assessment, calculate_application_score, get_applications_by_user
|
| 9 |
from services.assessment_service import get_assessment
|
| 10 |
from services.job_service import get_job
|
|
|
|
| 56 |
# Create response object that matches technical requirements exactly
|
| 57 |
application_response = {
|
| 58 |
'id': application.id,
|
| 59 |
+
'job_id': application.job_id,
|
| 60 |
+
'assessment_id': application.assessment_id,
|
| 61 |
+
'user_id': application.user_id,
|
| 62 |
+
'answers': [], # Not including answers in the list view for performance
|
| 63 |
'score': score,
|
| 64 |
'passing_score': assessment.passing_score,
|
| 65 |
+
'assessment_details': {
|
| 66 |
+
'id': assessment.id,
|
| 67 |
+
'title': assessment.title,
|
| 68 |
+
'passing_score': assessment.passing_score,
|
| 69 |
+
'created_at': None # Assessment model doesn't have created_at field
|
| 70 |
+
},
|
| 71 |
'user': {
|
| 72 |
'id': user.id if user else None,
|
| 73 |
'first_name': user.first_name if user else None,
|
|
|
|
| 189 |
enriched_answers.append(enriched_answer)
|
| 190 |
|
| 191 |
# Create the detailed response
|
| 192 |
+
assessment_details_obj = None
|
| 193 |
+
if assessment:
|
| 194 |
+
try:
|
| 195 |
+
assessment_details_obj = ApplicationAssessment(
|
| 196 |
+
id=assessment.id,
|
| 197 |
+
title=assessment.title,
|
| 198 |
+
passing_score=assessment.passing_score,
|
| 199 |
+
created_at=None # Assessment model doesn't have created_at field
|
| 200 |
+
)
|
| 201 |
+
except Exception as e:
|
| 202 |
+
logger.error(f"Error creating assessment details: {str(e)}")
|
| 203 |
+
assessment_details_obj = None
|
| 204 |
+
|
| 205 |
application_detail = ApplicationDetailedResponse(
|
| 206 |
id=application.id,
|
| 207 |
job_id=application.job_id,
|
|
|
|
| 210 |
answers=enriched_answers,
|
| 211 |
score=score,
|
| 212 |
passing_score=assessment.passing_score,
|
| 213 |
+
assessment_details=assessment_details_obj,
|
| 214 |
user={
|
| 215 |
'id': user.id if user else None,
|
| 216 |
'first_name': user.first_name if user else None,
|
backend/schemas/__init__.py
CHANGED
|
@@ -1,11 +1,11 @@
|
|
| 1 |
from .user import UserBase, UserCreate, UserUpdate, UserResponse, UserLogin, UserLogout, TokenResponse
|
| 2 |
from .job import JobBase, JobCreate, JobUpdate, JobResponse, JobListResponse
|
| 3 |
from .assessment import AssessmentBase, AssessmentCreate, AssessmentUpdate, AssessmentResponse, AssessmentListResponse, AssessmentDetailedResponse, AssessmentRegenerate
|
| 4 |
-
from .application import ApplicationBase, ApplicationCreate, ApplicationUpdate, ApplicationResponse, ApplicationListResponse, ApplicationDetailedResponse, ApplicationDetailedListResponse, MyApplicationsListResponse, MyApplicationResponse, MyApplicationsJob, MyApplicationsAssessment
|
| 5 |
|
| 6 |
__all__ = [
|
| 7 |
"UserBase", "UserCreate", "UserUpdate", "UserResponse", "UserLogin", "UserLogout", "TokenResponse",
|
| 8 |
"JobBase", "JobCreate", "JobUpdate", "JobResponse", "JobListResponse",
|
| 9 |
"AssessmentBase", "AssessmentCreate", "AssessmentUpdate", "AssessmentResponse", "AssessmentListResponse", "AssessmentDetailedResponse", "AssessmentRegenerate",
|
| 10 |
-
"ApplicationBase", "ApplicationCreate", "ApplicationUpdate", "ApplicationResponse", "ApplicationListResponse", "ApplicationDetailedResponse", "ApplicationDetailedListResponse", "MyApplicationsListResponse", "MyApplicationResponse", "MyApplicationsJob", "MyApplicationsAssessment"
|
| 11 |
]
|
|
|
|
| 1 |
from .user import UserBase, UserCreate, UserUpdate, UserResponse, UserLogin, UserLogout, TokenResponse
|
| 2 |
from .job import JobBase, JobCreate, JobUpdate, JobResponse, JobListResponse
|
| 3 |
from .assessment import AssessmentBase, AssessmentCreate, AssessmentUpdate, AssessmentResponse, AssessmentListResponse, AssessmentDetailedResponse, AssessmentRegenerate
|
| 4 |
+
from .application import ApplicationBase, ApplicationCreate, ApplicationUpdate, ApplicationResponse, ApplicationListResponse, ApplicationDetailedResponse, ApplicationDetailedListResponse, MyApplicationsListResponse, MyApplicationResponse, MyApplicationsJob, MyApplicationsAssessment, ApplicationAssessment
|
| 5 |
|
| 6 |
__all__ = [
|
| 7 |
"UserBase", "UserCreate", "UserUpdate", "UserResponse", "UserLogin", "UserLogout", "TokenResponse",
|
| 8 |
"JobBase", "JobCreate", "JobUpdate", "JobResponse", "JobListResponse",
|
| 9 |
"AssessmentBase", "AssessmentCreate", "AssessmentUpdate", "AssessmentResponse", "AssessmentListResponse", "AssessmentDetailedResponse", "AssessmentRegenerate",
|
| 10 |
+
"ApplicationBase", "ApplicationCreate", "ApplicationUpdate", "ApplicationResponse", "ApplicationListResponse", "ApplicationDetailedResponse", "ApplicationDetailedListResponse", "MyApplicationsListResponse", "MyApplicationResponse", "MyApplicationsJob", "MyApplicationsAssessment", "ApplicationAssessment"
|
| 11 |
]
|
backend/schemas/application.py
CHANGED
|
@@ -44,10 +44,17 @@ class ApplicationCreate(ApplicationBase):
|
|
| 44 |
class ApplicationUpdate(BaseModel):
|
| 45 |
answers: Optional[List[ApplicationAnswer]] = Field(None, min_items=1)
|
| 46 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 47 |
class ApplicationResponse(ApplicationBase):
|
| 48 |
id: str
|
| 49 |
score: Optional[float] = None
|
| 50 |
passing_score: Optional[float] = None
|
|
|
|
| 51 |
|
| 52 |
class Config:
|
| 53 |
from_attributes = True
|
|
|
|
| 44 |
class ApplicationUpdate(BaseModel):
|
| 45 |
answers: Optional[List[ApplicationAnswer]] = Field(None, min_items=1)
|
| 46 |
|
| 47 |
+
class ApplicationAssessment(BaseModel):
|
| 48 |
+
id: str
|
| 49 |
+
title: str
|
| 50 |
+
passing_score: Optional[int] = None
|
| 51 |
+
created_at: Optional[str] = None
|
| 52 |
+
|
| 53 |
class ApplicationResponse(ApplicationBase):
|
| 54 |
id: str
|
| 55 |
score: Optional[float] = None
|
| 56 |
passing_score: Optional[float] = None
|
| 57 |
+
assessment_details: Optional[ApplicationAssessment] = None
|
| 58 |
|
| 59 |
class Config:
|
| 60 |
from_attributes = True
|