def post(self, plan_id, **kwargs): plan = query(self.plan_repository.get(user_id=kwargs['user'].id, id=plan_id)).single_or_default( default=None) if not plan: abort(404, message="This plan does not exist") post_body = request.json if type(post_body) is not list: on_error(error_message="Invalid post body") result = ChangeResult() try: shares = query(post_body) for shared_user in plan.shared_users: if not shares.contains(shared_user, lambda lhs, rhs: rhs['user_id'] == lhs.id): result.add_child_result( self.plan_repository.unshare(plan, shared_user.id)) for share in post_body: user_id = share['user_id'] permission = share['permission'] result.add_child_result( self.plan_repository.share(plan, user_id, permission)) except KeyError as ke: on_error(error_message="Invalid post body") if not result.success(): on_error(error_message="Could not share plan", result=result) self.plan_repository.save_changes() return plan
def add_or_update(self, entity): result = ChangeResult() # item_repository = ItemRepository() # for item in entity.items: # result.add_child_result(item_repository.add_or_update(item)) result.add_child_result(super(PlanRepository, self).add_or_update(entity)) return result
def add_or_update(self, item): result = ChangeResult() # yelp_repository = YelpItemRepository() # # if item.type == "YELP" and item.yelp_item is not None: # result.add_child_result(yelp_repository.add_or_update(item.yelp_item)) # item.yelp_item_id = item.yelp_item.id result.add_child_result(super(ItemRepository, self).add_or_update(item)) return result
def share(self, plan, user_id, permission): user_repository = UserRepository() plan_share_repository = PlanShareRepository() result = ChangeResult() user = user_repository.find(user_id) if not user: result.errors.append("No user with id {0} found".format(user_id)) else: existing = query(PlanShares.query.filter_by(plan_id=plan.id, user_id=user.id).all()).single_or_default( default=None) if existing: existing.permission = permission result.add_child_result(plan_share_repository.add_or_update(existing)) else: plan_share = PlanShares() plan_share.plan_id = plan.id plan_share.user_id = user.id plan_share.permission = permission result.add_child_result(plan_share_repository.add_or_update(plan_share)) return result
def add_or_update(self, item): result = ChangeResult() result.add_child_result(super(RatingRepository, self).add_or_update(item)) return result