feat: add showPublicScores and showPublicOpinions flags to services with plan-based access control

This commit is contained in:
2026-07-22 14:05:39 -03:00
parent da3c3abb52
commit 279e1b54cc
19 changed files with 391 additions and 43 deletions
@@ -67,6 +67,8 @@ export class CompaniesAdapterMongoose implements ICompaniesAdapter {
fixedPostIds: { type: Array, required: false },
banned: { type: Boolean, required: false, default: false },
showPublicScores: { type: Boolean, required: false, default: true },
showPublicOpinions: { type: Boolean, required: false, default: true },
});
this.companyList = model<ICompanyDocument>("Company", this.schema);
@@ -235,6 +237,14 @@ export class CompaniesAdapterMongoose implements ICompaniesAdapter {
updateCompany.banned = data.banned;
}
if (data.showPublicScores !== undefined) {
updateCompany.showPublicScores = data.showPublicScores;
}
if (data.showPublicOpinions !== undefined) {
updateCompany.showPublicOpinions = data.showPublicOpinions;
}
updateCompany.save();
//actualizo los campos correspondientes a la localizacion de los servicios de la organizacion.
@@ -54,6 +54,8 @@ export type UpdateCompanyParams = {
onboardingStep?: number;
onboardingCompleted?: boolean;
banned?: boolean;
showPublicScores?: boolean;
showPublicOpinions?: boolean;
};
export type SetCompanyFileParams = {
@@ -154,6 +156,8 @@ export interface ICompany {
onboardingCompleted?: boolean;
fixedPostIds?: Array<string>;
banned?: boolean;
showPublicScores?: boolean;
showPublicOpinions?: boolean;
}
export interface MyOranizationsView {
@@ -203,6 +207,8 @@ export interface MyOranizationsView {
onboardingStep?: number;
onboardingCompleted?: boolean;
banned?: boolean;
showPublicScores?: boolean;
showPublicOpinions?: boolean;
}
export interface ClientOrganizationView {
+21
View File
@@ -67,6 +67,17 @@ class CompaniesManager implements ICompaniesManager {
this.companies = new CompaniesAdapterMongoose();
}
private async validatePublicRatingFlagsPlan(ownerId: string): Promise<void> {
const { default: PlanSubscriptionsList } = await import("../PlanSubscriptions/PlanSubscriptons");
const subscription = await PlanSubscriptionsList.getSubscriptionByUser({
sessionUser: ownerId,
});
if (!subscription || subscription.plan.price === 0) {
throw new Error("Esta configuración está disponible solo para planes pagos.");
}
}
public async toggleFixedPost(data: FixCompanyPostParams): Promise<void> {
await validateSessionUser({
sessionUser: data.sessionUser,
@@ -489,6 +500,10 @@ class CompaniesManager implements ICompaniesManager {
throw new Error(NoPermissionMessage());
}
if (data.showPublicScores !== undefined || data.showPublicOpinions !== undefined) {
await this.validatePublicRatingFlagsPlan(String(companyCheck.ownerId));
}
let updateData = {
...data,
};
@@ -597,6 +612,8 @@ class CompaniesManager implements ICompaniesManager {
templateEmailAltaId: isNull<string>(company.templateEmailAltaId, ""),
onboardingStep: company.onboardingStep,
onboardingCompleted: company.onboardingCompleted,
showPublicScores: company.showPublicScores ?? true,
showPublicOpinions: company.showPublicOpinions ?? true,
};
}
@@ -716,6 +733,8 @@ class CompaniesManager implements ICompaniesManager {
templateEmailAltaId: isNull<string>(company.templateEmailAltaId, ""),
onboardingStep: company.onboardingStep,
onboardingCompleted: company.onboardingCompleted,
showPublicScores: company.showPublicScores ?? true,
showPublicOpinions: company.showPublicOpinions ?? true,
});
}
@@ -786,6 +805,8 @@ class CompaniesManager implements ICompaniesManager {
templateEmailAltaId: isNull<string>(company.templateEmailAltaId, ""),
onboardingStep: company.onboardingStep,
onboardingCompleted: company.onboardingCompleted,
showPublicScores: company.showPublicScores ?? true,
showPublicOpinions: company.showPublicOpinions ?? true,
});
}
}