55 lines
1.4 KiB
TypeScript
55 lines
1.4 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server';
|
|
import { z } from 'zod';
|
|
|
|
import oriyoClient from '@/app/api-utlities/clients/oriyo.client';
|
|
|
|
import { loginFormSchema } from '@/entities/auth/model/validation/login-form.schema';
|
|
|
|
import { validationErrorHandler } from '../../middlewares/error-handler.middleware';
|
|
|
|
const routeHandler = async (req: NextRequest) => {
|
|
const body = await req.json();
|
|
|
|
const validatedBody = loginFormSchema
|
|
.merge(z.object({ type: z.enum(['bonus', 'corporate']) }))
|
|
.parse(body);
|
|
|
|
const oriyoResponse = await (() => {
|
|
switch (validatedBody.type) {
|
|
case 'corporate':
|
|
return oriyoClient.get('/corporatecard', {
|
|
params: {
|
|
phone: validatedBody.phoneNumber,
|
|
uid: validatedBody.cardNumber,
|
|
},
|
|
});
|
|
|
|
default:
|
|
return oriyoClient.get('/bonuscard', {
|
|
params: {
|
|
phone: validatedBody.phoneNumber,
|
|
uid: validatedBody.cardNumber,
|
|
},
|
|
});
|
|
}
|
|
})();
|
|
|
|
if (oriyoResponse.data.error)
|
|
return NextResponse.json({ error: 'Credentials error' }, { status: 401 });
|
|
|
|
const response = NextResponse.json({ success: true });
|
|
|
|
response.cookies.set(
|
|
`${validatedBody.type}__token`,
|
|
JSON.stringify(oriyoResponse.data),
|
|
{
|
|
path: '/',
|
|
maxAge: 2 * 60 * 60,
|
|
},
|
|
);
|
|
|
|
return response;
|
|
};
|
|
|
|
export const POST = validationErrorHandler(routeHandler);
|