Skip to content

Commit f0f279a

Browse files
committed
feat: TT-365 create function serverless
1 parent f731a58 commit f0f279a

File tree

11 files changed

+88
-3
lines changed

11 files changed

+88
-3
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+
create_activity:
51+
handler: time_entries/interface.create_activity
52+
events:
53+
- http: true
54+
x-azure-settings:
55+
methods:
56+
- POST
57+
route: activities/create
58+
authLevel: anonymous
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
from ._activities import get_activities
1+
from ._activities import get_activities, create_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 ._create_activity import create_activity
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
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+
'V2/time_entries/_infrastructure/_data_persistence/activities_data.json'
10+
)
11+
12+
new_activity = {
13+
'id': 'c61a4a49-3364-49a3-a666-0c5f2d15072b',
14+
'name': 'Activity Demo create',
15+
'tenant_id': 'cc925a5d-9644-4a4f-8d99-0bee49aadd05',
16+
'description': 'test demo create an new activity',
17+
'status': 'active',
18+
'deleted': 'b4327ba6-9f96-49ee-a9ac-3c1edf525172',
19+
}
20+
21+
def create_activity(req: func.HttpRequest) -> func.HttpResponse:
22+
logging.info(
23+
'Python HTTP trigger function processed a request to create an activity.'
24+
)
25+
#activity_id = req.route_params.get('id')
26+
status_code = 200
27+
28+
if status_code == 200:
29+
response = _create_activity(new_activity)
30+
if response == b'Not Found':
31+
status_code = 404
32+
else:
33+
response = b'Not Found'
34+
35+
return func.HttpResponse(
36+
body=response, status_code=status_code, mimetype="application/json"
37+
)
38+
39+
def _create_activity(activity_data: dict) -> str:
40+
activity_use_case = _use_cases.CreateActivityUseCase(
41+
_create_activity_service(JSON_PATH)
42+
)
43+
activity = activity_use_case.create_activity(activity_data)
44+
return json.dumps(activity.__dict__) if activity else b'Not Found'
45+
46+
def _create_activity_service(path: str):
47+
activity_json = ActivitiesJsonDao(path)
48+
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 create_activity(self, activity_data: dict) -> 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 create_activity(self, activity_data: dict) -> Activity:
16+
return self.activities_dao.create_activity(activity_data)
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 ._create_activity_use_case import CreateActivityUseCase
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from time_entries._domain import ActivityService, Activity
2+
import typing
3+
4+
5+
class CreateActivityUseCase:
6+
def __init__(self, activity_service: ActivityService):
7+
self.activity_service = activity_service
8+
9+
def create_activity(self, activity_data: dict ) -> Activity:
10+
return self.activity_service.create_activity(activity_data)
11+

V2/time_entries/_infrastructure/_data_persistence/_activities_json_dao.py

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

28+
def create_activity(self, newactivity: Activity) -> typing.List[Activity]:
29+
return [
30+
self.__create_activity_dto(activity)
31+
for activity in self.__get_activities_from_file()
32+
]
33+
2834
def __get_activities_from_file(self) -> typing.List[dict]:
2935
try:
3036
file = open(self.json_data_file_path)

V2/time_entries/interface.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
from ._application import get_activities
1+
from ._application import get_activities, create_activity
2+

0 commit comments

Comments
 (0)