feat: v2 return team event type hosts username (#21617)

* feat: return team event type hosts username

* docs: team event types hosts username in return
This commit is contained in:
Lauris Skraucis
2025-05-29 14:58:40 +03:00
committed by GitHub
parent 2cbf805ffb
commit 044df04d3f
6 changed files with 59 additions and 5 deletions
@@ -89,11 +89,13 @@ describe("Organizations Event Types Endpoints", () => {
teammate1 = await userRepositoryFixture.create({
email: teammate1Email,
username: teammate1Email,
name: "alice",
});
teammate2 = await userRepositoryFixture.create({
email: teammate2Email,
username: teammate2Email,
name: "bob",
});
falseTestUser = await userRepositoryFixture.create({
@@ -432,6 +434,21 @@ describe("Organizations Event Types Endpoints", () => {
const responseTeamEvent = responseBody.data.find((event) => event.teamId === team.id);
expect(responseTeamEvent).toBeDefined();
expect(responseTeamEvent?.hosts).toEqual([
{
userId: teammate1.id,
name: teammate1.name,
username: teammate1.username,
avatarUrl: teammate1.avatarUrl,
},
{
userId: teammate2.id,
name: teammate2.name,
username: teammate2.username,
avatarUrl: teammate2.avatarUrl,
},
]);
if (!responseTeamEvent) {
throw new Error("Team event not found");
}
@@ -93,7 +93,7 @@ export class OutputOrganizationsEventTypesService {
const hosts =
databaseEventType.schedulingType === "MANAGED"
? await this.getManagedEventTypeHosts(databaseEventType.id)
: await this.transformHosts(databaseEventType.hosts, databaseEventType.schedulingType);
: await this.getNonManagedEventTypeHosts(databaseEventType.hosts, databaseEventType.schedulingType);
return {
...rest,
@@ -138,13 +138,18 @@ export class OutputOrganizationsEventTypesService {
for (const child of children) {
if (child.userId) {
const user = await this.usersRepository.findById(child.userId);
transformedHosts.push({ userId: child.userId, name: user?.name || "" });
transformedHosts.push({
userId: child.userId,
name: user?.name || "",
username: user?.username || "",
avatarUrl: user?.avatarUrl,
});
}
}
return transformedHosts;
}
async transformHosts(
async getNonManagedEventTypeHosts(
databaseHosts: Host[],
schedulingType: SchedulingType | null
): Promise<TeamEventTypeResponseHost[]> {
@@ -160,6 +165,7 @@ export class OutputOrganizationsEventTypesService {
transformedHosts.push({
userId: databaseHost.userId,
name: databaseUser?.name || "",
username: databaseUser?.username || "",
mandatory: !!databaseHost.isFixed,
priority: getPriorityLabel(databaseHost.priority || 2),
avatarUrl: databaseUser?.avatarUrl,
@@ -168,6 +174,7 @@ export class OutputOrganizationsEventTypesService {
transformedHosts.push({
userId: databaseHost.userId,
name: databaseUser?.name || "",
username: databaseUser?.username || "",
avatarUrl: databaseUser?.avatarUrl,
});
}
@@ -85,11 +85,13 @@ describe("Organizations Event Types Endpoints", () => {
teamMember1 = await userRepositoryFixture.create({
email: teammate1Email,
username: teammate1Email,
name: "alice",
});
teamMember2 = await userRepositoryFixture.create({
email: teammate2Email,
username: teammate2Email,
name: "bob",
});
falseTestUser = await userRepositoryFixture.create({
@@ -403,6 +405,21 @@ describe("Organizations Event Types Endpoints", () => {
const responseTeamEvent = responseBody.data.find((event) => event.teamId === team.id);
expect(responseTeamEvent).toBeDefined();
expect(responseTeamEvent?.hosts).toEqual([
{
userId: teamMember1.id,
name: teamMember1.name,
username: teamMember1.username,
avatarUrl: teamMember1.avatarUrl,
},
{
userId: teamMember2.id,
name: teamMember2.name,
username: teamMember2.username,
avatarUrl: teamMember2.avatarUrl,
},
]);
if (!responseTeamEvent) {
throw new Error("Team event not found");
}
+6 -1
View File
@@ -19060,6 +19060,10 @@
"type": "string",
"example": "John Doe"
},
"username": {
"type": "string",
"example": "john-doe"
},
"avatarUrl": {
"type": "string",
"nullable": true,
@@ -19068,7 +19072,8 @@
},
"required": [
"userId",
"name"
"name",
"username"
]
},
"EventTypeTeam": {
+5 -1
View File
@@ -17679,13 +17679,17 @@
"type": "string",
"example": "John Doe"
},
"username": {
"type": "string",
"example": "john-doe"
},
"avatarUrl": {
"type": "string",
"nullable": true,
"example": "https://cal.com/api/avatar/d95949bc-ccb1-400f-acf6-045c51a16856.png"
}
},
"required": ["userId", "name"]
"required": ["userId", "name", "username"]
},
"EventTypeTeam": {
"type": "object",
@@ -436,6 +436,10 @@ export class TeamEventTypeResponseHost extends TeamEventTypeHostInput {
@DocsProperty({ example: "John Doe" })
name!: string;
@IsString()
@DocsProperty({ example: "john-doe" })
username!: string;
@IsString()
@IsOptional()
@ApiPropertyOptional({