diff --git a/apiserver/plane/app/views/user/base.py b/apiserver/plane/app/views/user/base.py index ac0c3d711..96e042a16 100644 --- a/apiserver/plane/app/views/user/base.py +++ b/apiserver/plane/app/views/user/base.py @@ -37,6 +37,9 @@ from plane.utils.paginator import BasePaginator from plane.authentication.utils.host import user_ip from plane.bgtasks.user_deactivation_email_task import user_deactivation_email from plane.utils.host import base_host +from django.utils.decorators import method_decorator +from django.views.decorators.cache import cache_control +from django.views.decorators.vary import vary_on_cookie class UserEndpoint(BaseViewSet): @@ -47,6 +50,8 @@ class UserEndpoint(BaseViewSet): return self.request.user @cache_response(60 * 60) + @method_decorator(cache_control(private=True, max_age=12)) + @method_decorator(vary_on_cookie) def retrieve(self, request): serialized_data = UserMeSerializer(request.user).data return Response( @@ -55,6 +60,8 @@ class UserEndpoint(BaseViewSet): ) @cache_response(60 * 60) + @method_decorator(cache_control(private=True, max_age=12)) + @method_decorator(vary_on_cookie) def retrieve_user_settings(self, request): serialized_data = UserMeSettingsSerializer(request.user).data return Response(serialized_data, status=status.HTTP_200_OK) @@ -288,6 +295,8 @@ class AccountEndpoint(BaseAPIView): class ProfileEndpoint(BaseAPIView): + @method_decorator(cache_control(private=True, max_age=12)) + @method_decorator(vary_on_cookie) def get(self, request): profile = Profile.objects.get(user=request.user) serializer = ProfileSerializer(profile) diff --git a/apiserver/plane/app/views/workspace/base.py b/apiserver/plane/app/views/workspace/base.py index afe998580..6fa0ccc1e 100644 --- a/apiserver/plane/app/views/workspace/base.py +++ b/apiserver/plane/app/views/workspace/base.py @@ -44,6 +44,9 @@ from plane.db.models import ( WorkspaceTheme, ) from plane.utils.cache import cache_response, invalidate_cache +from django.utils.decorators import method_decorator +from django.views.decorators.cache import cache_control +from django.views.decorators.vary import vary_on_cookie from plane.utils.constants import RESTRICTED_WORKSPACE_SLUGS @@ -172,6 +175,8 @@ class UserWorkSpacesEndpoint(BaseAPIView): ] @cache_response(60 * 60 * 2) + @method_decorator(cache_control(private=True, max_age=12)) + @method_decorator(vary_on_cookie) def get(self, request): fields = [ field diff --git a/apiserver/plane/license/api/views/instance.py b/apiserver/plane/license/api/views/instance.py index 8d885083a..4f021963b 100644 --- a/apiserver/plane/license/api/views/instance.py +++ b/apiserver/plane/license/api/views/instance.py @@ -23,6 +23,8 @@ from plane.license.utils.instance_value import ( get_configuration_value, ) from plane.utils.cache import cache_response, invalidate_cache +from django.utils.decorators import method_decorator +from django.views.decorators.cache import cache_control class InstanceEndpoint(BaseAPIView): @@ -36,6 +38,7 @@ class InstanceEndpoint(BaseAPIView): ] @cache_response(60 * 60 * 2, user=False) + @method_decorator(cache_control(private=True, max_age=12)) def get(self, request): instance = Instance.objects.first() diff --git a/web/app/layout.tsx b/web/app/layout.tsx index 231f4da2f..4647a099b 100644 --- a/web/app/layout.tsx +++ b/web/app/layout.tsx @@ -5,6 +5,8 @@ import "@/styles/globals.css"; import "@/styles/command-pallette.css"; import "@/styles/emoji.css"; import "@/styles/react-day-picker.css"; +// helpers +import { API_BASE_URL } from "@/helpers/common.helper"; // local import { AppProvider } from "./provider"; @@ -36,6 +38,17 @@ export default function RootLayout({ children }: { children: React.ReactNode }) + {/* preloading */} + + + + +