refactor: v2 return host username (#17880)

* fix: v2 return booking with host username

* auto gen docs

* auto gen docs
This commit is contained in:
Lauris Skraucis
2024-11-27 15:15:12 +00:00
committed by GitHub
parent 240ab60c5f
commit 999019c6f0
5 changed files with 99 additions and 14 deletions
@@ -96,6 +96,7 @@ describe("Bookings Endpoints 2024-08-13", () => {
user = await userRepositoryFixture.create({
email: userEmail,
username: `bob-${Math.floor(Math.random() * 1000)}@gmail.com`,
platformOAuthClients: {
connect: {
id: oAuthClient.id,
@@ -351,6 +352,7 @@ describe("Bookings Endpoints 2024-08-13", () => {
expect(data.id).toBeDefined();
expect(data.uid).toBeDefined();
expect(data.hosts[0].id).toEqual(user.id);
expect(data.hosts[0].username).toEqual(user.username);
expect(data.status).toEqual("accepted");
expect(data.start).toEqual(body.start);
expect(data.end).toEqual(new Date(Date.UTC(2030, 0, 8, 14, 0, 0)).toISOString());
@@ -508,6 +510,7 @@ describe("Bookings Endpoints 2024-08-13", () => {
expect(data.id).toEqual(createdBooking.id);
expect(data.uid).toEqual(createdBooking.uid);
expect(data.hosts[0].id).toEqual(user.id);
expect(data.hosts[0].username).toEqual(user.username);
expect(data.status).toEqual(createdBooking.status);
expect(data.start).toEqual(createdBooking.start);
expect(data.end).toEqual(createdBooking.end);
@@ -49,6 +49,8 @@ export const seatedBookingResponsesSchema = z
})
.passthrough();
type DatabaseUser = { id: number; name: string | null; email: string; username: string | null };
type DatabaseBooking = Booking & {
eventType: {
id: number;
@@ -62,11 +64,11 @@ type DatabaseBooking = Booking & {
noShow: boolean | null;
bookingSeat?: BookingSeat | null;
}[];
user: { id: number; name: string | null; email: string } | null;
user: DatabaseUser | null;
createdAt: Date;
};
type BookingWithUser = Booking & { user: { id: number; name: string | null; email: string } | null };
type BookingWithUser = Booking & { user: DatabaseUser | null };
type DatabaseMetadata = z.infer<typeof bookingMetadataSchema>;
@@ -89,7 +91,7 @@ export class OutputBookingsService_2024_08_13 {
uid: databaseBooking.uid,
title: databaseBooking.title,
description: databaseBooking.description,
hosts: [databaseBooking.user],
hosts: [this.getHost(databaseBooking.user)],
status: databaseBooking.status.toLowerCase(),
cancellationReason: databaseBooking.cancellationReason || undefined,
reschedulingReason: bookingResponses?.rescheduledReason,
@@ -130,6 +132,22 @@ export class OutputBookingsService_2024_08_13 {
return userDefinedMetadata;
}
getHost(user: DatabaseUser | null) {
if (!user) {
return {
id: "unknown",
name: "unknown",
email: "unknown",
username: "unknown",
};
}
return {
...user,
username: user.username || "unknown",
};
}
async getOutputRecurringBookings(bookingsIds: number[]) {
const transformed = [];
@@ -158,7 +176,7 @@ export class OutputBookingsService_2024_08_13 {
uid: databaseBooking.uid,
title: databaseBooking.title,
description: databaseBooking.description,
hosts: [databaseBooking.user],
hosts: [this.getHost(databaseBooking.user)],
status: databaseBooking.status.toLowerCase(),
cancellationReason: databaseBooking.cancellationReason || undefined,
reschedulingReason: bookingResponses?.rescheduledReason,
@@ -215,7 +233,7 @@ export class OutputBookingsService_2024_08_13 {
uid: databaseBooking.uid,
title: databaseBooking.title,
description: databaseBooking.description,
hosts: [databaseBooking.user],
hosts: [this.getHost(databaseBooking.user)],
status: databaseBooking.status.toLowerCase(),
rescheduledFromUid: databaseBooking.fromReschedule || undefined,
start: databaseBooking.startTime,
@@ -310,7 +328,7 @@ export class OutputBookingsService_2024_08_13 {
uid: databaseBooking.uid,
title: databaseBooking.title,
description: databaseBooking.description,
hosts: [databaseBooking.user],
hosts: [this.getHost(databaseBooking.user)],
status: databaseBooking.status.toLowerCase(),
cancellationReason: databaseBooking.cancellationReason || undefined,
rescheduledFromUid: databaseBooking.fromReschedule || undefined,
+29 -2
View File
@@ -13023,6 +13023,33 @@
"attendee"
]
},
"BookingHost": {
"type": "object",
"properties": {
"id": {
"type": "number",
"example": 1
},
"name": {
"type": "string",
"example": "Jane Doe"
},
"username": {
"type": "string",
"example": "jane100"
},
"timeZone": {
"type": "string",
"example": "America/Los_Angeles"
}
},
"required": [
"id",
"name",
"username",
"timeZone"
]
},
"EventType": {
"type": "object",
"properties": {
@@ -13062,7 +13089,7 @@
"hosts": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Host"
"$ref": "#/components/schemas/BookingHost"
}
},
"status": {
@@ -13195,7 +13222,7 @@
"hosts": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Host"
"$ref": "#/components/schemas/BookingHost"
}
},
"status": {
+34 -2
View File
@@ -11701,6 +11701,28 @@
},
"required": ["start", "lengthInMinutes", "eventTypeId", "attendee"]
},
"BookingHost": {
"type": "object",
"properties": {
"id": {
"type": "number",
"example": 1
},
"name": {
"type": "string",
"example": "Jane Doe"
},
"username": {
"type": "string",
"example": "jane100"
},
"timeZone": {
"type": "string",
"example": "America/Los_Angeles"
}
},
"required": ["id", "name", "username", "timeZone"]
},
"EventType": {
"type": "object",
"properties": {
@@ -11737,7 +11759,7 @@
"hosts": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Host"
"$ref": "#/components/schemas/BookingHost"
}
},
"status": {
@@ -11792,6 +11814,10 @@
"type": "boolean",
"example": true
},
"createdAt": {
"type": "string",
"example": "2024-08-13T15:30:00Z"
},
"metadata": {
"type": "object",
"example": {
@@ -11832,6 +11858,7 @@
"eventTypeId",
"eventType",
"absentHost",
"createdAt",
"attendees"
]
},
@@ -11857,7 +11884,7 @@
"hosts": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Host"
"$ref": "#/components/schemas/BookingHost"
}
},
"status": {
@@ -11912,6 +11939,10 @@
"type": "boolean",
"example": true
},
"createdAt": {
"type": "string",
"example": "2024-08-13T15:30:00Z"
},
"metadata": {
"type": "object",
"example": {
@@ -11956,6 +11987,7 @@
"eventTypeId",
"eventType",
"absentHost",
"createdAt",
"attendees",
"recurringBookingUid"
]
@@ -69,7 +69,7 @@ export class SeatedAttendee extends Attendee {
metadata?: Record<string, string>;
}
class Host {
class BookingHost {
@ApiProperty({ type: Number, example: 1 })
@IsInt()
@Expose()
@@ -80,6 +80,11 @@ class Host {
@Expose()
name!: string;
@ApiProperty({ type: String, example: "jane100" })
@IsString()
@Expose()
username!: string;
@ApiProperty({ type: String, example: "America/Los_Angeles" })
@IsTimeZone()
@Expose()
@@ -119,11 +124,11 @@ class BaseBookingOutput_2024_08_13 {
@Expose()
description!: string;
@ApiProperty({ type: [Host] })
@ApiProperty({ type: [BookingHost] })
@ValidateNested({ each: true })
@Type(() => Host)
@Type(() => BookingHost)
@Expose()
hosts!: Host[];
hosts!: BookingHost[];
@ApiProperty({ enum: ["cancelled", "accepted", "rejected", "pending"], example: "accepted" })
@IsEnum(["cancelled", "accepted", "rejected", "pending"])