import { makeError, replies } from '@oyst/utils' import { merge, pick } from 'ramda' import Order from '../../../models/order' import authorizeHandler from '../../../handlers/authorize' import { fullSession as headers } from '../../../validators/headers' import log from '../../../lib/log' import { create as payload } from '../../../validators/orders' import sessionHandler from '../../../handlers/session' const { error, success } = replies export default { config: { pre: [sessionHandler, authorizeHandler], validate: { headers, payload } }, handler: async (req, reply) => { try { const version = req.pre.authorization.session.version if (version !== 2) { return error(makeError('CLICK-400', 'bad-version'), reply) } const payload = req.payload || {} const order = new Order({ version, encryptedCard: payload.encrypted_card as string, headers: pick(['oyst-session', 'oyst-user'], req.headers), merchantId: req.pre.authorization.merchant.id as string, session: req.pre.authorization.session as any, userId: req.pre.session.user_id as string, withAuthorize: false }) const result = await order.create() success(result, reply) } catch (err) { log({ errCreateOrder: err }) error(makeError(err), reply) } }, method: 'POST', path: '/v2/orders' }