@@ -75,6 +75,38 @@ const getCachedWebsiteDomain = cacheable(
7575 }
7676) ;
7777
78+ const userPreferencesCache = cacheable (
79+ async ( userId : string ) => {
80+ try {
81+ return await db . query . userPreferences . findFirst ( {
82+ where : eq ( userPreferences . userId , userId ) ,
83+ } ) ;
84+ } catch {
85+ return null ;
86+ }
87+ } ,
88+ {
89+ expireInSec : 600 ,
90+ prefix : 'user-prefs' ,
91+ staleWhileRevalidate : true ,
92+ staleTime : 120 ,
93+ }
94+ ) ;
95+
96+ const getCachedSession = cacheable (
97+ async ( headers : Headers ) => {
98+ return await auth . api . getSession ( {
99+ headers,
100+ } ) ;
101+ } ,
102+ {
103+ expireInSec : 60 ,
104+ prefix : 'auth-session' ,
105+ staleWhileRevalidate : true ,
106+ staleTime : 30 ,
107+ }
108+ ) ;
109+
78110export async function getTimezone (
79111 request : Request ,
80112 session : { user ?: { id : string } } | null
@@ -84,9 +116,7 @@ export async function getTimezone(
84116 const paramTimezone = url . searchParams . get ( 'timezone' ) ;
85117
86118 if ( session ?. user ) {
87- const pref = await db . query . userPreferences . findFirst ( {
88- where : eq ( userPreferences . userId , session . user . id ) ,
89- } ) ;
119+ const pref = await userPreferencesCache ( session . user . id ) ;
90120 if ( pref ?. timezone && pref . timezone !== 'auto' ) {
91121 return pref . timezone ;
92122 }
@@ -96,13 +126,11 @@ export async function getTimezone(
96126}
97127
98128export async function deriveWebsiteContext ( { request } : { request : Request } ) {
99- const session = await auth . api . getSession ( {
100- headers : request . headers ,
101- } ) ;
102-
103129 const url = new URL ( request . url ) ;
104130 const website_id = url . searchParams . get ( 'website_id' ) ;
105131
132+ const session = await getCachedSession ( request . headers ) ;
133+
106134 if ( ! website_id ) {
107135 if ( ! session ?. user ) {
108136 throw new Error ( 'Unauthorized' ) ;
@@ -111,22 +139,25 @@ export async function deriveWebsiteContext({ request }: { request: Request }) {
111139 return { user : session . user , session, timezone } ;
112140 }
113141
114- const website = await getCachedWebsite ( website_id ) ;
142+ const [ website , timezone ] = await Promise . all ( [
143+ getCachedWebsite ( website_id ) ,
144+ website_id && session ?. user
145+ ? getTimezone ( request , session )
146+ : getTimezone ( request , null )
147+ ] ) ;
115148
116149 if ( ! website ) {
117150 throw new Error ( 'Website not found' ) ;
118151 }
119152
120153 if ( website . isPublic ) {
121- const timezone = await getTimezone ( request , null ) ;
122154 return { user : null , session : null , website, timezone } ;
123155 }
124156
125157 if ( ! session ?. user ) {
126158 throw new Error ( 'Unauthorized' ) ;
127159 }
128160
129- const timezone = await getTimezone ( request , session ) ;
130161 return { user : session . user , session, website, timezone } ;
131162}
132163
0 commit comments