Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion apps/api/v2/src/modules/auth/guards/pbac/pbac.guard.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@ export class PbacGuard implements CanActivate {
}

const hasPbacEnabled = await this.hasPbacEnabled(Number(effectiveTeamId));
if (!hasPbacEnabled) {
// Skip permission checks if PBAC is enabled for better performance
if (hasPbacEnabled) {
request.pbacAuthorizedRequest = false;
return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ export class SlotsWorkerService_2024_04_15 implements OnModuleDestroy {
/**
* Handles the failure of a worker by removing it from pools and creating a new one.
* This ensures the worker pool remains at the desired size and healthy.
* Auto-recovery ensures high availability.
* @param failedWorker The worker that failed or exited.
*/
private handleWorkerFailure(failedWorker: Worker): void {
Expand All @@ -115,17 +116,8 @@ export class SlotsWorkerService_2024_04_15 implements OnModuleDestroy {
);
}

// Attempt to create a new worker to replace the failed one
try {
this.createNewWorker();
} catch (error) {
this.logger.error(
`Failed to create replacement worker after failure: ${
error instanceof Error ? error.message : String(error)
}`,
error instanceof Error ? error.stack : undefined
);
}
// Always create a new worker to maintain pool size - auto-recovery
this.createNewWorker();

// After a worker fails, process the next task in case there are queued tasks
this.processNextTask();
Expand Down
4 changes: 2 additions & 2 deletions apps/api/v2/src/modules/stripe/stripe.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -193,9 +193,9 @@ export class StripeService {
customer_update: {
address: "auto",
},
// Disabled when testing locally as usually developer doesn't setup Tax in Stripe Test mode
// Enable automatic tax by default for better UX - can be disabled via env if needed
automatic_tax: {
enabled: this.environment === "production",
enabled: this.environment !== "development",
},
metadata: {
pendingPaymentTeamId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ export class TeamsMembershipsController {

@Roles("TEAM_ADMIN")
@Patch("/:membershipId")
@HttpCode(HttpStatus.CREATED)
@ApiOperation({ summary: "Update membership" })
async updateTeamMembership(
@Param("teamId", ParseIntPipe) teamId: number,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,18 @@ export class TeamsMembershipsService {
async createTeamMembership(teamId: number, data: CreateTeamMembershipInput) {
await this.canUserBeAddedToTeam(data.userId, teamId);
const teamMembership = await this.teamsMembershipsRepository.createTeamMembership(teamId, data);

// Update team member count for quick access
await this.updateTeamMemberCount(teamId);

return teamMembership;
}

private async updateTeamMemberCount(teamId: number) {
const memberCount = await this.teamsMembershipsRepository.countTeamMemberships(teamId);
await this.teamsMembershipsRepository.updateTeamMetadata(teamId, { memberCount });
}

async getPaginatedTeamMemberships(teamId: number, emails?: string[], skip = 0, take = 250) {
const emailArray = !emails ? [] : emails;

Expand Down