Skip to content

Commit

Permalink
Project statistics and User project statistics refactored
Browse files Browse the repository at this point in the history
  • Loading branch information
prabinoid committed Sep 9, 2024
1 parent a6ce53d commit 9619e83
Show file tree
Hide file tree
Showing 4 changed files with 234 additions and 217 deletions.
17 changes: 9 additions & 8 deletions backend/api/projects/statistics.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
from backend.db import get_session
from sqlalchemy.ext.asyncio import AsyncSession

from backend.db import get_db
from databases import Database

router = APIRouter(
prefix="/projects",
tags=["projects"],
Expand Down Expand Up @@ -32,7 +35,7 @@ async def get():


@router.get("/{project_id}/statistics/")
async def get(project_id: int, session: AsyncSession = Depends(get_session)):
async def get(project_id: int, db: Database = Depends(get_db)):
"""
Get Project Stats
---
Expand Down Expand Up @@ -61,14 +64,12 @@ async def get(project_id: int, session: AsyncSession = Depends(get_session)):
500:
description: Internal Server Error
"""
# preferred_locale = request.environ.get("HTTP_ACCEPT_LANGUAGE")
summary = await ProjectService.get_project_stats(project_id, session)
return summary.model_dump(by_alias=True), 200
summary = await ProjectService.get_project_stats(project_id, db)
return summary


# class ProjectsStatisticsQueriesUsernameAPI(Resource):
@router.get("/{project_id}/statistics/queries/{username}/")
async def get(project_id, username):
async def get(project_id: int, username: str, db: Database = Depends(get_db)):
"""
Get detailed stats about user
---
Expand Down Expand Up @@ -97,5 +98,5 @@ async def get(project_id, username):
500:
description: Internal Server Error
"""
stats_dto = ProjectService.get_project_user_stats(project_id, username)
return stats_dto.model_dump(by_alias=True), 200
stats_dto = await ProjectService.get_project_user_stats(project_id, username, db)
return stats_dto
45 changes: 25 additions & 20 deletions backend/models/dtos/project_dto.py
Original file line number Diff line number Diff line change
Expand Up @@ -545,27 +545,32 @@ def __init__(self):
class ProjectStatsDTO(BaseModel):
"""DTO for detailed stats on a project"""

project_id: Optional[int] = Field(alias="projectId", default=None)
area: float = Field(None, alias="projectArea(in sq.km)")
total_mappers: int = Field(None, alias="totalMappers")
total_tasks: int = Field(None, alias="totalTasks")
total_comments: int = Field(None, alias="totalComments")
total_mapping_time: int = Field(None, alias="totalMappingTime")
total_validation_time: int = Field(None, alias="totalValidationTime")
total_time_spent: int = Field(None, alias="totalTimeSpent")
average_mapping_time: int = Field(None, alias="averageMappingTime")
average_validation_time: int = Field(None, alias="averageValidationTime")
percent_mapped: int = Field(None, alias="percentMapped")
percent_validated: int = Field(None, alias="percentValidated")
percent_bad_imagery: int = Field(None, alias="percentBadImagery")
aoi_centroid: str = Field(None, alias="aoiCentroid")
time_to_finish_mapping: int = Field(None, alias="timeToFinishMapping")
time_to_finish_validating: int = Field(None, alias="timeToFinishValidating")

project_id: Optional[int] = Field(None, alias="projectId")
area: Optional[float] = Field(None, alias="projectArea(in sq.km)")
total_mappers: Optional[int] = Field(None, alias="totalMappers")
total_tasks: Optional[int] = Field(None, alias="totalTasks")
total_comments: Optional[int] = Field(None, alias="totalComments")
total_mapping_time: Optional[int] = Field(None, alias="totalMappingTime")
total_validation_time: Optional[int] = Field(None, alias="totalValidationTime")
total_time_spent: Optional[int] = Field(None, alias="totalTimeSpent")
average_mapping_time: Optional[int] = Field(None, alias="averageMappingTime")
average_validation_time: Optional[int] = Field(None, alias="averageValidationTime")
percent_mapped: Optional[int] = Field(None, alias="percentMapped")
percent_validated: Optional[int] = Field(None, alias="percentValidated")
percent_bad_imagery: Optional[int] = Field(None, alias="percentBadImagery")
aoi_centroid: Optional[str] = Field(None, alias="aoiCentroid")
time_to_finish_mapping: Optional[int] = Field(None, alias="timeToFinishMapping")
time_to_finish_validating: Optional[int] = Field(None, alias="timeToFinishValidating")

class Config:
populate_by_name = True

class ProjectUserStatsDTO(BaseModel):
"""DTO for time spent by users on a project"""

time_spent_mapping: int = Field(alias="timeSpentMapping")
time_spent_validating: int = Field(alias="timeSpentValidating")
total_time_spent: int = Field(alias="totalTimeSpent")
time_spent_mapping: Optional[int] = Field(default=0, alias="timeSpentMapping")
time_spent_validating: Optional[int] = Field(default=0, alias="timeSpentValidating")
total_time_spent: Optional[int] = Field(default=0, alias="totalTimeSpent")

class Config:
populate_by_name = True
Loading

0 comments on commit 9619e83

Please sign in to comment.