Exemplo n.º 1
0
def read_card(request: CardDataRequest, user_id: int, card_list: CardListModel) -> (List[Card], BaseError):
    card_response = []
    query = CardModel.select()

    if request.id is not None:
        query = query.where(CardModel.id == request.id)
    if request.name is not None:
        query = query.where(CardModel.name == request.name)
    if card_list is not None:
        query = query.where(CardModel.list == card_list)
    if request.board_id is not None:
        query = query.join(CardListModel).join(BoardModel).where(CardModel.list.board == request.board_id)
    if request.tags:
        query = query.switch(CardModel).join(TagCard).join(TagModel).where(TagModel.id == request.tags[0])

    query = query.order_by(-CardModel.priority)

    if query.count() == 0:
        return None, BaseError(code=provider.StorageProviderErrors.CARD_DOES_NOT_EXIST,
                               description="Card doesn't exist")

    for card in query:
        if bool(check_access_to_card(card, user_id) & AccessType.READ):
            card_response += [_create_card_from_orm(card)]

    if not card_response:
        return None, BaseError(code=provider.StorageProviderErrors.ACCESS_DENIED,
                               description="This user can't read this card")
    else:
        return card_response, None
Exemplo n.º 2
0
def delete_plan(user_id: int, card: CardModel) -> (None, BaseError):
    if bool(check_access_to_card(card, user_id) & AccessType.WRITE):
        count = PlanModel.delete().where(PlanModel.card == card).execute()
        if count == 0:
            return None, BaseError(
                code=provider.StorageProviderErrors.PLAN_DOES_NOT_EXIST,
                description="There is no plan for this task")
    return None, None
Exemplo n.º 3
0
def delete_card(request: CardDataRequest, user_id: int) -> (List[Card], BaseError):
    try:
        card = CardModel.get(CardModel.id == request.id)
        access = check_access_to_card(card, user_id)
        if bool(access & AccessType.WRITE):
            _delete_card(card)
        else:
            return None, BaseError(code=provider.StorageProviderErrors.ACCESS_DENIED,
                                   description="This user can't delete this card")
    except DoesNotExist:
        return None, BaseError(code=provider.StorageProviderErrors.LIST_DOES_NOT_EXIST,
                               description="Card doesn't exist")
    return None, None
Exemplo n.º 4
0
def read_plan(user_id: int, card: CardModel) -> (Plan, BaseError):
    if bool(check_access_to_card(card, user_id) & AccessType.READ):
        try:
            plan_model = PlanModel.get(PlanModel.card == card)
            return Plan(datetime.timedelta(seconds=plan_model.interval),
                        card.id, plan_model.last_created_at,
                        plan_model.id), None
        except DoesNotExist:
            return None, BaseError(
                code=provider.StorageProviderErrors.PLAN_DOES_NOT_EXIST,
                description="There is no plan for this task")
    else:
        return None, BaseError(
            code=provider.StorageProviderErrors.ACCESS_DENIED,
            description="This user can't read this card")
Exemplo n.º 5
0
def write_plan(request: PlanDataRequest, user_id: int,
               card: CardModel) -> (Plan, BaseError):
    if bool(check_access_to_card(card, user_id) & AccessType.WRITE):
        try:
            plan_model = PlanModel.get(PlanModel.card == card)
            if request.interval is not None:
                plan_model.interval = request.interval.total_seconds()
            if request.last_created is not None:
                plan_model.last_created_at = request.last_created
            plan_model.save()
        except DoesNotExist:
            plan_model = PlanModel.create(
                card=card,
                interval=request.interval.total_seconds(),
                last_created_at=request.last_created)
        return Plan(datetime.timedelta(seconds=plan_model.interval), card.id,
                    plan_model.last_created_at, plan_model.id), None
    else:
        return None, BaseError(
            code=provider.StorageProviderErrors.ACCESS_DENIED,
            description="This user can't write to this card")
Exemplo n.º 6
0
def write_card(request: CardDataRequest, user_id: int, card_list: CardListModel) -> (List[Card], BaseError):
    try:
        card = CardModel.get(CardModel.id == request.id)

        if bool(check_access_to_card(card, user_id) & AccessType.WRITE):
            card.name = request.name
            card.description = request.description
            card.expiration_date = request.expiration_date
            card.priority = request.priority if request.priority is not None else Priority.MEDIUM
            card.assignee_id = request.assignee
            if card_list is not None:
                card.list = card_list

            actual_children_quarry = ParentChild.select().where(ParentChild.parent == card)
            for parent_child in actual_children_quarry:
                if parent_child.child.id not in request.children:
                    parent_child.delete_instance()

            if request.children is not None:
                potential_children_quarry = CardModel.select().where(CardModel.id.in_(request.children))
                for iter_card in potential_children_quarry:
                    if bool(check_access_to_card(iter_card, user_id) & AccessType.READ) and not (iter_card == card):
                        try:
                            ParentChild.get(ParentChild.parent == card, ParentChild.child == iter_card)
                        except DoesNotExist:
                            ParentChild.create(parent=card, child=iter_card)

            for tag_card in TagCard.select().where(TagCard.card == card):
                if tag_card.tag.id not in request.tags:
                    tag_card.delete_instance()

            if request.tags is not None:
                for tag in TagModel.select().where(TagModel.id.in_(request.tags)):
                        TagCard.get_or_create(tag=tag, card=card)

            card.save()
            return [_create_card_from_orm(card)], None
        else:
            return None, BaseError(provider.StorageProviderErrors.ACCESS_DENIED, "This user can't write to this card")
    except DoesNotExist:
        if bool(check_access_to_list(card_list, user_id) & AccessType.WRITE):
            card = CardModel.create(name=request.name,
                                    description=request.description,
                                    expiration_date=request.expiration_date,
                                    priority=Priority.MEDIUM if request.priority is None else request.priority,
                                    assignee_id=request.assignee,
                                    list=card_list,
                                    user_id=user_id)

            if request.tags is not None:
                for tag in TagModel.select().where(TagModel.id.in_(request.tags)):
                    TagCard.create(tag=tag, card=card)

            if request.children is not None:
                potential_children_quarry = CardModel.select().where(CardModel.id.in_(request.children))
                for iter_card in potential_children_quarry:
                    if bool(check_access_to_card(iter_card, user_id) & AccessType.READ) and not (iter_card == card):
                        ParentChild.create(parent=card, child=iter_card)

            return [_create_card_from_orm(card)], None
        else:
            return None, BaseError(provider.StorageProviderErrors.ACCESS_DENIED, "This user has not enough rights for "
                                                                                 "this list")