Skip to content

Commit 84b222d

Browse files
committed
fix: TT-365 resolve comments
1 parent 003376d commit 84b222d

File tree

1 file changed

+55
-18
lines changed

1 file changed

+55
-18
lines changed

V2/time_entries/_application/_activities/_create_activity.py

Lines changed: 55 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,82 @@
1-
from time_entries._infrastructure import ActivitiesJsonDao
2-
from time_entries._domain import ActivityService, _use_cases, Activity
3-
4-
import azure.functions as func
51
import json
62
import logging
73
import dataclasses
4+
import typing
85

6+
import azure.functions as func
7+
8+
from time_entries._infrastructure import ActivitiesJsonDao
9+
from time_entries._domain import ActivityService, _use_cases, Activity
910

10-
JSON_PATH = (
11+
_JSON_PATH = (
1112
'time_entries/_infrastructure/_data_persistence/activities_data.json'
1213
)
1314

1415

15-
1616
def create_activity(req: func.HttpRequest) -> func.HttpResponse:
1717
logging.info(
1818
'Python HTTP trigger function processed a request to create an activity.'
1919
)
2020
activity_data = req.get_json()
21-
status_code = 200
22-
if _validate_activity(activity_data):
23-
response = _create_activity(activity_data)
24-
else:
25-
status_code = 404
26-
response = b'Not possible to create activity, attributes are not correct '
21+
# status_code = 200
22+
# if _validate_activity(activity_data):
23+
# response = _create_activity(activity_data)
24+
# else:
25+
# status_code = 404
26+
# response = b'Not possible to create activity, attributes are not correct '
27+
28+
validation_errors = _validate_activity(activity_data)
29+
if validation_errors:
30+
return func.HttpResponse(
31+
body=validation_errors, status_code=400, mimetype="application/json"
32+
)
33+
34+
activity_to_create = Activity(
35+
id=None,
36+
name=activity_data['name'],
37+
description=activity_data['description'],
38+
status_code=activity_data['status_code'],
39+
deleted=activity_data['delete'],
40+
tenant_id=activity_data['tenant_id']
41+
)
2742

43+
# created_activity = use_case.create_activity(activity_to_create)
44+
created_activity = _create_activity(activity_to_create)
45+
46+
if not created_activity:
47+
return func.HttpResponse(
48+
body={'error': 'activity could not be created'},
49+
status_code=500,
50+
mimetype="application/json",
51+
)
52+
2853
return func.HttpResponse(
29-
body=response, status_code=status_code, mimetype="application/json"
54+
body=json.dumps(created_activity.__dict__),
55+
status_code=201,
56+
mimetype="application/json"
3057
)
3158

3259
def _create_activity(activity_data: dict) -> str:
3360
activity_use_case = _use_cases.CreateActivityUseCase(
34-
_create_activity_service(JSON_PATH)
61+
_create_activity_service(_JSON_PATH)
3562
)
3663
activity = activity_use_case.create_activity(activity_data)
3764
return json.dumps(activity.__dict__) if activity else b'Not Found'
3865

39-
def _validate_activity(activity_data: dict) -> bool:
40-
activity_keys = [field.name for field in dataclasses.fields(Activity)]
41-
new_activity_keys = list(activity_data.keys())
42-
return all(map(lambda key: key in activity_keys, new_activity_keys)) and len(activity_keys) == len(new_activity_keys)
66+
def _validate_activity(activity_data: dict) -> typing.List[str]:
67+
# def _validate_activity(activity_data: dict) -> bool:
68+
69+
activity_fields = [field.name for field in dataclasses.fields(Activity)]
70+
71+
# activity_keys = [field.name for field in dataclasses.fields(Activity)]
72+
# new_activity_keys = list(activity_data.keys())
73+
# return all(map(lambda key: key in activity_keys, new_activity_keys)) and len(activity_keys) == len(new_activity_keys)
74+
75+
missing_keys = [field for field in activity_fields if field not in activity_data]
76+
return [
77+
f'The {missing_key} key is missing in the input data'
78+
for missing_key in missing_keys
79+
]
4380

4481
def _create_activity_service(path: str):
4582
activity_json = ActivitiesJsonDao(path)

0 commit comments

Comments
 (0)