88 lines
2.0 KiB
TypeScript
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
|
|
});
|
|
}
|
|
|
|
}); |