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 @@ -263,9 +264,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 @@ -295,7 +296,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 @@ -15,6 +15,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 @@ -285,7 +286,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
]
Comment thread
praffq marked this conversation as resolved.
return Response({"results": data})
Expand All @@ -305,7 +306,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 @@ -17,6 +17,7 @@
QuestionnaireTag,
)
from care.emr.models.questionnaire import FormSubmission, QuestionnaireResponse
from care.emr.resources.base import model_from_cache
from care.emr.resources.favorites.filters import FavoritesFilter
from care.emr.resources.favorites.spec import FavoriteResourceChoices
from care.emr.resources.form_submission.spec import FormSubmissionStatusChoices
Expand Down Expand Up @@ -193,10 +194,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
]
Comment thread
praffq marked this conversation as resolved.
return Response(
{
Expand Down Expand Up @@ -254,10 +255,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)
]
Comment thread
praffq marked this conversation as resolved.
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 @@ -29,6 +29,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 @@ -277,7 +278,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
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
6 changes: 3 additions & 3 deletions care/emr/resources/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,9 +162,9 @@ def to_json(self):
def serialize_audit_users(cls, mapping, obj):
from care.emr.resources.user.spec import UserSpec

if obj.created_by_id:
if hasattr(obj, "created_by_id") and obj.created_by_id:
mapping["created_by"] = model_from_cache(UserSpec, id=obj.created_by_id)
if obj.updated_by_id:
if hasattr(obj, "updated_by_id") and obj.updated_by_id:
mapping["updated_by"] = model_from_cache(UserSpec, id=obj.updated_by_id)


Expand Down Expand Up @@ -272,7 +272,7 @@ def model_from_cache(model: EMRResource, quiet=True, **kwargs) -> dict[str, Any]
data = model.serialize(obj)
cache.set(model_cache_key(model_string(db_model), model.__name__, pk), data)

return dict(data)
return data.model_dump(mode="json")


# TODO: add param for manually adding dependencies for cache invalidation
Expand Down
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
Comment thread
praffq marked this conversation as resolved.

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)
Comment thread
praffq marked this conversation as resolved.
Comment thread
praffq marked this conversation as resolved.
mapping["edit_history"] = edit_history
8 changes: 4 additions & 4 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 @@ -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 Down
4 changes: 3 additions & 1 deletion care/emr/resources/encounter/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,9 @@ 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["location_history"] = [
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 @@ -105,17 +105,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 @@ -215,6 +212,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
14 changes: 7 additions & 7 deletions care/emr/resources/file_upload/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from pydantic import UUID4, field_validator

from care.emr.models import FileUpload
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.utils.models.validators import file_name_validator

Expand Down Expand Up @@ -92,10 +92,10 @@ def perform_extra_serialization(cls, mapping, obj):
mapping["id"] = obj.external_id
mapping["extension"] = obj.get_extension()
mapping["mime_type"] = obj.meta.get("mime_type")
if obj.created_by:
mapping["uploaded_by"] = UserSpec.serialize(obj.created_by)
if obj.archived_by:
mapping["archived_by"] = UserSpec.serialize(obj.archived_by)
if obj.created_by_id:
mapping["uploaded_by"] = model_from_cache(UserSpec, id=obj.created_by_id)
if obj.archived_by_id:
mapping["archived_by"] = model_from_cache(UserSpec, id=obj.archived_by_id)


class FileUploadRetrieveSpec(FileUploadListSpec):
Expand All @@ -112,8 +112,8 @@ def perform_extra_serialization(cls, mapping, obj):
else:
mapping["read_signed_url"] = obj.files_manager.read_signed_url(obj)

if obj.updated_by:
mapping["updated_by"] = UserSpec.serialize(obj.updated_by)
if obj.updated_by_id:
mapping["updated_by"] = model_from_cache(UserSpec, id=obj.updated_by_id)


class ConsentFileUploadCreateSpec(FileUploadBaseSpec):
Expand Down
Loading