import { makeError, replies } from '@oyst/utils' 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 { pick } from 'ramda' 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 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: true }) const result = await order.create() success(result, reply) } catch (err) { log({ errCreateOrder: err }) error(makeError(err), reply) } }, method: 'POST', path: '/v1/orders' }