Merge branch 'main' into production
commit
7707275f94
17
lib/types.ts
17
lib/types.ts
|
@ -1,4 +1,4 @@
|
||||||
import { AppStoreLocationType, DefaultLocationType } from "@calcom/app-store/locations";
|
import { AppStoreLocationType, DefaultEventLocationType } from "@calcom/app-store/locations";
|
||||||
import {
|
import {
|
||||||
User,
|
User,
|
||||||
Team,
|
Team,
|
||||||
|
@ -9,7 +9,6 @@ import {
|
||||||
Availability,
|
Availability,
|
||||||
BookingReference,
|
BookingReference,
|
||||||
Booking,
|
Booking,
|
||||||
DailyEventReference,
|
|
||||||
Webhook,
|
Webhook,
|
||||||
DestinationCalendar,
|
DestinationCalendar,
|
||||||
Membership,
|
Membership,
|
||||||
|
@ -93,14 +92,6 @@ export type CredentialsResponse = BaseResponse & {
|
||||||
credentials?: Partial<Credential>[];
|
credentials?: Partial<Credential>[];
|
||||||
};
|
};
|
||||||
|
|
||||||
// DailyEventReference
|
|
||||||
export type DailyEventReferenceResponse = BaseResponse & {
|
|
||||||
daily_event_reference?: Partial<DailyEventReference>;
|
|
||||||
};
|
|
||||||
export type DailyEventReferencesResponse = BaseResponse & {
|
|
||||||
daily_event_references?: Partial<DailyEventReference>[];
|
|
||||||
};
|
|
||||||
|
|
||||||
// DestinationCalendar
|
// DestinationCalendar
|
||||||
export type DestinationCalendarResponse = BaseResponse & {
|
export type DestinationCalendarResponse = BaseResponse & {
|
||||||
destination_calendar?: Partial<DestinationCalendar>;
|
destination_calendar?: Partial<DestinationCalendar>;
|
||||||
|
@ -148,9 +139,11 @@ interface EventTypeExtended extends Omit<EventType, "recurringEvent" | "location
|
||||||
link?: string | undefined;
|
link?: string | undefined;
|
||||||
address?: string | undefined;
|
address?: string | undefined;
|
||||||
hostPhoneNumber?: string | undefined;
|
hostPhoneNumber?: string | undefined;
|
||||||
type: DefaultLocationType | AppStoreLocationType;
|
type: DefaultEventLocationType | typeof AppStoreLocationType;
|
||||||
}[]
|
}[]
|
||||||
| null;
|
| null
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
| any;
|
||||||
}
|
}
|
||||||
|
|
||||||
// EventType
|
// EventType
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||||
import { Webhook } from "@prisma/client";
|
import { Webhook } from "@prisma/client";
|
||||||
import { compile } from "handlebars";
|
import { compile } from "handlebars";
|
||||||
|
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
import { z } from "zod";
|
|
||||||
|
|
||||||
import { _DailyEventReferenceModel as DailyEventReference } from "@calcom/prisma/zod";
|
|
||||||
|
|
||||||
export const schemaDailyEventReferenceBaseBodyParams = DailyEventReference.pick({
|
|
||||||
dailytoken: true,
|
|
||||||
dailyurl: true,
|
|
||||||
bookingId: true,
|
|
||||||
}).partial();
|
|
||||||
|
|
||||||
const schemaDailyEventReferenceCreateParams = z
|
|
||||||
.object({
|
|
||||||
dailytoken: z.string(),
|
|
||||||
dailyurl: z.string(),
|
|
||||||
bookingId: z.number(),
|
|
||||||
})
|
|
||||||
.strict();
|
|
||||||
|
|
||||||
export const schemaDailyEventReferenceCreateBodyParams = schemaDailyEventReferenceBaseBodyParams.merge(
|
|
||||||
schemaDailyEventReferenceCreateParams
|
|
||||||
);
|
|
||||||
|
|
||||||
const schemaDailyEventReferenceEditParams = z
|
|
||||||
.object({
|
|
||||||
dailytoken: z.string().optional(),
|
|
||||||
dailyurl: z.string().optional(),
|
|
||||||
})
|
|
||||||
.strict();
|
|
||||||
|
|
||||||
export const schemaDailyEventReferenceEditBodyParams = schemaDailyEventReferenceBaseBodyParams.merge(
|
|
||||||
schemaDailyEventReferenceEditParams
|
|
||||||
);
|
|
||||||
export const schemaDailyEventReferenceReadPublic = DailyEventReference.pick({
|
|
||||||
id: true,
|
|
||||||
dailytoken: true,
|
|
||||||
dailyurl: true,
|
|
||||||
bookingId: true,
|
|
||||||
});
|
|
|
@ -1,6 +1,5 @@
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
||||||
import { AppStoreLocationType, DefaultLocationType } from "@calcom/app-store/locations";
|
|
||||||
import { _EventTypeModel as EventType } from "@calcom/prisma/zod";
|
import { _EventTypeModel as EventType } from "@calcom/prisma/zod";
|
||||||
|
|
||||||
import { Frequency } from "@lib/types";
|
import { Frequency } from "@lib/types";
|
||||||
|
@ -110,7 +109,7 @@ export const schemaEventTypeReadPublic = EventType.pick({
|
||||||
link: z.string().optional(),
|
link: z.string().optional(),
|
||||||
address: z.string().optional(),
|
address: z.string().optional(),
|
||||||
hostPhoneNumber: z.string().optional(),
|
hostPhoneNumber: z.string().optional(),
|
||||||
type: z.nativeEnum(DefaultLocationType).or(z.nativeEnum(AppStoreLocationType)),
|
type: z.any().optional(),
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
.nullable(),
|
.nullable(),
|
||||||
|
|
|
@ -4,8 +4,6 @@ import { _UserModel as User } from "@calcom/prisma/zod";
|
||||||
|
|
||||||
import { timeZone } from "@lib/validations/shared/timeZone";
|
import { timeZone } from "@lib/validations/shared/timeZone";
|
||||||
|
|
||||||
import { jsonSchema } from "./shared/jsonSchema";
|
|
||||||
|
|
||||||
// @note: These are the ONLY values allowed as weekStart. So user don't introduce bad data.
|
// @note: These are the ONLY values allowed as weekStart. So user don't introduce bad data.
|
||||||
enum weekdays {
|
enum weekdays {
|
||||||
MONDAY = "Monday",
|
MONDAY = "Monday",
|
||||||
|
|
|
@ -1,164 +0,0 @@
|
||||||
import type { NextApiRequest, NextApiResponse } from "next";
|
|
||||||
|
|
||||||
import { withMiddleware } from "@lib/helpers/withMiddleware";
|
|
||||||
import type { DailyEventReferenceResponse } from "@lib/types";
|
|
||||||
import {
|
|
||||||
schemaDailyEventReferenceEditBodyParams,
|
|
||||||
schemaDailyEventReferenceReadPublic,
|
|
||||||
} from "@lib/validations/event-reference";
|
|
||||||
import {
|
|
||||||
schemaQueryIdParseInt,
|
|
||||||
withValidQueryIdTransformParseInt,
|
|
||||||
} from "@lib/validations/shared/queryIdTransformParseInt";
|
|
||||||
|
|
||||||
export async function dailyEventReferenceById(
|
|
||||||
{ method, query, body, userId, prisma }: NextApiRequest,
|
|
||||||
res: NextApiResponse<DailyEventReferenceResponse>
|
|
||||||
) {
|
|
||||||
const safeQuery = schemaQueryIdParseInt.safeParse(query);
|
|
||||||
const safeBody = schemaDailyEventReferenceEditBodyParams.safeParse(body);
|
|
||||||
if (!safeQuery.success) {
|
|
||||||
res.status(400).json({ message: "Your query was invalid" });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const userBookings = await prisma.booking.findMany({ where: { userId } });
|
|
||||||
const userBookingIds: number[] = userBookings.map((booking) => booking.id);
|
|
||||||
const userBookingDailyEventReferences = await prisma.dailyEventReference.findMany({
|
|
||||||
where: { bookingId: { in: userBookingIds } },
|
|
||||||
});
|
|
||||||
const userBookingDailyEventReferenceIds = userBookingDailyEventReferences.map(
|
|
||||||
(dailyEventReference) => dailyEventReference.id
|
|
||||||
);
|
|
||||||
if (!userBookingDailyEventReferenceIds.includes(safeQuery.data.id))
|
|
||||||
res.status(401).json({ message: "Unauthorized" });
|
|
||||||
else {
|
|
||||||
switch (method) {
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /event-references/{id}:
|
|
||||||
* get:
|
|
||||||
* summary: Find a event reference
|
|
||||||
* operationId: getEventReferenceById
|
|
||||||
* parameters:
|
|
||||||
* - in: path
|
|
||||||
* name: id
|
|
||||||
* schema:
|
|
||||||
* type: integer
|
|
||||||
* required: true
|
|
||||||
* description: ID of the event reference to get
|
|
||||||
* tags:
|
|
||||||
* - event-references
|
|
||||||
* responses:
|
|
||||||
* 200:
|
|
||||||
* description: OK
|
|
||||||
* 401:
|
|
||||||
* description: Authorization information is missing or invalid.
|
|
||||||
* 404:
|
|
||||||
* description: EventReference was not found
|
|
||||||
*/
|
|
||||||
case "GET":
|
|
||||||
await prisma.dailyEventReference
|
|
||||||
.findUnique({ where: { id: safeQuery.data.id } })
|
|
||||||
.then((data) => schemaDailyEventReferenceReadPublic.parse(data))
|
|
||||||
.then((daily_event_reference) => res.status(200).json({ daily_event_reference }))
|
|
||||||
.catch((error: Error) =>
|
|
||||||
res.status(404).json({
|
|
||||||
message: `DailyEventReference with id: ${safeQuery.data.id} not found`,
|
|
||||||
error,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /event-references/{id}:
|
|
||||||
* patch:
|
|
||||||
* summary: Edit an existing event reference
|
|
||||||
* operationId: editEventReferenceById
|
|
||||||
* parameters:
|
|
||||||
* - in: path
|
|
||||||
* name: id
|
|
||||||
* schema:
|
|
||||||
* type: integer
|
|
||||||
* required: true
|
|
||||||
* description: ID of the event reference to edit
|
|
||||||
* tags:
|
|
||||||
* - event-references
|
|
||||||
* responses:
|
|
||||||
* 201:
|
|
||||||
* description: OK, EventReference edited successfuly
|
|
||||||
* 400:
|
|
||||||
* description: Bad request. EventReference body is invalid.
|
|
||||||
* 401:
|
|
||||||
* description: Authorization information is missing or invalid.
|
|
||||||
*/
|
|
||||||
case "PATCH":
|
|
||||||
if (!safeBody.success) {
|
|
||||||
{
|
|
||||||
res.status(400).json({ message: "Invalid request body" });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
await prisma.dailyEventReference
|
|
||||||
.update({ where: { id: safeQuery.data.id }, data: safeBody.data })
|
|
||||||
.then((data) => schemaDailyEventReferenceReadPublic.parse(data))
|
|
||||||
.then((daily_event_reference) => res.status(200).json({ daily_event_reference }))
|
|
||||||
.catch((error: Error) =>
|
|
||||||
res.status(404).json({
|
|
||||||
message: `DailyEventReference with id: ${safeQuery.data.id} not found`,
|
|
||||||
error,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /event-references/{id}:
|
|
||||||
* delete:
|
|
||||||
* summary: Remove an existing event reference
|
|
||||||
* operationId: removeEventReferenceById
|
|
||||||
* parameters:
|
|
||||||
* - in: path
|
|
||||||
* name: id
|
|
||||||
* schema:
|
|
||||||
* type: integer
|
|
||||||
* required: true
|
|
||||||
* description: ID of the event reference to delete
|
|
||||||
* tags:
|
|
||||||
* - event-references
|
|
||||||
* responses:
|
|
||||||
* 201:
|
|
||||||
* description: OK, EventReference removed successfuly
|
|
||||||
* 400:
|
|
||||||
* description: Bad request. EventReference id is invalid.
|
|
||||||
* 401:
|
|
||||||
* description: Authorization information is missing or invalid.
|
|
||||||
*/
|
|
||||||
case "DELETE":
|
|
||||||
await prisma.dailyEventReference
|
|
||||||
.delete({
|
|
||||||
where: { id: safeQuery.data.id },
|
|
||||||
})
|
|
||||||
.then(() =>
|
|
||||||
res.status(200).json({
|
|
||||||
message: `DailyEventReference with id: ${safeQuery.data.id} deleted`,
|
|
||||||
})
|
|
||||||
)
|
|
||||||
.catch((error: Error) =>
|
|
||||||
res.status(404).json({
|
|
||||||
message: `DailyEventReference with id: ${safeQuery.data.id} not found`,
|
|
||||||
error,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
res.status(405).json({ message: "Method not allowed" });
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default withMiddleware("HTTP_GET_DELETE_PATCH")(
|
|
||||||
withValidQueryIdTransformParseInt(dailyEventReferenceById)
|
|
||||||
);
|
|
|
@ -1,84 +0,0 @@
|
||||||
import type { NextApiRequest, NextApiResponse } from "next";
|
|
||||||
|
|
||||||
import { withMiddleware } from "@lib/helpers/withMiddleware";
|
|
||||||
import { DailyEventReferenceResponse, DailyEventReferencesResponse } from "@lib/types";
|
|
||||||
import {
|
|
||||||
schemaDailyEventReferenceCreateBodyParams,
|
|
||||||
schemaDailyEventReferenceReadPublic,
|
|
||||||
} from "@lib/validations/event-reference";
|
|
||||||
|
|
||||||
async function createOrlistAllDailyEventReferences(
|
|
||||||
{ method, body, userId, prisma }: NextApiRequest,
|
|
||||||
res: NextApiResponse<DailyEventReferencesResponse | DailyEventReferenceResponse>
|
|
||||||
) {
|
|
||||||
const userBookings = await prisma.booking.findMany({ where: { userId } });
|
|
||||||
const userBookingIds = userBookings.map((booking) => booking.id);
|
|
||||||
|
|
||||||
if (method === "GET") {
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /event-references:
|
|
||||||
* get:
|
|
||||||
* summary: Find all event reference
|
|
||||||
* operationId: listEventReferences
|
|
||||||
* tags:
|
|
||||||
* - event-references
|
|
||||||
* responses:
|
|
||||||
* 200:
|
|
||||||
* description: OK
|
|
||||||
* 401:
|
|
||||||
* description: Authorization information is missing or invalid.
|
|
||||||
* 404:
|
|
||||||
* description: No event references were found
|
|
||||||
*/
|
|
||||||
const data = await prisma.dailyEventReference.findMany({
|
|
||||||
where: { bookingId: { in: userBookingIds } },
|
|
||||||
});
|
|
||||||
const daily_event_references = data.map((dailyEventReference) =>
|
|
||||||
schemaDailyEventReferenceReadPublic.parse(dailyEventReference)
|
|
||||||
);
|
|
||||||
if (daily_event_references) res.status(200).json({ daily_event_references });
|
|
||||||
else
|
|
||||||
(error: Error) =>
|
|
||||||
res.status(404).json({
|
|
||||||
message: "No DailyEventReferences were found",
|
|
||||||
error,
|
|
||||||
});
|
|
||||||
} else if (method === "POST") {
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /event-references:
|
|
||||||
* post:
|
|
||||||
* summary: Creates a new event reference
|
|
||||||
* operationId: addEventReference
|
|
||||||
* tags:
|
|
||||||
* - event-references
|
|
||||||
* responses:
|
|
||||||
* 201:
|
|
||||||
* description: OK, event reference created
|
|
||||||
* 400:
|
|
||||||
* description: Bad request. DailyEventReference body is invalid.
|
|
||||||
* 401:
|
|
||||||
* description: Authorization information is missing or invalid.
|
|
||||||
*/
|
|
||||||
const safe = schemaDailyEventReferenceCreateBodyParams.safeParse(body);
|
|
||||||
if (!safe.success) {
|
|
||||||
res.status(400).json({ message: "Invalid request body" });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const data = await prisma.dailyEventReference.create({ data: safe.data });
|
|
||||||
const daily_event_reference = schemaDailyEventReferenceReadPublic.parse(data);
|
|
||||||
|
|
||||||
if (daily_event_reference)
|
|
||||||
res.status(201).json({ daily_event_reference, message: "DailyEventReference created successfully" });
|
|
||||||
else
|
|
||||||
(error: Error) =>
|
|
||||||
res.status(400).json({
|
|
||||||
message: "Could not create new event reference",
|
|
||||||
error,
|
|
||||||
});
|
|
||||||
} else res.status(405).json({ message: `Method ${method} not allowed` });
|
|
||||||
}
|
|
||||||
|
|
||||||
export default withMiddleware("HTTP_GET_OR_POST")(createOrlistAllDailyEventReferences);
|
|
Loading…
Reference in New Issue