initail work on paid booking, improve validations

This commit is contained in:
Agusti Fernandez Pardo
2022-04-01 17:53:52 +02:00
parent 12de89294d
commit e284707250
14 changed files with 103 additions and 42 deletions
+25
View File
@@ -0,0 +1,25 @@
// Make a middleware that adds a cost to running the request
// by calling stripeSubscription addCost() * pricePerBooking
// Initially to test out 0,5 cent per booking via API call
// withCost(5)(endpoint)
// Should add a charge of 0.5 cent per booking to the subscription of the user making the request
// Should be called in the middleware of the e
//
import { NextMiddleware } from "next-api-middleware";
export const withCost = (priceInCents: number): NextMiddleware => {
return async function (req, res, next) {
console.log(req.headers);
if (
priceInCents > 0
// && stripeCustomerId && stripeSubscriptionId
) {
console.log(priceInCents);
// if (req.method === allowedHttpMethod || req.method == "OPTIONS") {
await next();
} else {
res.status(405).json({ message: `We weren't able to process the payment for this transaction` });
res.end();
}
};
};
+2 -3
View File
@@ -2,7 +2,7 @@ import { label } from "next-api-middleware";
import { addRequestId } from "./addRequestid";
import { captureErrors } from "./captureErrors";
import { HTTP_POST, HTTP_DELETE, HTTP_PATCH, HTTP_GET, httpMethod } from "./httpMethods";
import { HTTP_POST, HTTP_DELETE, HTTP_PATCH, HTTP_GET } from "./httpMethods";
import { verifyApiKey } from "./verifyApiKey";
const withMiddleware = label(
@@ -14,9 +14,8 @@ const withMiddleware = label(
addRequestId,
verifyApiKey,
sentry: captureErrors,
httpMethod: httpMethod("GET" || "DELETE" || "PATCH" || "POST"),
},
["sentry", "verifyApiKey", "httpMethod", "addRequestId"] // <-- Provide a list of middleware to call automatically
["sentry", "verifyApiKey", "addRequestId"] // <-- Provide a list of middleware to call automatically
);
export { withMiddleware };
+1 -1
View File
@@ -2,7 +2,7 @@ import { withValidation } from "next-validations";
import { _ApiKeyModel as ApiKey } from "@calcom/prisma/zod";
export const schemaApiKeyBodyParams = ApiKey.omit({ id: true, userId: true, createdAt: true });
export const schemaApiKeyBodyParams = ApiKey.omit({ id: true, userId: true, createdAt: true }).partial();
export const schemaApiKeyPublic = ApiKey.omit({
id: true,
+1 -1
View File
@@ -2,7 +2,7 @@ import { withValidation } from "next-validations";
import { _AttendeeModel as Attendee } from "@calcom/prisma/zod";
export const schemaAttendeeBodyParams = Attendee.omit({ id: true });
export const schemaAttendeeBodyParams = Attendee.omit({ id: true }).partial();
export const schemaAttendeePublic = Attendee.omit({});
+13 -1
View File
@@ -1,8 +1,20 @@
import { withValidation } from "next-validations";
import { z } from "zod";
import { _BookingModel as Booking } from "@calcom/prisma/zod";
export const schemaBookingBodyParams = Booking.omit({ id: true });
// Here we remove any parameters that are not needed for the API with omit.
const schemaBookingBaseBodyParams = Booking.omit({ id: true }).partial();
// Here we redeclare the required ones after removing the ones we don't need.
// and making the rest optional with .partial()
const schemaBookingRequiredParams = z.object({
uid: z.string(),
title: z.string(),
startTime: z.date(),
endTime: z.date(),
});
export const schemaBookingBodyParams = schemaBookingBaseBodyParams.merge(schemaBookingRequiredParams);
export const schemaBookingPublic = Booking.omit({});
+1 -1
View File
@@ -2,7 +2,7 @@ import { withValidation } from "next-validations";
import { _ScheduleModel as Schedule } from "@calcom/prisma/zod";
export const schemaScheduleBodyParams = Schedule.omit({ id: true });
export const schemaScheduleBodyParams = Schedule.omit({ id: true }).partial();
export const schemaSchedulePublic = Schedule.omit({});
+1 -1
View File
@@ -2,7 +2,7 @@ import { withValidation } from "next-validations";
import { _SelectedCalendarModel as SelectedCalendar } from "@calcom/prisma/zod";
export const schemaSelectedCalendarBodyParams = SelectedCalendar.omit({});
export const schemaSelectedCalendarBodyParams = SelectedCalendar.omit({}).partial();
export const schemaSelectedCalendarPublic = SelectedCalendar.omit({ userId: true });
+1 -1
View File
@@ -2,7 +2,7 @@ import { withValidation } from "next-validations";
import { _TeamModel as Team } from "@calcom/prisma/zod";
export const schemaTeamBodyParams = Team.omit({ id: true });
export const schemaTeamBodyParams = Team.omit({ id: true }).partial();
export const schemaTeamPublic = Team.omit({});
+1 -1
View File
@@ -8,7 +8,7 @@ export const schemaUserBodyParams = User.omit({
password: true,
twoFactorEnabled: true,
twoFactorSecret: true,
});
}).partial();
export const schemaUserPublic = User.omit({
identityProvider: true,
+1 -1
View File
@@ -2,7 +2,7 @@ import { withValidation } from "next-validations";
import { _WebhookModel as Webhook } from "@calcom/prisma/zod";
export const schemaWebhookBodyParams = Webhook.omit({ id: true });
export const schemaWebhookBodyParams = Webhook.omit({ id: true }).partial();
export const schemaWebhookPublic = Webhook.omit({});