Skip to content

Commit fa1bb5c

Browse files
committed
add more filters to .../patients route and get tests passing
1 parent 697315b commit fa1bb5c

File tree

2 files changed

+21
-11
lines changed

2 files changed

+21
-11
lines changed

backend/app/api/routes/patients.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
PatientsPublic,
1414
PatientUpdate,
1515
)
16+
from app.models.attachments import Attachment
1617
from app.models import Message
1718

1819
router = APIRouter(prefix="/patients", tags=["patients"])
@@ -24,7 +25,10 @@ def read_patients(
2425
current_user: CurrentUser,
2526
skip: int = 0,
2627
limit: int = 100,
27-
history_text: str = None,
28+
history_text: str = None, # full text search for medical history
29+
name_exact: str = None, # exact match for name
30+
name_text: str = None, # full text search for name
31+
has_attachment_mime_type: str = None, # filter by attachment MIME type
2832
) -> Any:
2933
"""
3034
Retrieve patients.
@@ -34,6 +38,12 @@ def read_patients(
3438
filters = []
3539
if history_text:
3640
filters.append(Patient.medical_history.op("@@")(to_tsquery(history_text)))
41+
if name_exact:
42+
filters.append(Patient.name == name_exact)
43+
if name_text:
44+
filters.append(Patient.name.op("@@")(to_tsquery(name_text)))
45+
if has_attachment_mime_type:
46+
filters.append(Patient.attachments.any(Attachment.mime_type == has_attachment_mime_type))
3747

3848
count_statement = select(func.count()).select_from(Patient).filter(*filters)
3949
count = session.exec(count_statement).one()

backend/app/tests/api/routes/test_patients.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -127,12 +127,12 @@ def test_read_patients_name_exact(
127127
) -> None:
128128
# Create test patients with different names
129129
patient1 = Patient(
130-
name="John Smith",
130+
name="Bob Smith",
131131
dob=datetime(2000, 1, 1),
132-
contact_info="john@example.com"
132+
contact_info="bob@example.com"
133133
)
134134
patient2 = Patient(
135-
name="John Doe",
135+
name="Bob Doe",
136136
dob=datetime(2000, 1, 2),
137137
contact_info="[email protected]"
138138
)
@@ -142,13 +142,13 @@ def test_read_patients_name_exact(
142142

143143
# Test exact name match
144144
response = client.get(
145-
"/api/v1/patients/?name_exact=John Smith",
145+
"/api/v1/patients/?name_exact=Bob Smith",
146146
headers=superuser_token_headers,
147147
)
148148
assert response.status_code == 200
149149
content = response.json()
150150
assert content["count"] == 1
151-
assert content["data"][0]["name"] == "John Smith"
151+
assert content["data"][0]["name"] == "Bob Smith"
152152

153153
def test_read_patients_name_text(
154154
client: TestClient, superuser_token_headers: Dict[str, str], db: Session
@@ -208,13 +208,13 @@ def test_read_patients_attachment_filter(
208208

209209
# Add different types of attachments
210210
attachment1 = Attachment(
211-
file_name="test1.pdf",
212-
mime_type="application/pdf",
211+
file_name="test1.bam",
212+
mime_type="application/x-bam",
213213
patient_id=patient1.id
214214
)
215215
attachment2 = Attachment(
216-
file_name="test.jpg",
217-
mime_type="image/jpeg",
216+
file_name="test.cram",
217+
mime_type="application/x-cram",
218218
patient_id=patient2.id
219219
)
220220
db.add(attachment1)
@@ -223,7 +223,7 @@ def test_read_patients_attachment_filter(
223223

224224
# Test filtering by attachment MIME type
225225
response = client.get(
226-
"/api/v1/patients/?has_attachment_mime_type=application/pdf",
226+
"/api/v1/patients/?has_attachment_mime_type=application/x-bam",
227227
headers=superuser_token_headers,
228228
)
229229
assert response.status_code == 200

0 commit comments

Comments
 (0)