64 lines
1.7 KiB
TypeScript
64 lines
1.7 KiB
TypeScript
|
import type { RequestHandler } from '@sveltejs/kit';
|
||
|
import { Payment } from '../../../../models/Payment';
|
||
|
import { dbConnect, dbDisconnect } from '../../../../utils/db';
|
||
|
import { error } from '@sveltejs/kit';
|
||
|
import { authenticateUser } from '$lib/js/authenticate';;
|
||
|
import sharp from 'sharp';
|
||
|
import path from 'path';
|
||
|
import {IMAGE_DIR} from '$env/static/private';
|
||
|
|
||
|
export const POST: RequestHandler = async ({request, cookies}) => {
|
||
|
const user = await authenticateUser(cookies)
|
||
|
console.log(user)
|
||
|
if(!user){
|
||
|
throw error(401, "Not logged in")
|
||
|
}
|
||
|
if(!user.access.includes("abrechnung")){
|
||
|
throw error(401, "This user does not have permissions to add payments")
|
||
|
}
|
||
|
else{
|
||
|
const formData = await request.formData();
|
||
|
const json = {
|
||
|
amount: formData.get("amount"),
|
||
|
for_self: formData.get("for_self"),
|
||
|
for_other: formData.get("for_other"),
|
||
|
payee: formData.get("payee"),
|
||
|
added_by: user._id
|
||
|
}
|
||
|
|
||
|
await dbConnect();
|
||
|
let id;
|
||
|
try{
|
||
|
id = (await Payment.create(json))._id.toString();
|
||
|
} catch(e){
|
||
|
await dbDisconnect();
|
||
|
throw error(400, e)
|
||
|
}
|
||
|
|
||
|
await dbDisconnect();
|
||
|
const img = formData.get("file")
|
||
|
if(img){
|
||
|
console.log("IMG:", img)
|
||
|
const full_res = Buffer.from(await img.arrayBuffer())
|
||
|
|
||
|
await sharp(full_res)
|
||
|
.toFormat('webp')
|
||
|
.toFile(path.join(IMAGE_DIR,
|
||
|
"abrechnung",
|
||
|
"full",
|
||
|
id + '.webp'))
|
||
|
|
||
|
await sharp(full_res)
|
||
|
.resize({width: 20})
|
||
|
.toFormat('webp')
|
||
|
.toFile(path.join(IMAGE_DIR,
|
||
|
"abrechnung",
|
||
|
"placeholder",
|
||
|
id + '.webp'))
|
||
|
}
|
||
|
return new Response(JSON.stringify({message: "Added payment successfully"}),{
|
||
|
status: 200,
|
||
|
});
|
||
|
}
|
||
|
};
|