99from app .models .fhir .resources .localization_list .request import (
1010 COUNT_PARAM ,
1111 OFFSET_PARAM ,
12+ SUBJECT_IDENTIFIER_PARAM ,
1213 LocalizationListParams ,
1314 LocalizationListSearchParams ,
1415)
1516from app .models .fhir .resources .localization_list .resource import LocalizationList
1617from app .models .fhir .resources .operation_outcome .resource import OperationOutcome
18+ from app .models .pseudonym import OprfPseudonym
1719from app .models .ura import UraNumber
1820from app .services .exceptions import UnauthorizedUraError
21+ from app .services .fhir .pseudonym_token import decode_pseudonym_token
1922from app .services .pseudonym_referral_service import PseudonymReferralService
2023from app .services .referral_service import ReferralService
2124
2225logger = logging .getLogger (__name__ )
2326
2427
28+ def _subject_pseudonym (params : LocalizationListParams ) -> OprfPseudonym | None :
29+ return decode_pseudonym_token (params .subject , SUBJECT_IDENTIFIER_PARAM ) if params .subject else None
30+
31+
2532class LocalizationListService :
2633 def __init__ (
2734 self ,
@@ -43,7 +50,6 @@ def create(
4350 """Returns the stored List and whether it was created by this call."""
4451 ura_number = data .get_ura ()
4552 device = data .get_device ()
46- pseudonym = data .get_encoded_pseudonym ()
4753
4854 if ura_number != authenticated_ura :
4955 gflog .emit (
@@ -54,6 +60,7 @@ def create(
5460 )
5561 raise UnauthorizedUraError ("Registration not linked to the authorized URA" )
5662
63+ pseudonym = decode_pseudonym_token (data .get_encoded_pseudonym (), "List.subject.identifier.value" )
5764 referral , created = self .pseudonym_referral_service .register (pseudonym , ura_number = ura_number , source = device )
5865
5966 return LocalizationList .from_referral (referral ), created
@@ -72,7 +79,7 @@ def query(
7279
7380 When `request_url` is given, the bundle links to the current, next and previous page.
7481 """
75- subject = params . get_subject_as_class_or_none ( )
82+ subject = _subject_pseudonym ( params )
7683 page_size = min (params .count or self .default_page_size , self .max_page_size )
7784
7885 if params .is_localize_params () and subject is not None :
@@ -132,7 +139,7 @@ def delete_by_query(
132139 authenticated_ura : UraNumber ,
133140 source : str ,
134141 ) -> tuple [OperationOutcome , int ]:
135- subject = params . get_subject_as_class_or_none ( )
142+ subject = _subject_pseudonym ( params )
136143 deleted_count = self .pseudonym_referral_service .delete_many (authenticated_ura , pseudonym = subject , source = source )
137144
138145 if deleted_count < 1 :
0 commit comments