car_trader/server/api/car/listings/index.post.ts

88 lines
2.0 KiB
TypeScript

// POST: /api/car/listings
import Joi from "joi"
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
const schema = Joi.object({
make: Joi.string().required(),
model : Joi.string().required(),
year: Joi.number().min(1886).max(new Date().getFullYear()),
miles: Joi.number().min(1).required(),
city: Joi.string().min(2).required(),
numberOfSeats: Joi.number().max(100).min(1).required(),
features: Joi.array().items(Joi.string()).required(),
image: Joi.string().required(),
listerId: Joi.string().required(),
price: Joi.number().min(100).required(),
name: Joi.string().required(),
description:Joi.string().min(20).required(),
});
export default defineEventHandler(async (event) => {
const body = await readBody(event);
console.log("received:");
console.log(body);
const {error,value} = await schema.validate(body);
if (error) {
throw createError({
statusCode: 412,
statusMessage: error.message
});
}
const {
image,
name,
numberOfSeats,
price,
features,
description,
miles,
listerId,
city,
make,
model
} = body;
console.log("saving body ");
console.log(body);
try {
const car = await prisma.car.create({
data: {
image,
name,
numberOfSeats,
price,
features,
description,
miles,
listerId,
city: city.toLowerCase(),
make,
model
}
});
console.log("returning car");
console.log(car);
return car;
} catch (error2) {
console.log(error2.message);
throw createError({
statusCode: 412,
statusMessage: error2.message
});
}
});