Files
litlyx/dashboard/server/api/project/create.post.ts
2024-06-06 03:46:25 +02:00

44 lines
1.6 KiB
TypeScript

import { ProjectModel, TProject } from "@schema/ProjectSchema";
import { ProjectCountModel } from "@schema/ProjectsCounts";
import StripeService from '~/server/services/StripeService';
export default defineEventHandler(async event => {
const body = await readBody(event);
const newProjectName = body.name;
if (!newProjectName) return setResponseStatus(event, 400, 'ProjectName too short');
if (newProjectName.length < 2) return setResponseStatus(event, 400, 'ProjectName too short');
const userData = getRequestUser(event);
if (!userData?.logged) return setResponseStatus(event, 400, 'NotLogged');
const existingUserProjects = await ProjectModel.countDocuments({ owner: userData.id });
if (existingUserProjects == 3) return setResponseStatus(event, 400, 'Already have 3 projects');
const customer = await StripeService.createCustomer(userData.user.email);
if (!customer) return setResponseStatus(event, 400, 'Error creating customer');
const subscription = await StripeService.createFreeSubscription(customer.id);
if (!subscription) return setResponseStatus(event, 400, 'Error creating subscription');
const project = await ProjectModel.create({
owner: userData.id,
name: newProjectName,
premium: false,
premium_type: 0,
customer_id: customer.id,
subscription_id: subscription.id,
premium_expire_at: subscription.current_period_end * 1000
});
await ProjectCountModel.create({
project_id: project._id,
events: 0,
visits: 0
});
return project.toJSON() as TProject;
});