Exemple #1
0
def api_use(context):
    u'''
Использовать карту из колоды игрока.

- **адрес:** /game/cards/api/use
- **http-метод:** POST
- **версии:** 1.0
- **параметры:**
    * GET: card — уникальный идентификатор карты в калоде
    * POST: person — идентификатор Мастера, если карта применяется к Мастеру
    * POST: place — идентификатор города, если карта применяется к городу
    * POST: building — идентификатор здания, если карта применяется к зданию
- **возможные ошибки**:
    * cards.use.form_errors — ошибка в одном из POST параметров

Метод является «неблокирующей операцией» (см. документацию), формат ответа соответствует ответу для всех «неблокирующих операций».
    '''
    form = context.account_card.type.form(context.django_request.POST)

    if not form.is_valid():
        raise dext_views.ViewError(code=u'form_errors', message=form.errors)

    task = context.account_card.activate(context.account_hero,
                                         data=form.get_card_data())

    return dext_views.AjaxProcessing(task.status_url)
Exemple #2
0
def api_get(context):
    u'''
Взять новую карту в колоду игрока.

- **адрес:** /game/cards/api/get
- **http-метод:** POST
- **версии:** 1.0
- **параметры:** нет
- **возможные ошибки**: нет

Метод является «неблокирующей операцией» (см. документацию), формат ответа соответствует ответу для всех «неблокирующих операций».

При завершении операции возвращается дополнительная инфрмация:

    {
      "message": "строка",      // описание результата в формате html
      "card": <card_info>       // описание полученной карты, формат см. в описании формата информации о герое
    }
    '''
    choose_task = heroes_postponed_tasks.GetCardTask(
        hero_id=context.account_hero.id)

    task = PostponedTaskPrototype.create(choose_task)

    amqp_environment.environment.workers.supervisor.cmd_logic_task(
        context.account.id, task.id)

    return dext_views.AjaxProcessing(task.status_url)
Exemple #3
0
def reset_nick(context):
    task = ChangeCredentialsTaskPrototype.create(account=context.master_account,
                                                 new_nick=u'%s (%s)' % (conf.accounts_settings.RESET_NICK_PREFIX, uuid.uuid4().hex))

    postponed_task = task.process(logger)

    return dext_views.AjaxProcessing(postponed_task.status_url)
Exemple #4
0
def create(context):
    if logic.has_lot(context.account.id, context.good.uid):
        raise dext_utils_exceptions.ViewError(
            code='lot_exists',
            message=u'Вы уже выставили этот предмет на продажу')

    task = logic.send_good_to_market(seller_id=context.account.id,
                                     good=context.good,
                                     price=context.form.c.price)
    return dext_views.AjaxProcessing(status_url=task.status_url)
Exemple #5
0
def api_use(context):
    form = context.account_card.get_form(data=context.django_request.POST,
                                         hero=context.account_hero)

    if not form.is_valid():
        raise dext_views.ViewError(code='form_errors', message=form.errors)

    task = context.account_card.activate(context.account_hero,
                                         data=form.get_card_data())

    return dext_views.AjaxProcessing(task.status_url)
Exemple #6
0
def create(context):
    check_recipients(context.form)

    logic_task = postponed_tasks.SendMessagesTask(account_id=context.account.id,
                                                  recipients=context.form.c.recipients,
                                                  message=context.form.c.text)

    task = PostponedTaskPrototype.create(logic_task)

    amqp_environment.environment.workers.accounts_manager.cmd_task(task.id)

    return dext_views.AjaxProcessing(status_url=task.status_url)
Exemple #7
0
def close_sell_lot(context):

    if context.account.bank_account.amount < context.price:
        raise dext_views.ViewError(code='not_enough_money', message='Не хватает средств для покупки')

    task = logic.close_lot(item_type=context.item_type,
                           price=context.price,
                           buyer_id=context.account.id)
    postponed_task = PostponedTaskPrototype.create(task)
    postponed_task.cmd_wait()

    return dext_views.AjaxProcessing(postponed_task.status_url)
Exemple #8
0
def transfer_money(context):
    if context.account.id == context.master_account.id:
        raise dext_views.ViewError(code='own_account', message=u'Нельзя переводить печеньки самому себе')

    if context.form.c.money > context.account.bank_account.amount:
        raise dext_views.ViewError(code='not_enough_money', message=u'Недостаточно печенек для перевода')

    task = logic.initiate_transfer_money(sender_id=context.account.id,
                                         recipient_id=context.master_account.id,
                                         amount=context.form.c.money,
                                         comment=context.form.c.comment)
    return dext_views.AjaxProcessing(task.status_url)
Exemple #9
0
def fast_post(context):

    if context.account.is_authenticated:
        raise dext_views.ViewError(code='accounts.registration.fast.already_registered',
                                   message='Вы уже зарегистрированы')

    task = create_registration_task(context.django_request.session)

    if task.state.is_processed:
        raise dext_views.ViewError(code='accounts.registration.fast.already_processed',
                                   message='Вы уже зарегистрированы, обновите страницу')

    return dext_views.AjaxProcessing(task.status_url)
Exemple #10
0
def purchase(context):

    if not context.lot.state.is_ACTIVE:
        raise dext_utils_exceptions.ViewError(
            code='wrong_lot_state', message='Вы не можете приобрести этот лот')

    if context.lot.seller_id == context.account.id:
        raise dext_utils_exceptions.ViewError(
            code='can_not_purchase_own_lot',
            message='Нельзя приобрести свой лот')

    if context.account.bank_account.amount < context.lot.price:
        raise dext_utils_exceptions.ViewError(
            code='no_money',
            message='Не хватает средств для приобретения лота')

    task = logic.purchase_lot(context.account.id, context.lot)
    return dext_views.AjaxProcessing(status_url=task.status_url)
Exemple #11
0
def api_combine(context):
    u'''
Объединить карты из колоды игрока.

- **адрес:** /game/cards/api/combine
- **http-метод:** POST
- **версии:** 1.0
- **параметры:**
    * GET: cards — перечень уникальный идентификаторов карт в колоде игрока через запятую
- **возможные ошибки**:
    * cards.api-combine.wrong_cards — указанные карты нельзя объединить

Метод является «неблокирующей операцией» (см. документацию), формат ответа соответствует ответу для всех «неблокирующих операций».

При завершении операции возвращается дополнительная инфрмация:

    {
      "message": "строка",      // описание результата в формате html
      "card": <card_info>       // описание полученной карты, формат см. в описании формата информации о герое
    }
    '''
    can_combine_status = context.account_hero.cards.can_combine_cards(
        [card.uid for card in context.account_cards])

    if not can_combine_status.is_ALLOWED:
        raise dext_views.ViewError(code=u'wrong_cards',
                                   message=can_combine_status.text)

    choose_task = heroes_postponed_tasks.CombineCardsTask(
        hero_id=context.account_hero.id,
        cards=[card.uid for card in context.account_cards])

    task = PostponedTaskPrototype.create(choose_task)

    amqp_environment.environment.workers.supervisor.cmd_logic_task(
        context.account.id, task.id)

    return dext_views.AjaxProcessing(task.status_url)
Exemple #12
0
def buy(context):
    postponed_task = context.purchase.buy(account=context.account)
    return dext_views.AjaxProcessing(postponed_task.status_url)