|
39 | 39 | from app.business.evidences import evidences_update |
40 | 40 | from app.business.evidences import evidences_filter |
41 | 41 | from app.business.evidences import evidences_delete |
42 | | -from app.models.models import CaseReceivedFile |
43 | 42 |
|
44 | 43 |
|
45 | | -case_evidences_blueprint = Blueprint('case_evidences_rest_v2', __name__, url_prefix='/<int:case_identifier>/evidences') |
| 44 | +class EvidencesOperations: |
46 | 45 |
|
| 46 | + def __init__(self): |
| 47 | + self._schema = CaseEvidenceSchema() |
47 | 48 |
|
48 | | -@case_evidences_blueprint.get('') |
49 | | -@ac_api_requires() |
50 | | -def get_evidences(case_identifier): |
51 | | - if not cases_exists(case_identifier): |
52 | | - return response_api_not_found() |
| 49 | + @staticmethod |
| 50 | + def _get_evidence_in_case(identifier, case_identifier): |
| 51 | + evidence = evidences_get(identifier) |
| 52 | + if evidence.case_id != case_identifier: |
| 53 | + raise BusinessProcessingError(f'Evidence {evidence.id} does not belong to case {case_identifier}') |
| 54 | + return evidence |
53 | 55 |
|
54 | | - if not ac_fast_check_current_user_has_case_access(case_identifier, [CaseAccessLevel.read_only, CaseAccessLevel.full_access]): |
55 | | - return ac_api_return_access_denied(caseid=case_identifier) |
| 56 | + def list(self, case_identifier): |
| 57 | + if not cases_exists(case_identifier): |
| 58 | + return response_api_not_found() |
56 | 59 |
|
57 | | - pagination_parameters = parse_pagination_parameters(request, default_order_by='date_added', default_direction='desc') |
58 | | - try: |
59 | | - evidences = evidences_filter(case_identifier, pagination_parameters) |
| 60 | + if not ac_fast_check_current_user_has_case_access(case_identifier, |
| 61 | + [CaseAccessLevel.read_only, CaseAccessLevel.full_access]): |
| 62 | + return ac_api_return_access_denied(caseid=case_identifier) |
60 | 63 |
|
61 | | - evidence_schema = CaseEvidenceSchema() |
62 | | - return response_api_paginated(evidence_schema, evidences) |
63 | | - except BusinessProcessingError as e: |
64 | | - return response_api_error(e.get_message(), data=e.get_data()) |
| 64 | + pagination_parameters = parse_pagination_parameters(request, default_order_by='date_added', |
| 65 | + default_direction='desc') |
| 66 | + try: |
| 67 | + evidences = evidences_filter(case_identifier, pagination_parameters) |
65 | 68 |
|
| 69 | + return response_api_paginated(self._schema, evidences) |
| 70 | + except BusinessProcessingError as e: |
| 71 | + return response_api_error(e.get_message(), data=e.get_data()) |
66 | 72 |
|
67 | | -@case_evidences_blueprint.post('') |
68 | | -@ac_api_requires() |
69 | | -def create_evidence(case_identifier): |
| 73 | + def create(self, case_identifier): |
70 | 74 |
|
71 | | - if not cases_exists(case_identifier): |
72 | | - return response_api_not_found() |
73 | | - if not ac_fast_check_current_user_has_case_access(case_identifier, [CaseAccessLevel.full_access]): |
74 | | - return ac_api_return_access_denied(caseid=case_identifier) |
| 75 | + if not cases_exists(case_identifier): |
| 76 | + return response_api_not_found() |
| 77 | + if not ac_fast_check_current_user_has_case_access(case_identifier, [CaseAccessLevel.full_access]): |
| 78 | + return ac_api_return_access_denied(caseid=case_identifier) |
75 | 79 |
|
76 | | - try: |
77 | | - evidence = evidences_create(case_identifier, request.get_json()) |
| 80 | + try: |
| 81 | + evidence = evidences_create(case_identifier, request.get_json()) |
78 | 82 |
|
79 | | - evidence_schema = CaseEvidenceSchema() |
80 | | - return response_api_created(evidence_schema.dump(evidence)) |
81 | | - except BusinessProcessingError as e: |
82 | | - return response_api_error(e.get_message(), data=e.get_data()) |
| 83 | + return response_api_created(self._schema.dump(evidence)) |
| 84 | + except BusinessProcessingError as e: |
| 85 | + return response_api_error(e.get_message(), data=e.get_data()) |
83 | 86 |
|
| 87 | + def get(self, case_identifier, identifier): |
| 88 | + if not cases_exists(case_identifier): |
| 89 | + return response_api_not_found() |
84 | 90 |
|
85 | | -@case_evidences_blueprint.get('/<int:identifier>') |
86 | | -@ac_api_requires() |
87 | | -def get_evidence(case_identifier, identifier): |
88 | | - if not cases_exists(case_identifier): |
89 | | - return response_api_not_found() |
| 91 | + try: |
| 92 | + evidence = self._get_evidence_in_case(identifier, case_identifier) |
90 | 93 |
|
91 | | - try: |
92 | | - evidence = evidences_get(identifier) |
93 | | - _check_evidence_and_case_identifier_match(evidence, case_identifier) |
| 94 | + if not ac_fast_check_current_user_has_case_access(evidence.case_id, |
| 95 | + [CaseAccessLevel.read_only, CaseAccessLevel.full_access]): |
| 96 | + return ac_api_return_access_denied(caseid=evidence.case_id) |
94 | 97 |
|
95 | | - if not ac_fast_check_current_user_has_case_access(evidence.case_id, [CaseAccessLevel.read_only, CaseAccessLevel.full_access]): |
96 | | - return ac_api_return_access_denied(caseid=evidence.case_id) |
| 98 | + return response_api_success(self._schema.dump(evidence)) |
| 99 | + except ObjectNotFoundError: |
| 100 | + return response_api_not_found() |
| 101 | + except BusinessProcessingError as e: |
| 102 | + return response_api_error(e.get_message(), data=e.get_data()) |
97 | 103 |
|
98 | | - evidence_schema = CaseEvidenceSchema() |
99 | | - return response_api_success(evidence_schema.dump(evidence)) |
100 | | - except ObjectNotFoundError: |
101 | | - return response_api_not_found() |
102 | | - except BusinessProcessingError as e: |
103 | | - return response_api_error(e.get_message(), data=e.get_data()) |
| 104 | + def update(self, case_identifier, identifier): |
| 105 | + if not cases_exists(case_identifier): |
| 106 | + return response_api_not_found() |
104 | 107 |
|
| 108 | + try: |
| 109 | + evidence = self._get_evidence_in_case(identifier, case_identifier) |
| 110 | + if not ac_fast_check_current_user_has_case_access(evidence.case_id, [CaseAccessLevel.full_access]): |
| 111 | + return ac_api_return_access_denied(caseid=evidence.case_id) |
105 | 112 |
|
106 | | -@case_evidences_blueprint.put('/<int:identifier>') |
107 | | -@ac_api_requires() |
108 | | -def update_evidence(case_identifier, identifier): |
109 | | - if not cases_exists(case_identifier): |
110 | | - return response_api_not_found() |
| 113 | + evidence = evidences_update(evidence, request.get_json()) |
111 | 114 |
|
112 | | - try: |
113 | | - evidence = evidences_get(identifier) |
114 | | - if not ac_fast_check_current_user_has_case_access(evidence.case_id, [CaseAccessLevel.full_access]): |
115 | | - return ac_api_return_access_denied(caseid=evidence.case_id) |
116 | | - _check_evidence_and_case_identifier_match(evidence, case_identifier) |
| 115 | + result = self._schema.dump(evidence) |
| 116 | + return response_api_success(result) |
| 117 | + except ObjectNotFoundError: |
| 118 | + return response_api_not_found() |
| 119 | + except BusinessProcessingError as e: |
| 120 | + return response_api_error(e.get_message(), data=e.get_data()) |
117 | 121 |
|
118 | | - evidence = evidences_update(evidence, request.get_json()) |
| 122 | + def delete(self, case_identifier, identifier): |
| 123 | + if not cases_exists(case_identifier): |
| 124 | + return response_api_not_found() |
119 | 125 |
|
120 | | - schema = CaseEvidenceSchema() |
121 | | - result = schema.dump(evidence) |
122 | | - return response_api_success(result) |
123 | | - except ObjectNotFoundError: |
124 | | - return response_api_not_found() |
125 | | - except BusinessProcessingError as e: |
126 | | - return response_api_error(e.get_message(), data=e.get_data()) |
| 126 | + try: |
| 127 | + evidence = self._get_evidence_in_case(identifier, case_identifier) |
| 128 | + if not ac_fast_check_current_user_has_case_access(evidence.case_id, [CaseAccessLevel.full_access]): |
| 129 | + return ac_api_return_access_denied(caseid=evidence.case_id) |
127 | 130 |
|
| 131 | + evidences_delete(evidence) |
128 | 132 |
|
129 | | -@case_evidences_blueprint.delete('/<int:identifier>') |
| 133 | + return response_api_deleted() |
| 134 | + except ObjectNotFoundError: |
| 135 | + return response_api_not_found() |
| 136 | + except BusinessProcessingError as e: |
| 137 | + return response_api_error(e.get_message(), data=e.get_data()) |
| 138 | + |
| 139 | + |
| 140 | +evidences_operations = EvidencesOperations() |
| 141 | +case_evidences_blueprint = Blueprint('case_evidences_rest_v2', __name__, url_prefix='/<int:case_identifier>/evidences') |
| 142 | + |
| 143 | + |
| 144 | +@case_evidences_blueprint.get('') |
130 | 145 | @ac_api_requires() |
131 | | -def delete_evidence(case_identifier, identifier): |
132 | | - if not cases_exists(case_identifier): |
133 | | - return response_api_not_found() |
| 146 | +def get_evidences(case_identifier): |
| 147 | + return evidences_operations.list(case_identifier) |
| 148 | + |
| 149 | + |
| 150 | +@case_evidences_blueprint.post('') |
| 151 | +@ac_api_requires() |
| 152 | +def create_evidence(case_identifier): |
| 153 | + return evidences_operations.create(case_identifier) |
134 | 154 |
|
135 | | - try: |
136 | | - evidence = evidences_get(identifier) |
137 | | - _check_evidence_and_case_identifier_match(evidence, case_identifier) |
138 | | - if not ac_fast_check_current_user_has_case_access(evidence.case_id, [CaseAccessLevel.full_access]): |
139 | | - return ac_api_return_access_denied(caseid=evidence.case_id) |
140 | 155 |
|
141 | | - evidences_delete(evidence) |
| 156 | +@case_evidences_blueprint.get('/<int:identifier>') |
| 157 | +@ac_api_requires() |
| 158 | +def get_evidence(case_identifier, identifier): |
| 159 | + return evidences_operations.get(case_identifier, identifier) |
142 | 160 |
|
143 | | - return response_api_deleted() |
144 | | - except ObjectNotFoundError: |
145 | | - return response_api_not_found() |
146 | | - except BusinessProcessingError as e: |
147 | | - return response_api_error(e.get_message(), data=e.get_data()) |
| 161 | + |
| 162 | +@case_evidences_blueprint.put('/<int:identifier>') |
| 163 | +@ac_api_requires() |
| 164 | +def update_evidence(case_identifier, identifier): |
| 165 | + return evidences_operations.update(case_identifier, identifier) |
148 | 166 |
|
149 | 167 |
|
150 | | -def _check_evidence_and_case_identifier_match(evidence: CaseReceivedFile, case_identifier): |
151 | | - if evidence.case_id != case_identifier: |
152 | | - raise BusinessProcessingError(f'Evidence {evidence.id} does not belong to case {case_identifier}') |
| 168 | +@case_evidences_blueprint.delete('/<int:identifier>') |
| 169 | +@ac_api_requires() |
| 170 | +def delete_evidence(case_identifier, identifier): |
| 171 | + return evidences_operations.delete(case_identifier, identifier) |
0 commit comments