Skip to content

Commit

Permalink
Merge pull request #153 from hotosm/feat/project-details
Browse files Browse the repository at this point in the history
Feat: update project details endpoint
  • Loading branch information
nrjadkry authored Aug 15, 2024
2 parents d9dfe01 + 48ce24e commit 8676535
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 14 deletions.
32 changes: 31 additions & 1 deletion src/backend/app/projects/project_crud.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,37 @@ async def get_project_info_by_id(db: Database, project_id: uuid.UUID):
project_record = await db.fetch_one(query, {"project_id": project_id})
if not project_record:
return None
query = """ SELECT id, project_task_index, outline FROM tasks WHERE project_id = :project_id;"""
query = """
SELECT
t.id,
t.project_task_index,
t.outline,
ST_Area(ST_Transform(t.outline, 4326)) / 1000000 AS task_area,
te.user_id,
te.state,
u.name,
CASE
WHEN te.state = 'REQUEST_FOR_MAPPING' THEN 'request logs'
WHEN te.state = 'LOCKED_FOR_MAPPING' THEN 'ongoing'
WHEN te.state = 'UNLOCKED_DONE' THEN 'completed'
WHEN te.state = 'UNFLYABLE_TASK' THEN 'unflyable task'
ELSE '' -- Default case if the state does not match any expected values
END AS state
FROM
tasks t
LEFT JOIN
task_events te
ON
t.id = te.task_id
LEFT JOIN
users u
ON
te.user_id = u.id
WHERE
t.project_id = :project_id;"""

task_records = await db.fetch_all(query, {"project_id": project_id})
project_record.tasks = task_records if task_records is not None else []
project_record.task_count = len(task_records)
Expand Down
19 changes: 6 additions & 13 deletions src/backend/app/projects/project_schemas.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import uuid
import json
from pydantic import BaseModel, computed_field, Field, validator, model_validator
from pydantic import BaseModel, computed_field, Field, model_validator
from typing import Any, Optional, Union, List
from geojson_pydantic import Feature, FeatureCollection, Polygon
from app.models.enums import FinalOutput, ProjectVisibility, State
from app.models.enums import FinalOutput, ProjectVisibility
from shapely import wkb
from datetime import date
from app.utils import (
Expand Down Expand Up @@ -96,17 +96,10 @@ class TaskOut(BaseModel):
id: uuid.UUID
project_task_index: int
outline: Any = Field(exclude=True)
state: Optional[State] = None
contributor: Optional[str] = None

@validator("state", pre=True, always=True)
def validate_state(cls, v):
if isinstance(v, str):
try:
v = State[v]
except KeyError:
raise ValueError(f"Invalid state: {v}")
return v
state: Optional[str] = None
user_id: Optional[str] = None
task_area: Optional[float] = None
name: Optional[str] = None

@computed_field
@property
Expand Down

0 comments on commit 8676535

Please sign in to comment.