Skip to content

Commit f13bc69

Browse files
committed
feat: TT-367 creation of the functionality to change the status of an activity
1 parent b823e87 commit f13bc69

File tree

10 files changed

+92
-0
lines changed

10 files changed

+92
-0
lines changed

V2/serverless.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,13 @@ functions:
4646
- GET
4747
route: activities/{id:?}
4848
authLevel: anonymous
49+
50+
delete_activity:
51+
handler: time_entries/interface.delete_activity
52+
events:
53+
- http: true
54+
x-azure-settings:
55+
methods:
56+
- DELETE
57+
route: activities/{id}
58+
authLevel: anonymous
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
from ._activities import get_activities
2+
from ._activities import delete_activity
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
from ._get_activities import get_activities
2+
from ._delete_activity import delete_activity
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
from time_entries._infrastructure import ActivitiesJsonDao
2+
from time_entries._domain import ActivityService, _use_cases
3+
4+
import azure.functions as func
5+
import json
6+
import logging
7+
8+
JSON_PATH = (
9+
'time_entries/_infrastructure/_data_persistence/activities_data.json'
10+
)
11+
12+
13+
def delete_activity(req: func.HttpRequest) -> func.HttpResponse:
14+
logging.info(
15+
'Python HTTP trigger function processed a request to delete an activity.'
16+
)
17+
activity_id = req.route_params.get('id')
18+
response = _delete(activity_id)
19+
status_code = 200 if response == b'Not found' else 404
20+
21+
return func.HttpResponse(
22+
body=response, status_code=status_code, mimetype="application/json"
23+
)
24+
25+
26+
def _delete(activity_id: str) -> str:
27+
activity_use_case = _use_cases.DeleteActivityUseCase(
28+
_create_activity_service(JSON_PATH)
29+
)
30+
activity = activity_use_case.delete_activity(activity_id)
31+
return json.dumps(activity.__dict__) if activity else b'Not found'
32+
33+
34+
def _create_activity_service(path: str):
35+
activity_json = ActivitiesJsonDao(path)
36+
return ActivityService(activity_json)

V2/time_entries/_domain/_persistence_contracts/_activities_dao.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,7 @@ def get_by_id(self, id: str) -> Activity:
1111
@abc.abstractmethod
1212
def get_all(self) -> typing.List[Activity]:
1313
pass
14+
15+
@abc.abstractmethod
16+
def delete(self, id: str) -> Activity:
17+
pass

V2/time_entries/_domain/_services/_activity.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,6 @@ def get_by_id(self, activity_id: str) -> Activity:
1111

1212
def get_all(self) -> typing.List[Activity]:
1313
return self.activities_dao.get_all()
14+
15+
def delete(self, activity_id: str) -> Activity:
16+
return self.activities_dao.delete(activity_id)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
from ._get_activities_use_case import GetActivitiesUseCase
22
from ._get_activity_by_id_use_case import GetActivityUseCase
3+
from ._delete_activity_use_case import DeleteActivityUseCase
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from time_entries._domain import ActivityService, Activity
2+
3+
4+
class DeleteActivityUseCase:
5+
def __init__(self, activity_service: ActivityService):
6+
self.activity_service = activity_service
7+
8+
def delete_activity(self, id: str) -> Activity:
9+
return self.activity_service.delete(id)

V2/time_entries/_infrastructure/_data_persistence/_activities_json_dao.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,32 @@ def get_all(self) -> typing.List[Activity]:
2525
for activity in self.__get_activities_from_file()
2626
]
2727

28+
def delete(self, activity_id: str) -> Activity:
29+
activity = self.get_by_id(activity_id)
30+
if activity:
31+
activity_deleted = {**activity.__dict__, 'status': 'inactive'}
32+
activities_updated = list(
33+
map(
34+
lambda activity: activity
35+
if activity.get('id') != activity_id
36+
else activity_deleted,
37+
self.__get_activities_from_file(),
38+
)
39+
)
40+
41+
try:
42+
file = open(self.json_data_file_path, 'w')
43+
json.dump(activities_updated, file)
44+
file.close()
45+
46+
return self.__create_activity_dto(activity_deleted)
47+
48+
except FileNotFoundError:
49+
return None
50+
51+
else:
52+
return None
53+
2854
def __get_activities_from_file(self) -> typing.List[dict]:
2955
try:
3056
file = open(self.json_data_file_path)

V2/time_entries/interface.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
from ._application import get_activities
2+
from ._application import delete_activity

0 commit comments

Comments
 (0)