-
Notifications
You must be signed in to change notification settings - Fork 7.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: V2 Org Memberships #15578
feat: V2 Org Memberships #15578
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
2 Skipped Deployments
|
@Roles("ORG_ADMIN") | ||
@UseGuards(IsMembershipInOrg) | ||
@Delete("/:membershipId") | ||
@HttpCode(HttpStatus.OK) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
when returning 200, we should return the deleted entity
if we don't want to return content use HttpStatus.NO_CONTENT
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
About the status codes, wouldn't it make sense to return 204 for deleted intead of 200?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also 201 for Create
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
204 is returned by using HttpStatus.NO_CONTENT yes
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also 201 for Create
yes indeed, let's start using HttpStatus.CREATED for that (nest.js by default will return 201 on POST)
async updateMembership( | ||
@Param("orgId", ParseIntPipe) orgId: number, | ||
@Param("membershipId", ParseIntPipe) membershipId: number, | ||
@Body() body: CreateOrgMembershipDto |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we should be able to partially update membership
@Body() body: Partial<CreateOrgMembershipDto>
@Param("orgId", ParseIntPipe) orgId: number, | ||
@Param("membershipId", ParseIntPipe) membershipId: number | ||
): Promise<GetOrgMembership> { | ||
const membership = await this.organizationsMembershipService.getOrgMembership(orgId, membershipId); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the guard IsMembershipInOrg is already populating the request with the correct membership, use the decorator @GetMembership instead
@Get("/:membershipId") | ||
async getUserSchedule( | ||
@Param("orgId", ParseIntPipe) orgId: number, | ||
@Param("membershipId", ParseIntPipe) membershipId: number |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@GetMembership() membership: Membership
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looking good, followup pr for memberships of teams within an org
📦 Next.js Bundle Analysis for @calcom/webThis analysis was generated by the Next.js Bundle Analysis action. 🤖 Eighty-seven Pages Changed SizeThe following pages changed size from the code in this PR compared to its base branch:
DetailsOnly the gzipped size is provided here based on an expert tip. First Load is the size of the global bundle plus the bundle for the individual page. If a user were to show up to your website and land on a given page, the first load size represents the amount of javascript that user would need to download. If Any third party scripts you have added directly to your app using the The "Budget %" column shows what percentage of your performance budget the First Load total takes up. For example, if your budget was 100kb, and a given page's first load size was 10kb, it would be 10% of your budget. You can also see how much this has increased or decreased compared to the base branch of your PR. If this percentage has increased by 20% or more, there will be a red status indicator applied, indicating that special attention should be given to this. If you see "+/- <0.01%" it means that there was a change in bundle size, but it is a trivial enough amount that it can be ignored. |
* init * --WIP * WIP * ... * more wip * doc * address feedback --WIP * further requested changes * fix * add missing parseIntPipe * chore: code review comments + e2e tests * fixup! chore: code review comments + e2e tests * fixup! fixup! chore: code review comments + e2e tests * fix: don't allow passing teamId for org membership create/update * fix: improve docs and DTOs --------- Co-authored-by: Morgan Vernay <[email protected]>
What does this PR do?
/organizations/:orgId/membership
- isOrganizationGuardGET - RolesGuard (ADMIN) - Get all memberships within the organization
POST - RolesGuard (ADMIN) - Create a membership within the organization
/organizations/:orgId/membership/:membershipId
- isOrganizationGuardGET - RolesGuard (ADMIN) - Get a membership within the organization
PATCH - RolesGuard (ADMIN) - Can only patch a membership that is part of the organization
DELETE - RolesGuard (ADMIN) - Can only delete a membership already part of the organization
Mandatory Tasks (DO NOT REMOVE)
How should this be tested?
yarn test:e2e organizations-membership.controller.e2e-spec.ts