From 0346180d01a45eed6b413a48d20dbe800c3dcd1a Mon Sep 17 00:00:00 2001 From: David Bruno Vontor Date: Sat, 20 Dec 2025 23:18:20 +0100 Subject: [PATCH] feat: add prettier for code formatting refactor: update route for downloader to apps/downloader chore: remove unused filler model files refactor: delete Default layout component and its imports --- backend/account/views.py | 20 +- backend/advertisement/views.py | 10 + backend/commerce/serializers.py | 9 + backend/commerce/views.py | 80 ++-- backend/configuration/views.py | 13 + backend/thirdparty/gopay/views.py | 6 +- backend/thirdparty/zasilkovna/views.py | 14 +- backend/vontor_cz/settings.py | 4 +- backend/vontor_cz/views.py | 2 +- docker-compose.yml | 6 +- frontend/package-lock.json | 401 +++++++++--------- frontend/package.json | 1 + frontend/src/App.tsx | 5 +- frontend/src/api/generated/private/filler | 0 .../src/api/generated/private/models/filler | 1 - frontend/src/api/generated/public/filler | 0 frontend/src/layouts/Default.tsx | 28 -- 17 files changed, 314 insertions(+), 286 deletions(-) create mode 100644 frontend/src/api/generated/private/filler delete mode 100644 frontend/src/api/generated/private/models/filler create mode 100644 frontend/src/api/generated/public/filler delete mode 100644 frontend/src/layouts/Default.tsx diff --git a/backend/account/views.py b/backend/account/views.py index 353ca1d..6905591 100644 --- a/backend/account/views.py +++ b/backend/account/views.py @@ -38,7 +38,7 @@ from rest_framework_simplejwt.views import TokenObtainPairView # Custom Token obtaining view @extend_schema( - tags=["Authentication", "public"], + tags=["account", "public"], summary="Obtain JWT access and refresh tokens (cookie-based)", description="Authenticate user and obtain JWT access and refresh tokens. You can use either email or username.", request=CustomTokenObtainPairSerializer, @@ -107,7 +107,7 @@ class CookieTokenObtainPairView(TokenObtainPairView): return super().validate(attrs) @extend_schema( - tags=["Authentication", "public"], + tags=["account", "public"], summary="Refresh JWT token using cookie", description="Refresh JWT access and refresh tokens using the refresh token stored in cookie.", responses={ @@ -163,7 +163,7 @@ class CookieTokenRefreshView(APIView): #---------------------------------------------LOGOUT------------------------------------------------ @extend_schema( - tags=["Authentication", "public"], + tags=["account", "public"], summary="Logout user (delete access and refresh token cookies)", description="Logs out the user by deleting access and refresh token cookies.", responses={ @@ -185,7 +185,7 @@ class LogoutView(APIView): #-------------------------------------------------------------------------------------------------------------- @extend_schema( - tags=["User"], + tags=["account"], summary="List, retrieve, update, and delete users.", description="Displays all users with filtering and ordering options. Requires authentication and appropriate role.", responses={ @@ -223,7 +223,7 @@ class UserView(viewsets.ModelViewSet): } @extend_schema( - tags=["User"], + tags=["account"], summary="Get permissions based on user role and action.", description="Determines permissions for various actions based on user role and ownership.", responses={ @@ -261,7 +261,7 @@ class UserView(viewsets.ModelViewSet): # Get current user data @extend_schema( - tags=["User"], + tags=["account"], summary="Get current authenticated user", description="Returns details of the currently authenticated user based on JWT token or session.", responses={ @@ -281,7 +281,7 @@ class CurrentUserView(APIView): #1. registration API @extend_schema( - tags=["User Registration"], + tags=["account", "public"], summary="Register a new user (company or individual)", description="Register a new user (company or individual). The user will receive an email with a verification link.", request=UserRegistrationSerializer, @@ -313,7 +313,7 @@ class UserRegistrationViewSet(ModelViewSet): #2. confirming email @extend_schema( - tags=["User Registration"], + tags=["account", "public"], summary="Verify user email via link", description="Verify user email using the link with uid and token.", parameters=[ @@ -346,7 +346,7 @@ class EmailVerificationView(APIView): #1. PasswordReset + send Email @extend_schema( - tags=["User password reset"], + tags=["account", "public"], summary="Request password reset (send email)", description="Request password reset by providing registered email. An email with instructions will be sent.", request=PasswordResetRequestSerializer, @@ -376,7 +376,7 @@ class PasswordResetRequestView(APIView): #2. Confirming reset @extend_schema( - tags=["User password reset"], + tags=["account", "public"], summary="Confirm password reset via token", description="Confirm password reset using token from email.", request=PasswordResetConfirmSerializer, diff --git a/backend/advertisement/views.py b/backend/advertisement/views.py index bb2e42a..2de85f7 100644 --- a/backend/advertisement/views.py +++ b/backend/advertisement/views.py @@ -3,12 +3,14 @@ from rest_framework.response import Response from rest_framework import status, viewsets from rest_framework.permissions import AllowAny, IsAdminUser from rest_framework.authentication import SessionAuthentication +from drf_spectacular.utils import extend_schema, extend_schema_view from .models import ContactMe from .serializer import ContactMeSerializer from .tasks import send_contact_me_email_task +@extend_schema(tags=["advertisement", "public"]) class ContactMePublicView(APIView): permission_classes = [AllowAny] # Avoid CSRF for public endpoint by disabling SessionAuthentication @@ -39,6 +41,14 @@ class ContactMePublicView(APIView): return Response({"id": cm.id, "status": "queued"}, status=status.HTTP_201_CREATED) +@extend_schema_view( + list=extend_schema(tags=["advertisement"], summary="List contact messages (admin)"), + retrieve=extend_schema(tags=["advertisement"], summary="Retrieve contact message (admin)"), + create=extend_schema(tags=["advertisement"], summary="Create contact message (admin)"), + partial_update=extend_schema(tags=["advertisement"], summary="Update contact message (admin)"), + update=extend_schema(tags=["advertisement"], summary="Replace contact message (admin)"), + destroy=extend_schema(tags=["advertisement"], summary="Delete contact message (admin)"), +) class ContactMeAdminViewSet(viewsets.ModelViewSet): queryset = ContactMe.objects.all().order_by("-sent_at") serializer_class = ContactMeSerializer diff --git a/backend/commerce/serializers.py b/backend/commerce/serializers.py index 64230c2..aa5a488 100644 --- a/backend/commerce/serializers.py +++ b/backend/commerce/serializers.py @@ -414,6 +414,11 @@ class PaymentReadSerializer(serializers.ModelSerializer): class OrderMiniSerializer(serializers.ModelSerializer): + status = serializers.ChoiceField( + choices=Order.OrderStatus.choices, + read_only=True + ) + class Meta: model = Order fields = ["id", "status", "total_price", "created_at"] @@ -421,6 +426,10 @@ class OrderMiniSerializer(serializers.ModelSerializer): class OrderReadSerializer(serializers.ModelSerializer): + status = serializers.ChoiceField( + choices=Order.OrderStatus.choices, + read_only=True + ) items = OrderItemReadSerializer(many=True, read_only=True) carrier = CarrierReadSerializer(read_only=True) payment = PaymentReadSerializer(read_only=True) diff --git a/backend/commerce/views.py b/backend/commerce/views.py index 4fe9dd0..3e310d4 100644 --- a/backend/commerce/views.py +++ b/backend/commerce/views.py @@ -44,8 +44,8 @@ from .serializers import ( #FIXME: uravit view na nový order serializer @extend_schema_view( - list=extend_schema(tags=["Orders"], summary="List Orders (public)"), - retrieve=extend_schema(tags=["Orders"], summary="Retrieve Order (public)"), + list=extend_schema(tags=["commerce", "public"], summary="List Orders (public)"), + retrieve=extend_schema(tags=["commerce", "public"], summary="Retrieve Order (public)"), ) class OrderViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): queryset = Order.objects.select_related("carrier", "payment").prefetch_related( @@ -63,7 +63,7 @@ class OrderViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.Ge return OrderReadSerializer @extend_schema( - tags=["Order"], + tags=["commerce", "public"], summary="Create Order (public)", request=OrderCreateSerializer, responses={201: OrderReadSerializer}, @@ -101,7 +101,7 @@ class OrderViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.Ge # -- List mini orders -- (public) -- @action(detail=False, methods=["get"], url_path="detail") @extend_schema( - tags=["Orders"], + tags=["commerce", "public"], summary="List mini orders (public)", responses={200: OrderMiniSerializer(many=True)}, ) @@ -119,7 +119,7 @@ class OrderViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.Ge # -- Get order items -- (public) -- @action(detail=True, methods=["get"], url_path="items") @extend_schema( - tags=["Orders"], + tags=["commerce", "public"], summary="List order items (public)", responses={200: OrderItemReadSerializer(many=True)}, ) @@ -132,7 +132,7 @@ class OrderViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.Ge # -- Get order carrier -- (public) -- @action(detail=True, methods=["get"], url_path="carrier") @extend_schema( - tags=["Orders"], + tags=["commerce", "public"], summary="Get order carrier (public)", responses={200: CarrierReadSerializer}, ) @@ -144,7 +144,7 @@ class OrderViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.Ge # -- Get order payment -- (public) -- @action(detail=True, methods=["get"], url_path="payment") @extend_schema( - tags=["Orders"], + tags=["commerce", "public"], summary="Get order payment (public)", responses={200: PaymentReadSerializer}, ) @@ -161,7 +161,7 @@ class OrderViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.Ge permission_classes=[IsAdminUser], ) @extend_schema( - tags=["Orders"], + tags=["commerce"], summary="Mark carrier ready to pickup (admin)", request=None, responses={200: CarrierReadSerializer}, @@ -183,7 +183,7 @@ class OrderViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.Ge permission_classes=[IsAdminUser], ) @extend_schema( - tags=["Orders"], + tags=["commerce"], summary="Start ordering shipping (admin)", request=None, responses={200: CarrierReadSerializer}, @@ -202,7 +202,7 @@ class OrderViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.Ge class OrderInvoice(viewsets.ViewSet): @action(detail=True, methods=["get"], url_path="generate-invoice") @extend_schema( - tags=["Orders"], + tags=["commerce", "public"], summary="Get Invoice PDF for Order (public)", responses={200: "PDF File"}, ) @@ -237,12 +237,12 @@ class AdminOnlyForPatchOtherwisePublic(AllowAny.__class__): # ---------- Public/admin viewsets ---------- @extend_schema_view( - list=extend_schema(tags=["Products"], summary="List products (public)"), - retrieve=extend_schema(tags=["Products"], summary="Retrieve product (public)"), - create=extend_schema(tags=["Products"], summary="Create product (auth required)"), - partial_update=extend_schema(tags=["Products"], summary="Update product (auth required)"), - update=extend_schema(tags=["Products"], summary="Replace product (auth required)"), - destroy=extend_schema(tags=["Products"], summary="Delete product (auth required)"), + list=extend_schema(tags=["commerce", "public"], summary="List products (public)"), + retrieve=extend_schema(tags=["commerce", "public"], summary="Retrieve product (public)"), + create=extend_schema(tags=["commerce"], summary="Create product (auth required)"), + partial_update=extend_schema(tags=["commerce"], summary="Update product (auth required)"), + update=extend_schema(tags=["commerce"], summary="Replace product (auth required)"), + destroy=extend_schema(tags=["commerce"], summary="Delete product (auth required)"), ) class ProductViewSet(viewsets.ModelViewSet): queryset = Product.objects.all() @@ -255,12 +255,12 @@ class ProductViewSet(viewsets.ModelViewSet): @extend_schema_view( - list=extend_schema(tags=["Categories"], summary="List categories (public)"), - retrieve=extend_schema(tags=["Categories"], summary="Retrieve category (public)"), - create=extend_schema(tags=["Categories"], summary="Create category (auth required)"), - partial_update=extend_schema(tags=["Categories"], summary="Update category (auth required)"), - update=extend_schema(tags=["Categories"], summary="Replace category (auth required)"), - destroy=extend_schema(tags=["Categories"], summary="Delete category (auth required)"), + list=extend_schema(tags=["commerce", "public"], summary="List categories (public)"), + retrieve=extend_schema(tags=["commerce", "public"], summary="Retrieve category (public)"), + create=extend_schema(tags=["commerce"], summary="Create category (auth required)"), + partial_update=extend_schema(tags=["commerce"], summary="Update category (auth required)"), + update=extend_schema(tags=["commerce"], summary="Replace category (auth required)"), + destroy=extend_schema(tags=["commerce"], summary="Delete category (auth required)"), ) class CategoryViewSet(viewsets.ModelViewSet): queryset = Category.objects.all() @@ -273,12 +273,12 @@ class CategoryViewSet(viewsets.ModelViewSet): @extend_schema_view( - list=extend_schema(tags=["Product Images"], summary="List product images (public)"), - retrieve=extend_schema(tags=["Product Images"], summary="Retrieve product image (public)"), - create=extend_schema(tags=["Product Images"], summary="Create product image (auth required)"), - partial_update=extend_schema(tags=["Product Images"], summary="Update product image (auth required)"), - update=extend_schema(tags=["Product Images"], summary="Replace product image (auth required)"), - destroy=extend_schema(tags=["Product Images"], summary="Delete product image (auth required)"), + list=extend_schema(tags=["commerce", "public"], summary="List product images (public)"), + retrieve=extend_schema(tags=["commerce", "public"], summary="Retrieve product image (public)"), + create=extend_schema(tags=["commerce"], summary="Create product image (auth required)"), + partial_update=extend_schema(tags=["commerce"], summary="Update product image (auth required)"), + update=extend_schema(tags=["commerce"], summary="Replace product image (auth required)"), + destroy=extend_schema(tags=["commerce"], summary="Delete product image (auth required)"), ) class ProductImageViewSet(viewsets.ModelViewSet): queryset = ProductImage.objects.all() @@ -291,12 +291,12 @@ class ProductImageViewSet(viewsets.ModelViewSet): @extend_schema_view( - list=extend_schema(tags=["Discount Codes"], summary="List discount codes (public)"), - retrieve=extend_schema(tags=["Discount Codes"], summary="Retrieve discount code (public)"), - create=extend_schema(tags=["Discount Codes"], summary="Create discount code (auth required)"), - partial_update=extend_schema(tags=["Discount Codes"], summary="Update discount code (auth required)"), - update=extend_schema(tags=["Discount Codes"], summary="Replace discount code (auth required)"), - destroy=extend_schema(tags=["Discount Codes"], summary="Delete discount code (auth required)"), + list=extend_schema(tags=["commerce", "public"], summary="List discount codes (public)"), + retrieve=extend_schema(tags=["commerce", "public"], summary="Retrieve discount code (public)"), + create=extend_schema(tags=["commerce"], summary="Create discount code (auth required)"), + partial_update=extend_schema(tags=["commerce"], summary="Update discount code (auth required)"), + update=extend_schema(tags=["commerce"], summary="Replace discount code (auth required)"), + destroy=extend_schema(tags=["commerce"], summary="Delete discount code (auth required)"), ) class DiscountCodeViewSet(viewsets.ModelViewSet): queryset = DiscountCode.objects.all() @@ -310,12 +310,12 @@ class DiscountCodeViewSet(viewsets.ModelViewSet): # -- Refund (Admin only) -- @extend_schema_view( - list=extend_schema(tags=["Refunds"], summary="List refunds (admin)"), - retrieve=extend_schema(tags=["Refunds"], summary="Retrieve refund (admin)"), - create=extend_schema(tags=["Refunds"], summary="Create refund (admin)"), - partial_update=extend_schema(tags=["Refunds"], summary="Update refund (admin)"), - update=extend_schema(tags=["Refunds"], summary="Replace refund (admin)"), - destroy=extend_schema(tags=["Refunds"], summary="Delete refund (admin)"), + list=extend_schema(tags=["commerce"], summary="List refunds (admin)"), + retrieve=extend_schema(tags=["commerce"], summary="Retrieve refund (admin)"), + create=extend_schema(tags=["commerce"], summary="Create refund (admin)"), + partial_update=extend_schema(tags=["commerce"], summary="Update refund (admin)"), + update=extend_schema(tags=["commerce"], summary="Replace refund (admin)"), + destroy=extend_schema(tags=["commerce"], summary="Delete refund (admin)"), ) class RefundViewSet(viewsets.ModelViewSet): queryset = Refund.objects.select_related("order").all().order_by("-created_at") diff --git a/backend/configuration/views.py b/backend/configuration/views.py index 6d92d6e..63b666d 100644 --- a/backend/configuration/views.py +++ b/backend/configuration/views.py @@ -1,5 +1,6 @@ from rest_framework import viewsets, mixins from rest_framework.permissions import IsAdminUser, AllowAny +from drf_spectacular.utils import extend_schema, extend_schema_view from .models import SiteConfiguration from .serializers import ( SiteConfigurationAdminSerializer, @@ -15,11 +16,23 @@ class _SingletonQuerysetMixin: return SiteConfiguration.get_solo() +@extend_schema_view( + list=extend_schema(tags=["configuration"], summary="List site configuration (admin)"), + retrieve=extend_schema(tags=["configuration"], summary="Retrieve site configuration (admin)"), + create=extend_schema(tags=["configuration"], summary="Create site configuration (admin)"), + partial_update=extend_schema(tags=["configuration"], summary="Update site configuration (admin)"), + update=extend_schema(tags=["configuration"], summary="Replace site configuration (admin)"), + destroy=extend_schema(tags=["configuration"], summary="Delete site configuration (admin)"), +) class SiteConfigurationAdminViewSet(_SingletonQuerysetMixin, viewsets.ModelViewSet): permission_classes = [IsAdminUser] serializer_class = SiteConfigurationAdminSerializer +@extend_schema_view( + list=extend_schema(tags=["configuration", "public"], summary="List site configuration (public)"), + retrieve=extend_schema(tags=["configuration", "public"], summary="Retrieve site configuration (public)"), +) class SiteConfigurationPublicViewSet(_SingletonQuerysetMixin, viewsets.ReadOnlyModelViewSet): permission_classes = [AllowAny] serializer_class = SiteConfigurationPublicSerializer \ No newline at end of file diff --git a/backend/thirdparty/gopay/views.py b/backend/thirdparty/gopay/views.py index 948255a..3f42fcc 100644 --- a/backend/thirdparty/gopay/views.py +++ b/backend/thirdparty/gopay/views.py @@ -65,7 +65,7 @@ class CreatePaymentView(APIView): permission_classes = [permissions.IsAuthenticated] @extend_schema( - tags=["GoPay"], + tags=["gopay"], operation_id="gopay_create_payment", summary="Vytvořit platbu (minimální vstup)", description=( @@ -146,7 +146,7 @@ class PaymentStatusView(APIView): permission_classes = [permissions.IsAuthenticated] @extend_schema( - tags=["GoPay"], + tags=["gopay"], operation_id="gopay_get_status", summary="Získat stav platby", parameters=[ @@ -202,7 +202,7 @@ class RefundPaymentView(APIView): permission_classes = [permissions.IsAuthenticated] @extend_schema( - tags=["GoPay"], + tags=["gopay"], operation_id="gopay_refund_payment", summary="Refundovat platbu", parameters=[ diff --git a/backend/thirdparty/zasilkovna/views.py b/backend/thirdparty/zasilkovna/views.py index d2aaf4a..63c5837 100644 --- a/backend/thirdparty/zasilkovna/views.py +++ b/backend/thirdparty/zasilkovna/views.py @@ -18,13 +18,13 @@ from .serializers import ( @extend_schema_view( list=extend_schema( - tags=["Packeta-Shipment"], + tags=["zasilkovna"], summary="Hromadný shipment", description="Returns a paginated list of Packeta (Zásilkovna) shipments.", responses=ZasilkovnaShipmentSerializer, ), retrieve=extend_schema( - tags=["Packeta-Shipment"], + tags=["zasilkovna"], summary="Detail hromadné zásilky", description="Returns detail for a single shipment.", responses=ZasilkovnaShipmentSerializer, @@ -42,7 +42,7 @@ class ZasilkovnaShipmentViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin @extend_schema_view( retrieve=extend_schema( - tags=["Packet"], + tags=["zasilkovna"], summary="Packet", description="#TODO: Popis endpointu", responses={200: ZasilkovnaPacketSerializer}, @@ -53,7 +53,7 @@ class ZasilkovnaPacketViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet serializer_class = ZasilkovnaPacketSerializer @extend_schema( - tags=["Packet"], + tags=["zasilkovna"], summary="Get public tracking URL", description="Returns the public Zásilkovna tracking URL derived from the packet's barcode.", responses=OpenApiResponse(response=TrackingURLSerializer), @@ -74,7 +74,7 @@ class ZasilkovnaPacketViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet #HOTOVO @extend_schema( - tags=["Packet"], + tags=["zasilkovna"], summary="Order shipping", description=( "Objedná přepravu přes API Packety," @@ -96,7 +96,7 @@ class ZasilkovnaPacketViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet #HOTOVO @extend_schema( - tags=["Packet"], + tags=["zasilkovna"], summary="Cancel packet", description=( "Cancels the packet through the Packeta API and updates its state to CANCELED. " @@ -118,7 +118,7 @@ class ZasilkovnaPacketViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet #TODO: dodělat/domluvit se @extend_schema( - tags=["Packet"], + tags=["zasilkovna"], summary="Get widget for user, to select pickup point.", description=( "Returns HTML widget for user to select pickup point. " diff --git a/backend/vontor_cz/settings.py b/backend/vontor_cz/settings.py index 2ddef56..d902e52 100644 --- a/backend/vontor_cz/settings.py +++ b/backend/vontor_cz/settings.py @@ -816,7 +816,9 @@ SPECTACULAR_DEFAULTS: Dict[str, Any] = { # enum name overrides. dict with keys "YourEnum" and their choice values "field.choices" # e.g. {'SomeEnum': ['A', 'B'], 'OtherEnum': 'import.path.to.choices'} - 'ENUM_NAME_OVERRIDES': {}, + 'ENUM_NAME_OVERRIDES': { + 'OrderStatusEnum': 'commerce.models.Order.OrderStatus.choices', + }, # Adds "blank" and "null" enum choices where appropriate. disable on client generation issues 'ENUM_ADD_EXPLICIT_BLANK_NULL_CHOICE': True, diff --git a/backend/vontor_cz/views.py b/backend/vontor_cz/views.py index bfde988..9ecc4e6 100644 --- a/backend/vontor_cz/views.py +++ b/backend/vontor_cz/views.py @@ -91,7 +91,7 @@ def choices(request): @extend_schema( - tags=["Testing"], + tags=["core", "testing"], description="Testovací endpoint pro odeslání testovacího emailu.", parameters=[ OpenApiParameter( diff --git a/docker-compose.yml b/docker-compose.yml index 00a51a4..72f8535 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,7 +3,7 @@ services: container_name: backend-vontor-cz build: context: ./backend - dockerfile: dockerfile + dockerfile: Dockerfile restart: always env_file: - ./backend/.env @@ -54,7 +54,7 @@ services: container_name: celery-vontor-cz build: context: ./backend - dockerfile: dockerfile + dockerfile: Dockerfile command: sh -c "python manage.py migrate --noinput && celery -A vontor_cz worker --loglevel=info" restart: always env_file: @@ -70,7 +70,7 @@ services: container_name: celery-beat-vontor-cz build: context: ./backend - dockerfile: dockerfile + dockerfile: Dockerfile command: sh -c "python manage.py migrate --noinput && celery -A vontor_cz beat --loglevel=info" restart: always env_file: diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 34e19a5..3bc7aaf 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -32,6 +32,7 @@ "eslint-plugin-react-refresh": "^0.4.20", "globals": "^16.3.0", "orval": "^7.13.2", + "prettier": "^3.7.4", "typescript": "~5.8.3", "typescript-eslint": "^8.39.1", "vite": "^7.1.2" @@ -458,9 +459,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", - "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", "cpu": [ "ppc64" ], @@ -474,9 +475,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", - "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", "cpu": [ "arm" ], @@ -490,9 +491,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", - "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", "cpu": [ "arm64" ], @@ -506,9 +507,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", - "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", "cpu": [ "x64" ], @@ -522,9 +523,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", - "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", "cpu": [ "arm64" ], @@ -538,9 +539,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", - "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", "cpu": [ "x64" ], @@ -554,9 +555,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", - "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", "cpu": [ "arm64" ], @@ -570,9 +571,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", - "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", "cpu": [ "x64" ], @@ -586,9 +587,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", - "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", "cpu": [ "arm" ], @@ -602,9 +603,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", - "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", "cpu": [ "arm64" ], @@ -618,9 +619,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", - "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", "cpu": [ "ia32" ], @@ -634,9 +635,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", - "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", "cpu": [ "loong64" ], @@ -650,9 +651,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", - "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", "cpu": [ "mips64el" ], @@ -666,9 +667,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", - "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", "cpu": [ "ppc64" ], @@ -682,9 +683,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", - "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", "cpu": [ "riscv64" ], @@ -698,9 +699,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", - "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", "cpu": [ "s390x" ], @@ -714,9 +715,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", - "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", "cpu": [ "x64" ], @@ -730,9 +731,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", - "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", "cpu": [ "arm64" ], @@ -746,9 +747,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", - "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", "cpu": [ "x64" ], @@ -762,9 +763,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", - "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", "cpu": [ "arm64" ], @@ -778,9 +779,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", - "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", "cpu": [ "x64" ], @@ -794,9 +795,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", - "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", "cpu": [ "arm64" ], @@ -810,9 +811,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", - "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", "cpu": [ "x64" ], @@ -826,9 +827,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", - "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", "cpu": [ "arm64" ], @@ -842,9 +843,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", - "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", "cpu": [ "ia32" ], @@ -858,9 +859,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", - "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", "cpu": [ "x64" ], @@ -1115,9 +1116,9 @@ } }, "node_modules/@ibm-cloud/openapi-ruleset": { - "version": "1.33.4", - "resolved": "https://registry.npmjs.org/@ibm-cloud/openapi-ruleset/-/openapi-ruleset-1.33.4.tgz", - "integrity": "sha512-fF1/Uk8jbQIAnWueUxHan6ywORXwQbMvZ6hGjpY77sXLrgcVjWsbJPndeakJxOsTy3pxYcw9cvmkEv+IcIK+nQ==", + "version": "1.33.5", + "resolved": "https://registry.npmjs.org/@ibm-cloud/openapi-ruleset/-/openapi-ruleset-1.33.5.tgz", + "integrity": "sha512-oT8USsTulFAA8FiBN0lA2rJqQI2lIt+HP2pdakGQXo3EviL2vqJTgpSCRwjl6mLJL158f1BVcdQUOEFGxomK3w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1297,40 +1298,40 @@ } }, "node_modules/@orval/angular": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/@orval/angular/-/angular-7.13.2.tgz", - "integrity": "sha512-vcG3vlDWU3wHdB0u0O7pG2BFQCpPmny0Jx2L+wGti9sjFCcN2SJT9hSRF//EVY1ZQQx/2CZHV3N+DnEEJRO5gA==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@orval/angular/-/angular-7.17.0.tgz", + "integrity": "sha512-3DnUU/2vUhKC33bmM2xMGRbbJRs8Qvubvjg+0QGh3AxedOYWRcLTxsuZNyr6n4y2TomrsbB1rFMTveTotE2VuA==", "dev": true, "license": "MIT", "dependencies": { - "@orval/core": "7.13.2" + "@orval/core": "7.17.0" } }, "node_modules/@orval/axios": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/@orval/axios/-/axios-7.13.2.tgz", - "integrity": "sha512-fFAQuHonmzSHjaJWojNj2rju8RrTIHRhDe/YTnRorl74MXjzoioMRPzjlpFul0h3kcrmGyK/o+AzY2nO0FEyNg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@orval/axios/-/axios-7.17.0.tgz", + "integrity": "sha512-qbTOOOGjtfFDgpY1pHJNEO71CybSQiPJxuspVJDnWeoR7cwxOuZuWLWX3QE0bZ/2NHUg11rcuHwzzvPHGYmb0w==", "dev": true, "license": "MIT", "dependencies": { - "@orval/core": "7.13.2" + "@orval/core": "7.17.0" } }, "node_modules/@orval/core": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/@orval/core/-/core-7.13.2.tgz", - "integrity": "sha512-7Z0hz5+un9/3B2TyBoQdhUUET4Zuiw3kd9SPIzzSxR7vvFfklr683Ztp0gJV3S+Uwpt4g6fyezp3IYtLYo0mag==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@orval/core/-/core-7.17.0.tgz", + "integrity": "sha512-oLHJitYNUbPYCijKt77az9Q7PnQE8ga79hVUt46c5cL4dXjjbRMLXSCIxB4M5lbu4D9q4G6ZgjCAxv+Fr7wGRA==", "dev": true, "license": "MIT", "dependencies": { - "@apidevtools/swagger-parser": "^12.0.0", - "@ibm-cloud/openapi-ruleset": "^1.32.1", + "@apidevtools/swagger-parser": "^12.1.0", + "@ibm-cloud/openapi-ruleset": "^1.33.1", "@stoplight/spectral-core": "^1.20.0", "acorn": "^8.15.0", "chalk": "^4.1.2", "compare-versions": "^6.1.1", "debug": "^4.4.3", - "esbuild": "^0.25.9", + "esbuild": "^0.25.11", "esutils": "2.0.3", "fs-extra": "^11.3.1", "globby": "11.1.0", @@ -1341,90 +1342,90 @@ "micromatch": "^4.0.8", "openapi3-ts": "4.5.0", "swagger2openapi": "^7.0.8", - "typedoc": "^0.28.12" + "typedoc": "^0.28.14" } }, "node_modules/@orval/fetch": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/@orval/fetch/-/fetch-7.13.2.tgz", - "integrity": "sha512-Oj81JbRPC5GN71Bg2p/o7zM07QK/W/qhh9KyHekjwspVQZ7X/WTAmq8/QWgsn95+utCNirIh/nsh/al+v36kyA==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@orval/fetch/-/fetch-7.17.0.tgz", + "integrity": "sha512-VZuSKa2tMhHyL4BKiPyXmNj0Z5jF92lisTgWdm24WdmFfrzeGCHDyBbim6ivOMnrcvf0v7o16EeaTdMeNiaGdQ==", "dev": true, "license": "MIT", "dependencies": { - "@orval/core": "7.13.2", + "@orval/core": "7.17.0", "openapi3-ts": "4.5.0" } }, "node_modules/@orval/hono": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/@orval/hono/-/hono-7.13.2.tgz", - "integrity": "sha512-k3CAN4T3SwnhAXOpwmzp6SAnkLrpFZfU6l/EdNy5VSdfpNE+o3MFiQS0sL28zMRUhMIH5l6ZuwAY92fGQqZTxw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@orval/hono/-/hono-7.17.0.tgz", + "integrity": "sha512-/78Gb346+I0jPLML/s/QK7O8sJoiCIQxKT0sJ3YVXPLSKQ4aBEYGcXthAW/LwJTZWz8Rm0vGGnz4svra3gafwg==", "dev": true, "license": "MIT", "dependencies": { - "@orval/core": "7.13.2", - "@orval/zod": "7.13.2", - "fs-extra": "^11.3.1", + "@orval/core": "7.17.0", + "@orval/zod": "7.17.0", + "fs-extra": "^11.3.2", "lodash.uniq": "^4.5.0", "openapi3-ts": "4.5.0" } }, "node_modules/@orval/mcp": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/@orval/mcp/-/mcp-7.13.2.tgz", - "integrity": "sha512-RPIF5WIm1DxOy7tYUbhFQUnWv7RK9+gSIz79gFMKdyhci+XrcvgyQU3rx6rFCXC/k3fwX2QXOYcTptR2EOHScg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@orval/mcp/-/mcp-7.17.0.tgz", + "integrity": "sha512-izVIA3XgBpdQ6u2VLD7lxXbksq2K0wf8ypmQAufd5SewSoyEPcu8jIlLovGLTI5WiBr0pJnHLoltJ4Pl/zkZ0A==", "dev": true, "license": "MIT", "dependencies": { - "@orval/core": "7.13.2", - "@orval/fetch": "7.13.2", - "@orval/zod": "7.13.2", + "@orval/core": "7.17.0", + "@orval/fetch": "7.17.0", + "@orval/zod": "7.17.0", "openapi3-ts": "4.5.0" } }, "node_modules/@orval/mock": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/@orval/mock/-/mock-7.13.2.tgz", - "integrity": "sha512-1jF8SUx/L6E+sNfP9u69U+DnRbeWOcXbFPKc8iTqEr6o+xF3RnpQfDE+ipRsX3DEJVi96XRFq6EhYpuxKXezLw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@orval/mock/-/mock-7.17.0.tgz", + "integrity": "sha512-A/A/50XXBgidhTlQDyPQp6nIUfrP27GagyEQ70ztXS5Z9y1WJe7K5ZjjCnISOc7cFTZJmsYKvuCUo4ptfTm1bA==", "dev": true, "license": "MIT", "dependencies": { - "@orval/core": "7.13.2", + "@orval/core": "7.17.0", "openapi3-ts": "4.5.0" } }, "node_modules/@orval/query": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/@orval/query/-/query-7.13.2.tgz", - "integrity": "sha512-s8LoQkbDXrfS4jwvy3RiM6SJLXrUogVkbE9oOGA6cYnjZDVG3gGtdcr8+2GkKGTXJFggMBR1JsV6I6IVdLBYoQ==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@orval/query/-/query-7.17.0.tgz", + "integrity": "sha512-h/XZRpOLOewIPa/3uSk68M6CSgylrGSUxHux9uEH3P2nYWjwYV+GxuOUptzuONA37LGd76mgytW6tK27VmYeCA==", "dev": true, "license": "MIT", "dependencies": { - "@orval/core": "7.13.2", - "@orval/fetch": "7.13.2", + "@orval/core": "7.17.0", + "@orval/fetch": "7.17.0", "chalk": "^4.1.2", "lodash.omitby": "^4.6.0" } }, "node_modules/@orval/swr": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/@orval/swr/-/swr-7.13.2.tgz", - "integrity": "sha512-O4bvu1gQwcrn86gCPHHhuSswOSx+0ySQVi4gT4cc2YKg0r5VF4TBiHCewpd3Q69R37vfOgBsK7PWZrKn9ZPFeg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@orval/swr/-/swr-7.17.0.tgz", + "integrity": "sha512-ZC5ZjzILWt8WE3V4gWRIg9XWHjQBubUJzin67aKERlybPN+sqMdgMEl9/XL+emUItkAIdex9cCaDHZwqjrmbKg==", "dev": true, "license": "MIT", "dependencies": { - "@orval/core": "7.13.2", - "@orval/fetch": "7.13.2" + "@orval/core": "7.17.0", + "@orval/fetch": "7.17.0" } }, "node_modules/@orval/zod": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/@orval/zod/-/zod-7.13.2.tgz", - "integrity": "sha512-qOyIojDhZDQJhkUwlC01xnH9rAthBYA5xdCxMKqLr4alzaOSNjt2q9TRyrEvGOAYTJXeXwfnX6kUxqAOc/i2rw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@orval/zod/-/zod-7.17.0.tgz", + "integrity": "sha512-ldwGUR4K0YIay+4UGR7ykTYD99Cs+CHIAOAVVny8/h9dU0CD/6sxomHuCzrC0Z2QxVZ4rL7k8g10Kffmp+dHBw==", "dev": true, "license": "MIT", "dependencies": { - "@orval/core": "7.13.2", + "@orval/core": "7.17.0", "lodash.uniq": "^4.5.0", "openapi3-ts": "4.5.0" } @@ -3997,9 +3998,9 @@ } }, "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", "dev": true, "license": "MIT", "dependencies": { @@ -4159,9 +4160,9 @@ "license": "MIT" }, "node_modules/esbuild": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", - "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -4171,32 +4172,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.9", - "@esbuild/android-arm": "0.25.9", - "@esbuild/android-arm64": "0.25.9", - "@esbuild/android-x64": "0.25.9", - "@esbuild/darwin-arm64": "0.25.9", - "@esbuild/darwin-x64": "0.25.9", - "@esbuild/freebsd-arm64": "0.25.9", - "@esbuild/freebsd-x64": "0.25.9", - "@esbuild/linux-arm": "0.25.9", - "@esbuild/linux-arm64": "0.25.9", - "@esbuild/linux-ia32": "0.25.9", - "@esbuild/linux-loong64": "0.25.9", - "@esbuild/linux-mips64el": "0.25.9", - "@esbuild/linux-ppc64": "0.25.9", - "@esbuild/linux-riscv64": "0.25.9", - "@esbuild/linux-s390x": "0.25.9", - "@esbuild/linux-x64": "0.25.9", - "@esbuild/netbsd-arm64": "0.25.9", - "@esbuild/netbsd-x64": "0.25.9", - "@esbuild/openbsd-arm64": "0.25.9", - "@esbuild/openbsd-x64": "0.25.9", - "@esbuild/openharmony-arm64": "0.25.9", - "@esbuild/sunos-x64": "0.25.9", - "@esbuild/win32-arm64": "0.25.9", - "@esbuild/win32-ia32": "0.25.9", - "@esbuild/win32-x64": "0.25.9" + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" } }, "node_modules/escalade": { @@ -4657,9 +4658,9 @@ } }, "node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", "dev": true, "license": "MIT", "dependencies": { @@ -5520,9 +5521,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { @@ -6497,42 +6498,46 @@ } }, "node_modules/orval": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/orval/-/orval-7.13.2.tgz", - "integrity": "sha512-juiE7Tz2aiZaEaKDi1EQNf6lm3D5N8dMkKEV3CtRK9SFhUhR4y6E/2oOA3w5y63kClfhGREGZxcNSSMdHctyzg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/orval/-/orval-7.17.0.tgz", + "integrity": "sha512-iBqZC7HpSSL1CJ9jRCD+5vCYpedd03Udh+izcyFnWyVUN0ywuzGonizJgl5iGTgoe+VXsMM7ndV5h+DkghreMg==", "dev": true, "license": "MIT", "dependencies": { - "@apidevtools/swagger-parser": "^12.0.0", + "@apidevtools/swagger-parser": "^12.1.0", "@commander-js/extra-typings": "^14.0.0", - "@orval/angular": "7.13.2", - "@orval/axios": "7.13.2", - "@orval/core": "7.13.2", - "@orval/fetch": "7.13.2", - "@orval/hono": "7.13.2", - "@orval/mcp": "7.13.2", - "@orval/mock": "7.13.2", - "@orval/query": "7.13.2", - "@orval/swr": "7.13.2", - "@orval/zod": "7.13.2", + "@orval/angular": "7.17.0", + "@orval/axios": "7.17.0", + "@orval/core": "7.17.0", + "@orval/fetch": "7.17.0", + "@orval/hono": "7.17.0", + "@orval/mcp": "7.17.0", + "@orval/mock": "7.17.0", + "@orval/query": "7.17.0", + "@orval/swr": "7.17.0", + "@orval/zod": "7.17.0", "chalk": "^4.1.2", "chokidar": "^4.0.3", "commander": "^14.0.1", "enquirer": "^2.4.1", "execa": "^5.1.1", "find-up": "5.0.0", - "fs-extra": "^11.3.1", - "js-yaml": "4.1.0", + "fs-extra": "^11.3.2", + "jiti": "^2.6.1", + "js-yaml": "4.1.1", "lodash.uniq": "^4.5.0", "openapi3-ts": "4.5.0", "string-argv": "^0.3.2", "tsconfck": "^2.1.2", - "typedoc": "^0.28.12", - "typedoc-plugin-coverage": "^4.0.1", - "typedoc-plugin-markdown": "^4.8.1" + "typedoc": "^0.28.14", + "typedoc-plugin-coverage": "^4.0.2", + "typedoc-plugin-markdown": "^4.9.0" }, "bin": { "orval": "dist/bin/orval.js" + }, + "engines": { + "node": ">=22.18.0" } }, "node_modules/own-keys": { @@ -6712,6 +6717,22 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", + "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -7957,9 +7978,9 @@ } }, "node_modules/validator": { - "version": "13.15.23", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.23.tgz", - "integrity": "sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw==", + "version": "13.15.26", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.26.tgz", + "integrity": "sha512-spH26xU080ydGggxRyR1Yhcbgx+j3y5jbNXk/8L+iRvdIEQ4uTRH2Sgf2dokud6Q4oAtsbNvJ1Ft+9xmm6IZcA==", "dev": true, "license": "MIT", "engines": { diff --git a/frontend/package.json b/frontend/package.json index f547f0a..3662bf5 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -35,6 +35,7 @@ "eslint-plugin-react-refresh": "^0.4.20", "globals": "^16.3.0", "orval": "^7.13.2", + "prettier": "^3.7.4", "typescript": "~5.8.3", "typescript-eslint": "^8.39.1", "vite": "^7.1.2" diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index f5c8d2b..0fb556f 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -22,8 +22,9 @@ export default function App() { } /> } /> - {/* Utilities */} - } /> + {/* APPS */} + } /> + {/* Example protected route group (kept for future use) */} diff --git a/frontend/src/api/generated/private/filler b/frontend/src/api/generated/private/filler new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/api/generated/private/models/filler b/frontend/src/api/generated/private/models/filler deleted file mode 100644 index 3374a29..0000000 --- a/frontend/src/api/generated/private/models/filler +++ /dev/null @@ -1 +0,0 @@ -filler diff --git a/frontend/src/api/generated/public/filler b/frontend/src/api/generated/public/filler new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/layouts/Default.tsx b/frontend/src/layouts/Default.tsx deleted file mode 100644 index c2d7f01..0000000 --- a/frontend/src/layouts/Default.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import Footer from "../components/Footer/footer"; -import ContactMeForm from "../components/Forms/ContactMe/ContactMeForm"; -import Drone from "../components/ads/Drone/Drone"; -import Portfolio from "../components/ads/Portfolio/Portfolio"; -import Home from "../pages/home/home"; -import { Outlet } from "react-router"; -import Navbar from "../components/navbar/SiteNav"; - -export default function HomeLayout(){ - return( - <> - {/* Example usage of imported components, adjust as needed */} - - {}} onLogout={() => {}} /> - - {/*page*/} -
- -
- - -
- -
-