export const handler = async (event: APIGatewayProxyEventV2): Promise => {
const logger = new Logger();
try {
if (!event.body) {
return {
statusCode: 400,
body: JSON.stringify({ message: 'No body provided' }),
};
}
let body: NewCatRequest;
try {
body = NewCatRequestSchema.parse(JSON.parse(event.body ?? ''));
} catch (error) {
return {
statusCode: 400,
body: JSON.stringify({ message: 'Invalid body' }),
};
}
const catOwner = await db
.select()
.from(catOwnersTable)
.where(and(eq(catOwnersTable.active, true), eq(catOwnersTable.id, body.owner.id)))
.limit(1)
.then((rows) => rows[0]);
if (!catOwner) {
return {
statusCode: 400,
body: JSON.stringify({ message: 'Invalid owner' }),
};
}
const cat = await db
.insert(catsTable)
.values({
id: uuidv4(),
name: body.cat.name,
breed: body.cat.breed,
})
.returning({
id: catsTable.id,
})
.then((rows) => rows[0]);
return {
statusCode: 200,
body: JSON.stringify(cat),
};
} catch (err) {
logger.error('Error creating cat', { err });
return {
statusCode: 500,
body: JSON.stringify({ message: 'Internal server error' }),
};
}
};