11import "server-only" ;
22import { API_SERVER_URL } from "@/constants/env" ;
3+ import { unstable_cache } from "next/cache" ;
34import { getAuthToken } from "../../app/api/lib/getAuthToken" ;
5+ import { teamsCacheTag } from "../constants/cacheTags" ;
46
57type EnabledTeamScope =
68 | "pay"
@@ -29,16 +31,38 @@ export type Team = {
2931 enabledScopes : EnabledTeamScope [ ] ;
3032} ;
3133
32- export async function getTeamBySlug ( slug : string ) {
33- const token = await getAuthToken ( ) ;
34+ export async function getTeamBySlug ( teamSlug : string ) {
35+ const authToken = await getAuthToken ( ) ;
3436
35- if ( ! token ) {
37+ if ( ! authToken ) {
3638 return null ;
3739 }
3840
39- const teamRes = await fetch ( `${ API_SERVER_URL } /v1/teams/${ slug } ` , {
41+ return getCachedTeamBySlugForAuthToken ( authToken , teamSlug ) ;
42+ }
43+
44+ export function getCachedTeamBySlugForAuthToken (
45+ authToken : string ,
46+ teamSlug : string ,
47+ ) {
48+ const getCachedTeam = unstable_cache (
49+ getTeamBySlugForAuthToken ,
50+ [ "getTeamBySlug" ] ,
51+ {
52+ tags : [ teamsCacheTag ( authToken ) ] ,
53+ revalidate : 3600 , // 1 hour
54+ } ,
55+ ) ;
56+
57+ return getCachedTeam ( teamSlug , authToken ) ;
58+ }
59+
60+ async function getTeamBySlugForAuthToken ( teamSlug : string , authToken : string ) {
61+ console . log ( "FETCHING TEAM ------------------------" , teamSlug ) ;
62+
63+ const teamRes = await fetch ( `${ API_SERVER_URL } /v1/teams/${ teamSlug } ` , {
4064 headers : {
41- Authorization : `Bearer ${ token } ` ,
65+ Authorization : `Bearer ${ authToken } ` ,
4266 } ,
4367 } ) ;
4468 if ( teamRes . ok ) {
@@ -48,14 +72,26 @@ export async function getTeamBySlug(slug: string) {
4872}
4973
5074export async function getTeams ( ) {
51- const token = await getAuthToken ( ) ;
52- if ( ! token ) {
75+ const authToken = await getAuthToken ( ) ;
76+
77+ if ( ! authToken ) {
5378 return null ;
5479 }
5580
81+ const getCachedTeams = unstable_cache ( getTeamsForAuthToken , [ "getTeams" ] , {
82+ tags : [ teamsCacheTag ( authToken ) ] ,
83+ revalidate : 3600 , // 1 hour
84+ } ) ;
85+
86+ return getCachedTeams ( authToken ) ;
87+ }
88+
89+ async function getTeamsForAuthToken ( authToken : string ) {
90+ console . log ( "FETCHING ALL TEAMs ------------------------" ) ;
91+
5692 const teamsRes = await fetch ( `${ API_SERVER_URL } /v1/teams` , {
5793 headers : {
58- Authorization : `Bearer ${ token } ` ,
94+ Authorization : `Bearer ${ authToken } ` ,
5995 } ,
6096 } ) ;
6197 if ( teamsRes . ok ) {
@@ -70,24 +106,39 @@ type TeamNebulaWaitList = {
70106} ;
71107
72108export async function getTeamNebulaWaitList ( teamSlug : string ) {
73- const token = await getAuthToken ( ) ;
109+ const authToken = await getAuthToken ( ) ;
74110
75- if ( ! token ) {
111+ if ( ! authToken ) {
76112 return null ;
77113 }
78114
115+ const getCachedNebulaWaitlist = unstable_cache (
116+ getTeamNebulaWaitListForAuthToken ,
117+ [ "getTeamNebulaWaitList" ] ,
118+ {
119+ tags : [ teamsCacheTag ( authToken ) ] ,
120+ revalidate : 3600 , // 1 hour
121+ } ,
122+ ) ;
123+
124+ return getCachedNebulaWaitlist ( teamSlug , authToken ) ;
125+ }
126+
127+ async function getTeamNebulaWaitListForAuthToken (
128+ teamSlug : string ,
129+ authToken : string ,
130+ ) {
79131 const res = await fetch (
80132 `${ API_SERVER_URL } /v1/teams/${ teamSlug } /waitlist?scope=nebula` ,
81133 {
82134 headers : {
83- Authorization : `Bearer ${ token } ` ,
135+ Authorization : `Bearer ${ authToken } ` ,
84136 } ,
85137 } ,
86138 ) ;
87139
88140 if ( res . ok ) {
89141 return ( await res . json ( ) ) . result as TeamNebulaWaitList ;
90142 }
91-
92143 return null ;
93144}
0 commit comments