2020from flask import request
2121from marshmallow import ValidationError
2222
23- from app .blueprints .access_controls import ac_api_requires , ac_fast_check_current_user_has_case_access
23+ from app .blueprints .access_controls import ac_api_requires
24+ from app .blueprints .access_controls import ac_fast_check_current_user_has_case_access
25+ from app .blueprints .rest .parsing import parse_pagination_parameters
2426from app .blueprints .rest .endpoints import response_api_created
2527from app .blueprints .rest .endpoints import response_api_success
2628from app .blueprints .rest .endpoints import response_api_deleted
2729from app .blueprints .rest .endpoints import response_api_error
2830from app .blueprints .rest .endpoints import response_api_not_found
31+ from app .blueprints .rest .endpoints import response_api_paginated
2932from app .blueprints .access_controls import ac_api_return_access_denied
3033from app .business .errors import ObjectNotFoundError
3134from app .business .errors import BusinessProcessingError
3235from app .schema .marshables import CaseNoteDirectorySchema
36+ from app .schema .marshables import SearchCaseNoteDirectorySchema
3337from app .business .notes_directories import notes_directories_create
3438from app .business .notes_directories import notes_directories_get
3539from app .business .notes_directories import notes_directories_update
3640from app .business .notes_directories import notes_directories_delete
3741from app .business .cases import cases_exists
42+ from app .business .notes_directories import notes_directories_filter
3843from app .models .authorization import CaseAccessLevel
3944
4045
4146class NotesDirectories :
4247
4348 def __init__ (self ):
4449 self ._schema = CaseNoteDirectorySchema ()
50+ self ._schema_search = SearchCaseNoteDirectorySchema (exclude = ('parent_id' , 'case_id' ))
4551
4652 @staticmethod
4753 def _get_note_directory_in_case (identifier , case_identifier ):
@@ -53,6 +59,16 @@ def _get_note_directory_in_case(identifier, case_identifier):
5359 def _load (self , request_data , ** kwargs ):
5460 return self ._schema .load (request_data , ** kwargs )
5561
62+ def search (self , case_identifier ):
63+ if not cases_exists (case_identifier ):
64+ return response_api_not_found ()
65+ if not ac_fast_check_current_user_has_case_access (case_identifier , [CaseAccessLevel .full_access ]):
66+ return ac_api_return_access_denied (case_identifier )
67+
68+ pagination_parameters = parse_pagination_parameters (request , default_order_by = 'name' , default_direction = 'asc' )
69+ directories = notes_directories_filter (case_identifier , pagination_parameters )
70+ return response_api_paginated (self ._schema_search , directories )
71+
5672 def create (self , case_identifier ):
5773 if not cases_exists (case_identifier ):
5874 return response_api_not_found ()
@@ -69,9 +85,8 @@ def create(self, case_identifier):
6985 directory = self ._load (request_data )
7086
7187 notes_directories_create (directory )
72- result = self ._schema .dump (directory )
7388
74- return response_api_created (result )
89+ return response_api_created (self . _schema . dump ( directory ) )
7590 except ValidationError as e :
7691 return response_api_error ('Data error' , data = e .normalized_messages ())
7792
@@ -85,8 +100,7 @@ def get(self, case_identifier, identifier):
85100 try :
86101 note_directory = self ._get_note_directory_in_case (identifier , case_identifier )
87102
88- result = self ._schema .dump (note_directory )
89- return response_api_success (result )
103+ return response_api_success (self ._schema .dump (note_directory ))
90104 except ObjectNotFoundError :
91105 return response_api_not_found ()
92106 except BusinessProcessingError as e :
@@ -107,8 +121,7 @@ def update(self, case_identifier, identifier):
107121 self ._schema .verify_parent_id (request_data ['parent_id' ], case_id = case_identifier , current_id = identifier )
108122 new_directory = self ._load (request_data , instance = directory , partial = True )
109123 notes_directories_update (new_directory )
110- result = self ._schema .dump (new_directory )
111- return response_api_success (result )
124+ return response_api_success (self ._schema .dump (new_directory ))
112125 except ValidationError as e :
113126 return response_api_error ('Data error' , data = e .normalized_messages ())
114127 except ObjectNotFoundError :
@@ -154,3 +167,9 @@ def update_note_directory(case_identifier, identifier):
154167@ac_api_requires ()
155168def delete_note_directory (case_identifier , identifier ):
156169 return notes_directories .delete (case_identifier , identifier )
170+
171+
172+ @case_notes_directories_blueprint .get ('' )
173+ @ac_api_requires ()
174+ def get_note_directory_filter (case_identifier ):
175+ return notes_directories .search (case_identifier )
0 commit comments