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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
def buy(context): postponed_task = context.purchase.buy(account=context.account) return dext_views.AjaxProcessing(postponed_task.status_url)