1- from time_entries ._infrastructure import ActivitiesJsonDao
2- from time_entries ._domain import ActivityService , _use_cases , Activity
3-
4- import azure .functions as func
51import json
62import logging
73import dataclasses
4+ import typing
85
6+ import azure .functions as func
97
10- JSON_PATH = (
8+ from ... import _domain
9+ from ... import _infrastructure
10+
11+ _JSON_PATH = (
1112 'time_entries/_infrastructure/_data_persistence/activities_data.json'
1213)
1314
1415
15-
1616def create_activity (req : func .HttpRequest ) -> func .HttpResponse :
17+ activity_dao = _infrastructure .ActivitiesJsonDao (_JSON_PATH )
18+ activity_service = _domain .ActivityService (activity_dao )
19+ use_case = _domain ._use_cases .CreateActivityUseCase (activity_service )
1720 logging .info (
1821 'Python HTTP trigger function processed a request to create an activity.'
1922 )
2023 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 '
27-
28- return func .HttpResponse (
29- body = response , status_code = status_code , mimetype = "application/json"
24+ validation_errors = _validate_activity (activity_data )
25+ if validation_errors :
26+ return func .HttpResponse (
27+ body = validation_errors , status_code = 400 , mimetype = "application/json"
28+ )
29+ activity_to_create = _domain .Activity (
30+ id = None ,
31+ name = activity_data ['name' ],
32+ description = activity_data ['description' ],
33+ status = activity_data ['status' ],
34+ deleted = activity_data ['deleted' ],
35+ tenant_id = activity_data ['tenant_id' ]
3036 )
3137
32- def _create_activity (activity_data : dict ) -> str :
33- activity_use_case = _use_cases .CreateActivityUseCase (
34- _create_activity_service (JSON_PATH )
38+ created_activity = use_case .create_activity (activity_to_create .__dict__ )
39+ if not create_activity :
40+ return func .HttpResponse (
41+ body = {'error' : 'activity could not be created' },
42+ status_code = 500 ,
43+ mimetype = "application/json" ,
44+ )
45+ return func .HttpResponse (
46+ body = json .dumps (created_activity .__dict__ ),
47+ status_code = 201 ,
48+ mimetype = "application/json"
3549 )
36- activity = activity_use_case .create_activity (activity_data )
37- return json .dumps (activity .__dict__ ) if activity else b'Not Found'
38-
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 )
4350
44- def _create_activity_service (path : str ):
45- activity_json = ActivitiesJsonDao (path )
46- return ActivityService (activity_json )
4751
52+ def _validate_activity (activity_data : dict ) -> typing .List [str ]:
53+ activity_fields = [field .name for field in dataclasses .fields (_domain .Activity )]
4854
55+ missing_keys = [field for field in activity_fields if field not in activity_data ]
56+ return [
57+ f'The { missing_key } key is missing in the input data'
58+ for missing_key in missing_keys
59+ ]
0 commit comments