Skip to content

Commit 5f46d9a

Browse files
committed
feat: TT-357 Create SQLAlchemy Dao
1 parent 6ba8320 commit 5f46d9a

File tree

5 files changed

+58
-4
lines changed

5 files changed

+58
-4
lines changed

V2/time_entries/_application/_activities/_delete_activity.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from time_entries._infrastructure import ActivitiesJsonDao
1+
from time_entries._infrastructure import ActivitiesJsonDao, ActivitiesSQLDao
22
from time_entries._domain import ActivityService, _use_cases
33

44
import azure.functions as func
@@ -33,4 +33,5 @@ def _delete(activity_id: str) -> str:
3333

3434
def _create_activity_service(path: str):
3535
activity_json = ActivitiesJsonDao(path)
36-
return ActivityService(activity_json)
36+
activity_sql = ActivitiesSQLDao()
37+
return ActivityService(activity_sql)

V2/time_entries/_application/_activities/_get_activities.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from time_entries._infrastructure import ActivitiesJsonDao
1+
from time_entries._infrastructure import ActivitiesJsonDao, ActivitiesSQLDao
22
from time_entries._domain import ActivityService, _use_cases
33

44
import azure.functions as func
@@ -52,4 +52,5 @@ def _get_all() -> str:
5252

5353
def _create_activity_service(path: str):
5454
activity_json = ActivitiesJsonDao(path)
55-
return ActivityService(activity_json)
55+
activity_sql = ActivitiesSQLDao()
56+
return ActivityService(activity_sql)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
from ._data_persistence import ActivitiesJsonDao
2+
from ._data_persistence import ActivitiesSQLDao
3+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
from ._activities_json_dao import ActivitiesJsonDao
2+
from ._activities_sql_dao import ActivitiesSQLDao
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
from sqlalchemy.engine.cursor import LegacyCursorResult
2+
from time_entries._domain import ActivitiesDao, Activity
3+
from sqlalchemy import create_engine,Table, Column, String, MetaData
4+
from sqlalchemy.sql import select
5+
import dataclasses
6+
import json
7+
import typing
8+
9+
10+
class ActivitiesSQLDao(ActivitiesDao):
11+
def __init__(self):
12+
self.activity_keys = [
13+
field.name for field in dataclasses.fields(Activity)
14+
]
15+
self.engine = create_engine('postgresql://postgres:root@localhost/time-tracker')
16+
self.conn = self.engine.connect()
17+
metadata_obj = MetaData()
18+
self.activity = Table('activity', metadata_obj,
19+
Column('id', String, primary_key=True),
20+
Column('name', String),
21+
Column('description', String),
22+
Column('deleted', String),
23+
Column('status', String),
24+
Column('tenant_id', String),
25+
)
26+
27+
28+
29+
def get_by_id(self, activity_id: str) -> Activity:
30+
query = select(self.activity).where(self.activity.c.id == activity_id)
31+
activity = self.conn.execute(query).one()
32+
return self.__create_activity_dto(dict(activity)) if activity else None
33+
34+
def get_all(self) -> typing.List[Activity]:
35+
query = select(self.activity)
36+
result = self.conn.execute(query)
37+
return [
38+
self.__create_activity_dto(dict(activity))
39+
for activity in result
40+
]
41+
42+
def delete(self, activity_id: str) -> Activity:
43+
query = self.activity.update().where(self.activity.c.id == activity_id).values(status = 'inactive')
44+
self.conn.execute(query)
45+
return self.get_by_id(activity_id);
46+
47+
def __create_activity_dto(self, activity: dict) -> Activity:
48+
activity = {key: activity.get(key) for key in self.activity_keys}
49+
return Activity(**activity)

0 commit comments

Comments
 (0)