def __init__(self, context): self._repository = CategoryRepository() super(CategoryFacade, self).__init__(context)
class CategoryFacade(BaseFacade): def __init__(self, context): self._repository = CategoryRepository() super(CategoryFacade, self).__init__(context) @staticmethod def to_flat(items, result): for item in items: result.append(item) if item.children is not None and len(item.children) > 0: CategoryFacade.to_flat(item.children, result) def list(self, param=None): if (not param): param = CategoryQueryViewModel() else: param = CategoryQueryViewModel(param) if (param.listFlat): param.includeChildren = True param.user_id = self._context.user_id entities = self._repository.list(param) result = [] mapper = {} mapper[Category] = CategoryViewMode if param.includeChildren: if param.listFlat: temp = [] self.__class__.to_flat(entities, temp) for r in temp: r.children = [] result.append(obj_map(r, CategoryViewMode, mapper=mapper)) else: for e in entities: result.append(obj_map(e, CategoryViewMode, mapper=mapper)) else: for e in entities: e.children = [] result.append(obj_map(e, CategoryViewMode)) return result def get(self, entity_id): entity = self._repository.get(entity_id) if (entity is None) or (not self.is_accessable(entity)): return None return obj_map(entity, CategoryViewMode) def save(self, viewModel): mapper = {} mapper[type(viewModel)] = Category if viewModel.children is not None: c = [] for v in viewModel.children: c.append(CategoryViewMode(v)) viewModel.children = c entity = obj_map(viewModel, Category, mapper=mapper) olds = self._repository.list(CategoryQueryViewModel({'includeChildren':True, 'categoryId':viewModel.id})) for o in olds: isFound = False for e in entity.children: if o.id == e.id: isFound = True break if not isFound: self._repository.delete(o.id) children = [] for c in entity.children: children.append(c) result = [] for e in children: e.parent_category_id = entity.id e.parent = None e.user_id = self._context.user_id result.append(self._repository.save(e)) return result def delete(self, entity_id): if self._repository.get(entity_id) is None: return return self._repository.delete(entity_id)