From ab60757902a48b79c18e86608a240a568171b916 Mon Sep 17 00:00:00 2001 From: Mario-SO Date: Fri, 24 Jan 2025 16:11:12 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=91=20Hotfix=20for=20currentStages=20t?= =?UTF-8?q?o=20stay=20always=20>=200?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/app/studio/[organization]/(root)/page.tsx | 12 ++++-------- packages/app/components/Layout/NavbarStudio.tsx | 5 ++--- .../server/src/services/organization.service.ts | 5 +++++ packages/server/src/services/stage.service.ts | 13 ++++++++----- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/packages/app/app/studio/[organization]/(root)/page.tsx b/packages/app/app/studio/[organization]/(root)/page.tsx index 1ed387168..569fc9ee2 100644 --- a/packages/app/app/studio/[organization]/(root)/page.tsx +++ b/packages/app/app/studio/[organization]/(root)/page.tsx @@ -1,7 +1,5 @@ -'use server'; - import TableSkeleton from '@/components/misc/Table/TableSkeleton'; -import { LivestreamPageParams, eSort } from '@/lib/types'; +import { LivestreamPageParams } from '@/lib/types'; import CreateLivestreamModal from './livestreams/components/CreateLivestreamModal'; import { Suspense } from 'react'; import { fetchOrganization } from '@/lib/services/organizationService'; @@ -26,8 +24,6 @@ export default async function OrganizationPage({ if (!organization) return notFound(); - const hasFeatures = isFeatureAvailable(organization.expirationDate); - // Calculate the start of the current day const startOfDay = new Date(); startOfDay.setHours(0, 0, 0, 0); @@ -37,7 +33,7 @@ export default async function OrganizationPage({

Create

- {hasFeatures ? ( + {isFeatureAvailable(organization.expirationDate) ? ( )} - {hasFeatures ? ( + {isFeatureAvailable(organization.expirationDate) ? ( ) : ( )} - {hasFeatures ? ( + {isFeatureAvailable(organization.expirationDate) ? ( diff --git a/packages/app/components/Layout/NavbarStudio.tsx b/packages/app/components/Layout/NavbarStudio.tsx index 39e8f24d7..abdb1b282 100644 --- a/packages/app/components/Layout/NavbarStudio.tsx +++ b/packages/app/components/Layout/NavbarStudio.tsx @@ -1,16 +1,15 @@ import React from 'react'; import Image from 'next/image'; import SearchBar from '@/components/misc/SearchBar'; -import Link from 'next/link'; import { NavigationMenu } from '@/components/ui/navigation-menu'; import { IExtendedOrganization } from '@/lib/types'; import UserProfile from '@/components/misc/UserProfile'; import CreateLivestreamModal from '@/app/studio/[organization]/(root)/livestreams/components/CreateLivestreamModal'; import UploadVideoDialog from '@/app/studio/[organization]/(root)/library/components/UploadVideoDialog'; -import LogoDark from '@/public/logo_dark.png'; import FeatureButton from '../ui/feature-button'; import { Radio, FileUp } from 'lucide-react'; import { isFeatureAvailable } from '@/lib/utils/utils'; +import { notFound } from 'next/navigation'; const NavbarStudio = ({ showSearchBar = true, @@ -28,7 +27,7 @@ const NavbarStudio = ({ ); if (!organization) { - return null; + return notFound(); } return ( diff --git a/packages/server/src/services/organization.service.ts b/packages/server/src/services/organization.service.ts index e1e1933f4..7de7c8866 100644 --- a/packages/server/src/services/organization.service.ts +++ b/packages/server/src/services/organization.service.ts @@ -54,6 +54,11 @@ export default class OrganizationService { throw new HttpException(404, 'Organization not found'); } + // Prevent currentStages from going below zero + if (typeof organizationUpdate.currentStages === 'number') { + organizationUpdate.currentStages = Math.max(0, organizationUpdate.currentStages); + } + // Merge current org with updates const updatedOrg: IOrganization = { ...currentOrg, diff --git a/packages/server/src/services/stage.service.ts b/packages/server/src/services/stage.service.ts index 834c300e7..fc919c52b 100644 --- a/packages/server/src/services/stage.service.ts +++ b/packages/server/src/services/stage.service.ts @@ -124,11 +124,14 @@ export default class StageService { const stage = await this.get(stageId); await deleteStream(stage.streamSettings.streamId); - // Decrement currentStages for the organization - await Organization.findByIdAndUpdate( - stage.organizationId, - { $inc: { currentStages: -1 } } - ); + // Get organization and only decrement if currentStages > 0 + const organization = await Organization.findById(stage.organizationId); + if (organization && organization.currentStages > 0) { + await Organization.findByIdAndUpdate( + stage.organizationId, + { $inc: { currentStages: -1 } } + ); + } return await this.controller.store.delete(stageId); }