Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions commons/data_access_layer/cosmos_db.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ def delete_container(self, container_id: str):
cosmos_helper: CosmosDBFacade = None


class CosmosDBModel():
class CosmosDBModel:
def __init__(self, data):
names = set([f.name for f in dataclasses.fields(self)])
for k, v in data.items():
Expand Down Expand Up @@ -124,7 +124,7 @@ def create_custom_sql_conditions(custom_sql_conditions: List[str]) -> str:
return ''

@staticmethod
def generate_params(conditions: dict) -> dict:
def generate_params(conditions: dict) -> list:
result = []
for k, v in conditions.items():
result.append({
Expand Down Expand Up @@ -255,9 +255,10 @@ class CosmosDBDao(CRUDDao):
def __init__(self, repository: CosmosDBRepository):
self.repository = repository

def get_all(self, conditions: dict = {}) -> list:
def get_all(self, conditions: dict = None, **kwargs) -> list:
conditions = conditions if conditions else {}
event_ctx = self.create_event_context("read-many")
return self.repository.find_all(event_ctx, conditions=conditions)
return self.repository.find_all(event_ctx, conditions=conditions, **kwargs)

def get(self, id):
event_ctx = self.create_event_context("read")
Expand Down
2 changes: 1 addition & 1 deletion time_tracker_api/database.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

class CRUDDao(abc.ABC):
@abc.abstractmethod
def get_all(self, conditions: dict):
def get_all(self, conditions: dict = None, **kwargs):
raise NotImplementedError # pragma: no cover

@abc.abstractmethod
Expand Down
51 changes: 42 additions & 9 deletions time_tracker_api/projects/projects_model.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
from dataclasses import dataclass

from azure.cosmos import PartitionKey

from commons.data_access_layer.cosmos_db import CosmosDBModel, CosmosDBDao, CosmosDBRepository
from time_tracker_api.database import CRUDDao, APICosmosDBDao
from time_tracker_api.customers.customers_model import create_dao as customers_create_dao
from time_tracker_api.customers.customers_model import CustomerCosmosDBModel


class ProjectDao(CRUDDao):
Expand Down Expand Up @@ -34,19 +34,52 @@ class ProjectCosmosDBModel(CosmosDBModel):
def __init__(self, data):
super(ProjectCosmosDBModel, self).__init__(data) # pragma: no cover

def __contains__(self, item):
if type(item) is CustomerCosmosDBModel:
return True if item.id == self.customer_id else False
else:
raise NotImplementedError

def __repr__(self):
return '<Project %r>' % self.name # pragma: no cover

def __str___(self):
return "the project \"%s\"" % self.name # pragma: no cover


def create_dao() -> ProjectDao:
repository = CosmosDBRepository.from_definition(container_definition,
mapper=ProjectCosmosDBModel)
class ProjectCosmosDBRepository(CosmosDBRepository):
def __init__(self):
CosmosDBRepository.__init__(self, container_id=container_definition['id'],
partition_key_attribute='tenant_id',
mapper=ProjectCosmosDBModel)


class ProjectCosmosDBDao(APICosmosDBDao, ProjectDao):
def __init__(self):
CosmosDBDao.__init__(self, repository)
class ProjectCosmosDBDao(APICosmosDBDao, ProjectDao):
def __init__(self, repository):
CosmosDBDao.__init__(self, repository)

def get_all(self, conditions: dict = None, **kwargs) -> list:
"""
Get all the projects an active client has
:param (dict) conditions: Conditions for querying the database
:param (dict) kwargs: Pass arguments
:return (list): ProjectCosmosDBModel object list
"""
event_ctx = self.create_event_context("read-many")
customer_dao = customers_create_dao()
customers = customer_dao.get_all()
projects = self.repository.find_all(event_ctx, **kwargs)
active_projects = []

for project in projects:
for customer in customers:
if customer in project:
active_projects.append(project)
break
return active_projects


def create_dao() -> ProjectDao:
repository = ProjectCosmosDBRepository()

return ProjectCosmosDBDao()
return ProjectCosmosDBDao(repository)