Skip to content
Closed
11 changes: 7 additions & 4 deletions care/emr/api/viewsets/encounter.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
Patient,
)
from care.emr.models.patient import PatientIdentifier, PatientIdentifierConfig
from care.emr.resources.base import model_from_cache
from care.emr.resources.encounter.constants import COMPLETED_CHOICES, StatusChoices
from care.emr.resources.encounter.spec import (
EncounterCareTeamMemberWriteSpec,
Expand Down Expand Up @@ -251,9 +252,9 @@ def organizations(self, request, *args, **kwargs):
encounter=instance
).select_related("organization")
data = [
FacilityOrganizationReadSpec.serialize(
encounter_organization.organization
).to_json()
model_from_cache(
FacilityOrganizationReadSpec, id=encounter_organization.organization.id
)
for encounter_organization in encounter_organizations
]
return Response({"results": data})
Expand Down Expand Up @@ -283,7 +284,9 @@ def organizations_add(self, request, *args, **kwargs):
EncounterOrganization.objects.create(
encounter=instance, organization=organization
)
return Response(FacilityOrganizationReadSpec.serialize(organization).to_json())
return Response(
model_from_cache(FacilityOrganizationReadSpec, id=organization.id)
)

@extend_schema(
request=EncounterOrganizationManageSpec,
Expand Down
11 changes: 7 additions & 4 deletions care/emr/api/viewsets/location.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
FacilityLocationOrganization,
)
from care.emr.models.organization import FacilityOrganization, FacilityOrganizationUser
from care.emr.resources.base import model_from_cache
from care.emr.resources.encounter.constants import COMPLETED_CHOICES
from care.emr.resources.facility_organization.spec import FacilityOrganizationReadSpec
from care.emr.resources.location.spec import (
Expand Down Expand Up @@ -180,9 +181,9 @@ def organizations(self, request, *args, **kwargs):
location=instance
).select_related("organization")
data = [
FacilityOrganizationReadSpec.serialize(
encounter_organization.organization
).to_json()
model_from_cache(
FacilityOrganizationReadSpec, id=encounter_organization.organization.id
)
for encounter_organization in encounter_organizations
]
return Response({"results": data})
Expand Down Expand Up @@ -219,7 +220,9 @@ def organizations_add(self, request, *args, **kwargs):
FacilityLocationOrganization.objects.create(
location=instance, organization=organization
)
return Response(FacilityOrganizationReadSpec.serialize(organization).to_json())
return Response(
model_from_cache(FacilityOrganizationReadSpec, id=organization.id)
)

@extend_schema(
request=FacilityLocationOrganizationManageSpec, responses={200: None}
Expand Down
5 changes: 3 additions & 2 deletions care/emr/api/viewsets/patient.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from care.emr.models import Organization, PatientUser, TokenBooking
from care.emr.models.patient import Patient, PatientIdentifier, PatientIdentifierConfig
from care.emr.models.scheduling.token import Token
from care.emr.resources.base import model_from_cache
from care.emr.resources.patient.spec import (
PatientCreateSpec,
PatientIdentifierConfigRequest,
Expand Down Expand Up @@ -278,7 +279,7 @@ def get_users(self, request, *args, **kwargs):
patient = self.get_object()
patient_users = PatientUser.objects.filter(patient=patient)
data = [
UserSpec.serialize(patient_user.user).to_json()
model_from_cache(UserSpec, id=patient_user.user_id)
for patient_user in patient_users
]
return Response({"results": data})
Expand All @@ -298,7 +299,7 @@ def add_user(self, request, *args, **kwargs):
if PatientUser.objects.filter(user=user, patient=patient).exists():
raise ValidationError("User already exists")
PatientUser.objects.create(user=user, patient=patient, role=role)
return Response(UserSpec.serialize(user).to_json())
return Response(model_from_cache(UserSpec, id=user.id))

class PatientUserDeleteSpec(BaseModel):
user: UUID4
Expand Down
13 changes: 7 additions & 6 deletions care/emr/api/viewsets/questionnaire.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
QuestionnaireTag,
)
from care.emr.models.questionnaire import FormSubmission, QuestionnaireResponse
from care.emr.resources.base import model_from_cache
from care.emr.resources.form_submission.spec import FormSubmissionStatusChoices
from care.emr.resources.organization.spec import OrganizationReadSpec
from care.emr.resources.questionnaire.spec import (
Expand Down Expand Up @@ -186,10 +187,10 @@ def get_organizations(self, request, *args, **kwargs):
questionnaire = self.get_object()
questionnaire_organizations = QuestionnaireOrganization.objects.filter(
questionnaire=questionnaire
).select_related("organization")
).values_list("organization_id", flat=True)
organizations_serialized = [
OrganizationReadSpec.serialize(obj.organization).to_json()
for obj in questionnaire_organizations
model_from_cache(OrganizationReadSpec, id=org_id)
for org_id in questionnaire_organizations
]
return Response(
{
Expand Down Expand Up @@ -247,10 +248,10 @@ def set_organizations(self, request, *args, **kwargs):
questionnaire=questionnaire, organization=organization
)
organizations_serialized = [
OrganizationReadSpec.serialize(obj.organization).to_json()
for obj in QuestionnaireOrganization.objects.filter(
model_from_cache(OrganizationReadSpec, id=org_id)
for org_id in QuestionnaireOrganization.objects.filter(
questionnaire=questionnaire
).select_related("organization")
).values_list("organization_id", flat=True)
]
return Response(
{
Expand Down
3 changes: 2 additions & 1 deletion care/emr/api/viewsets/scheduling/booking.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
)
from care.emr.models.scheduling import SchedulableResource, TokenBooking
from care.emr.models.scheduling.token import Token, TokenCategory, TokenQueue
from care.emr.resources.base import model_from_cache
from care.emr.resources.charge_item.handle_charge_item_cancel import (
handle_charge_item_cancel,
)
Expand Down Expand Up @@ -275,7 +276,7 @@ def available_users(self, request, *args, **kwargs):
return Response(
{
"users": [
UserSpec.serialize(user_resource.user).to_json()
model_from_cache(UserSpec, id=user_resource.user_id)
for user_resource in user_resources
]
}
Expand Down
3 changes: 2 additions & 1 deletion care/emr/models/location.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ class FacilityLocation(EMRBaseModel):
cache_expiry_days = 15

def get_parent_json(self):
from care.emr.resources.base import model_from_cache
from care.emr.resources.location.spec import FacilityLocationListSpec

if self.parent_id:
Expand All @@ -46,7 +47,7 @@ def get_parent_json(self):
):
return self.cached_parent_json
self.parent.get_parent_json()
temp_data = FacilityLocationListSpec.serialize(self.parent).to_json()
temp_data = model_from_cache(FacilityLocationListSpec, id=self.parent.id)
temp_data["cache_expiry"] = str(
timezone.now() + timedelta(days=self.cache_expiry_days)
)
Expand Down
4 changes: 2 additions & 2 deletions care/emr/resources/activity_definition/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from care.emr.resources.activity_definition.valueset import (
ACTIVITY_DEFINITION_PROCEDURE_CODE_VALUESET,
)
from care.emr.resources.base import EMRResource
from care.emr.resources.base import EMRResource, model_from_cache
from care.emr.resources.charge_item_definition.spec import ChargeItemDefinitionReadSpec
from care.emr.resources.healthcare_service.spec import HealthcareServiceReadSpec
from care.emr.resources.location.spec import FacilityLocationListSpec
Expand Down Expand Up @@ -150,7 +150,7 @@ def perform_extra_serialization(cls, mapping, obj):
location_obj = FacilityLocation.objects.filter(id=location).first()
if not location_obj:
continue
locations.append(FacilityLocationListSpec.serialize(location_obj).to_json())
locations.append(model_from_cache(FacilityLocationListSpec, id=location))
mapping["locations"] = locations
if obj.healthcare_service:
mapping["healthcare_service"] = HealthcareServiceReadSpec.serialize(
Expand Down
6 changes: 1 addition & 5 deletions care/emr/resources/allergy_intolerance/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
from care.emr.resources.allergy_intolerance.valueset import CARE_ALLERGY_CODE_VALUESET
from care.emr.resources.base import EMRResource
from care.emr.resources.common.coding import Coding
from care.emr.resources.user.spec import UserSpec
from care.emr.utils.valueset_coding_type import ValueSetBoundCoding


Expand Down Expand Up @@ -134,9 +133,6 @@ class AllergyIntoleranceReadSpec(BaseAllergyIntoleranceSpec):
@classmethod
def perform_extra_serialization(cls, mapping, obj):
mapping["id"] = obj.external_id
if obj.created_by:
mapping["created_by"] = UserSpec.serialize(obj.created_by)
if obj.updated_by:
mapping["updated_by"] = UserSpec.serialize(obj.updated_by)
cls.serialize_audit_users(mapping, obj)
if obj.encounter:
mapping["encounter"] = obj.encounter.external_id
5 changes: 1 addition & 4 deletions care/emr/resources/condition/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,10 +131,7 @@ def perform_extra_serialization(cls, mapping, obj):
if obj.encounter:
mapping["encounter"] = obj.encounter.external_id

if obj.created_by:
mapping["created_by"] = UserSpec.serialize(obj.created_by)
if obj.updated_by:
mapping["updated_by"] = UserSpec.serialize(obj.updated_by)
cls.serialize_audit_users(mapping, obj)


class ConditionUpdateSpec(BaseConditionSpec):
Expand Down
8 changes: 4 additions & 4 deletions care/emr/resources/consent/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

from care.emr.models import Encounter, FileUpload
from care.emr.models.consent import Consent
from care.emr.resources.base import EMRResource, PeriodSpec
from care.emr.resources.base import EMRResource, PeriodSpec, model_from_cache
from care.emr.resources.file_upload.spec import (
FileCategoryChoices,
FileTypeChoices,
Expand Down Expand Up @@ -117,9 +117,9 @@ def perform_extra_serialization(cls, mapping, obj):
mapping["encounter"] = obj.encounter.external_id

for verification in obj.verification_details:
verification["verified_by"] = UserSpec.serialize(
User.objects.get(external_id=verification["verified_by"])
).to_json()
verification["verified_by"] = model_from_cache(
UserSpec, external_id=verification["verified_by"]
)

mapping["verification_details"] = obj.verification_details

Expand Down
10 changes: 4 additions & 6 deletions care/emr/resources/device/history_spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@
from pydantic import UUID4

from care.emr.models import DeviceServiceHistory
from care.emr.resources.base import EMRResource
from care.emr.resources.base import EMRResource, model_from_cache
from care.emr.resources.user.spec import UserSpec
from care.users.models import User


class DeviceServiceHistorySpecBase(EMRResource):
Expand Down Expand Up @@ -41,10 +40,9 @@ def perform_extra_serialization(cls, mapping, obj):
edit_history = []
for history in obj.edit_history:
user = history.get("updated_by")
user_obj = User.objects.filter(id=user).first()
if user_obj:
history["updated_by"] = UserSpec.serialize(user_obj).to_json()
if user:
history["updated_by"] = model_from_cache(UserSpec, id=user)
else:
history["updated_by"] = {} # Edge Case
history["updated_by"] = {}
edit_history.append(history)
mapping["edit_history"] = edit_history
20 changes: 10 additions & 10 deletions care/emr/resources/device/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from care.emr.models import Device, DeviceEncounterHistory, DeviceLocationHistory
from care.emr.registries.device_type.device_registry import DeviceTypeRegistry
from care.emr.resources.base import EMRResource
from care.emr.resources.base import EMRResource, model_from_cache
from care.emr.resources.common.contact_point import ContactPoint
from care.emr.resources.encounter.spec import EncounterListSpec
from care.emr.resources.facility_organization.spec import FacilityOrganizationReadSpec
Expand Down Expand Up @@ -97,9 +97,9 @@ def perform_extra_serialization(cls, mapping, obj):
mapping["current_location"] = None
mapping["current_encounter"] = None
if obj.current_location:
mapping["current_location"] = FacilityLocationListSpec.serialize(
obj.current_location
).to_json()
mapping["current_location"] = model_from_cache(
FacilityLocationListSpec, id=obj.current_location.id
)
if obj.current_encounter:
mapping["current_encounter"] = EncounterListSpec.serialize(
obj.current_encounter
Expand All @@ -110,9 +110,9 @@ def perform_extra_serialization(cls, mapping, obj):
mapping["care_metadata"] = care_device_class().retrieve(obj)

if obj.managing_organization:
mapping["managing_organization"] = FacilityOrganizationReadSpec.serialize(
obj.managing_organization
).to_json()
mapping["managing_organization"] = model_from_cache(
FacilityOrganizationReadSpec, id=obj.managing_organization.id
)


class DeviceLocationHistoryListSpec(EMRResource):
Expand All @@ -131,9 +131,9 @@ class DeviceLocationHistoryListSpec(EMRResource):
def perform_extra_serialization(cls, mapping, obj):
mapping["id"] = obj.external_id
if obj.location:
mapping["location"] = FacilityLocationListSpec.serialize(
obj.location
).to_json()
mapping["location"] = model_from_cache(
FacilityLocationListSpec, id=obj.location.id
)
cls.serialize_audit_users(mapping, obj)


Expand Down
10 changes: 6 additions & 4 deletions care/emr/resources/encounter/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,14 +158,16 @@ def perform_extra_serialization(cls, mapping, obj):
).to_json()
organizations = EncounterOrganization.objects.filter(encounter=obj)
mapping["organizations"] = [
FacilityOrganizationReadSpec.serialize(encounter_org.organization).to_json()
model_from_cache(
FacilityOrganizationReadSpec, id=encounter_org.organization.id
)
for encounter_org in organizations
]
mapping["current_location"] = None
if obj.current_location:
mapping["current_location"] = FacilityLocationListSpec.serialize(
obj.current_location
).to_json()
mapping["current_location"] = model_from_cache(
FacilityLocationListSpec, id=obj.current_location.id
)
mapping["location_history"] = [
FacilityLocationEncounterListSpecWithLocation.serialize(i)
for i in FacilityLocationEncounter.objects.filter(encounter=obj).order_by(
Expand Down
17 changes: 7 additions & 10 deletions care/emr/resources/facility/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,17 +106,14 @@ class FacilityReadSpec(FacilityBaseSpec):

@classmethod
def perform_extra_serialization(cls, mapping, obj):
from care.emr.resources.user.spec import UserSpec

mapping["id"] = obj.external_id
mapping["read_cover_image_url"] = obj.read_cover_image_url()
if obj.created_by:
mapping["created_by"] = model_from_cache(UserSpec, id=obj.created_by_id)
cls.serialize_audit_users(mapping, obj)
mapping["facility_type"] = REVERSE_FACILITY_TYPES[obj.facility_type]
if obj.geo_organization:
mapping["geo_organization"] = OrganizationReadSpec.serialize(
obj.geo_organization
).to_json()
mapping["geo_organization"] = model_from_cache(
OrganizationReadSpec, id=obj.geo_organization.id
)


class FacilityRetrieveSpec(FacilityReadSpec, FacilityPermissionsMixin):
Expand Down Expand Up @@ -216,6 +213,6 @@ def perform_extra_serialization(cls, mapping, obj):
mapping["read_cover_image_url"] = obj.read_cover_image_url()
mapping["facility_type"] = REVERSE_FACILITY_TYPES[obj.facility_type]
if obj.geo_organization:
mapping["geo_organization"] = OrganizationReadSpec.serialize(
obj.geo_organization
).to_json()
mapping["geo_organization"] = model_from_cache(
OrganizationReadSpec, id=obj.geo_organization.id
)
9 changes: 3 additions & 6 deletions care/emr/resources/facility_organization/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from pydantic import UUID4, field_validator, model_validator

from care.emr.models.organization import FacilityOrganization
from care.emr.resources.base import EMRResource
from care.emr.resources.base import EMRResource, cacheable
from care.emr.resources.user.spec import UserSpec
from care.facility.models import Facility
from care.security.authorization import AuthorizationController
Expand Down Expand Up @@ -71,6 +71,7 @@ def perform_extra_deserialization(self, is_update, obj):
obj.parent = None


@cacheable
class FacilityOrganizationReadSpec(FacilityOrganizationBaseSpec):
org_type: FacilityOrganizationTypeChoices
parent: UUID4 | None = None
Expand All @@ -85,11 +86,7 @@ class FacilityOrganizationReadSpec(FacilityOrganizationBaseSpec):
def perform_extra_serialization(cls, mapping, obj):
mapping["id"] = obj.external_id
mapping["parent"] = obj.get_parent_json()

if obj.created_by:
mapping["created_by"] = UserSpec.serialize(obj.created_by)
if obj.updated_by:
mapping["updated_by"] = UserSpec.serialize(obj.updated_by)
cls.serialize_audit_users(mapping, obj)


class FacilityOrganizationRetrieveSpec(FacilityOrganizationReadSpec):
Expand Down
Loading
Loading