Skip to content

Commit bcea65a

Browse files
committed
solve merge conflicts
2 parents 003376d + 5b4763e commit bcea65a

File tree

4 files changed

+58
-37
lines changed

4 files changed

+58
-37
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22

33
<!--next-version-placeholder-->
44

5+
## v0.42.0 (2021-11-03)
6+
### Feature
7+
* TT-365 / TT-369 POST V2 Activity ([#329](https://github.com/ioet/time-tracker-backend/issues/329)) ([`6c3687b`](https://github.com/ioet/time-tracker-backend/commit/6c3687b5ca60893be23b6ad663de3081af964272))
8+
9+
## v0.41.0 (2021-10-28)
10+
### Feature
11+
* TT-366 V2 - PUT update activity ([#331](https://github.com/ioet/time-tracker-backend/issues/331)) ([`500a5d0`](https://github.com/ioet/time-tracker-backend/commit/500a5d0261497ce9aa9a9040342fea94dbe70704))
12+
513
## v0.40.0 (2021-10-27)
614
### Feature
715
* TT-367 V2 - Delete Activity ([#330](https://github.com/ioet/time-tracker-backend/issues/330)) ([`6ba8320`](https://github.com/ioet/time-tracker-backend/commit/6ba8320c6ddd6599679dfbbbaf9ac1dba9addb8d))

V2/tests/api/azure/activity_azure_endpoints_test.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,18 +85,17 @@ def test__activity_azure_endpoint__creates_an_activity__when_activity_has_all_at
8585
create_temp_activities,
8686
):
8787
activities_json, tmp_directory = create_temp_activities
88-
activities._create_activity.JSON_PATH = tmp_directory
88+
activities._create_activity._JSON_PATH = tmp_directory
8989

90-
activity_body = {'id': Faker().uuid4(), 'name': Faker().user_name(), 'description': Faker().sentence(),'deleted': Faker().uuid4() ,'status': 'active', 'tenant_id': Faker().uuid4()}
90+
activity_body = {'id': None, 'name': Faker().user_name(), 'description': Faker().sentence(),'deleted': Faker().uuid4() ,'status': 'active', 'tenant_id': Faker().uuid4()}
9191
body = json.dumps(activity_body).encode("utf-8")
9292
req = func.HttpRequest(
9393
method='POST',
9494
body= body,
95-
url='/api/activities/',
95+
url=ACTIVITY_URL,
9696
)
9797

98-
response = activities._create_activity.create_activity(req)
98+
response = activities.create_activity(req)
9999
activitiy_json_data = response.get_body()
100-
101-
assert response.status_code == 200
100+
assert response.status_code == 201
102101
assert activitiy_json_data == body
Lines changed: 44 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,62 @@
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
5+
6+
import azure.functions as func
87

8+
from ... import _domain
9+
from ... import _infrastructure
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:
17-
logging.info(
18-
'Python HTTP trigger function processed a request to create an activity.'
19-
)
17+
activity_dao = _infrastructure.ActivitiesJsonDao(_JSON_PATH)
18+
activity_service = _domain.ActivityService(activity_dao)
19+
use_case = _domain._use_cases.CreateActivityUseCase(activity_service)
20+
21+
2022
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 '
2723

28-
return func.HttpResponse(
29-
body=response, status_code=status_code, mimetype="application/json"
30-
)
3124

32-
def _create_activity(activity_data: dict) -> str:
33-
activity_use_case = _use_cases.CreateActivityUseCase(
34-
_create_activity_service(JSON_PATH)
25+
validation_errors = _validate_activity(activity_data)
26+
if validation_errors:
27+
return func.HttpResponse(
28+
body=validation_errors, status_code=400, mimetype="application/json"
29+
)
30+
31+
32+
activity_to_create = _domain.Activity(
33+
id= None,
34+
name=activity_data['name'],
35+
description=activity_data['description'],
36+
status=activity_data['status'],
37+
deleted=activity_data['deleted'],
38+
tenant_id=activity_data['tenant_id']
3539
)
36-
activity = activity_use_case.create_activity(activity_data)
37-
return json.dumps(activity.__dict__) if activity else b'Not Found'
3840

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)
4341

44-
def _create_activity_service(path: str):
45-
activity_json = ActivitiesJsonDao(path)
46-
return ActivityService(activity_json)
42+
created_activity = use_case.create_activity(activity_to_create.__dict__)
43+
if not create_activity:
44+
return func.HttpResponse(
45+
body={'error': 'activity could not be created'},
46+
status_code=500,
47+
mimetype="application/json",
48+
)
49+
return func.HttpResponse(
50+
body=json.dumps(created_activity.__dict__),
51+
status_code=201,
52+
mimetype="application/json"
53+
)
4754

4855

56+
def _validate_activity(activity_data: dict) -> typing.List[str]:
57+
activity_fields = [field.name for field in dataclasses.fields(_domain.Activity)]
58+
missing_keys = [field for field in activity_fields if field not in activity_data]
59+
return [
60+
f'The {missing_key} key is missing in the input data'
61+
for missing_key in missing_keys
62+
]

time_tracker_api/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '0.40.0'
1+
__version__ = '0.42.0'

0 commit comments

Comments
 (0)