Skip to content

Commit

Permalink
Use tag invalidation instead of paths
Browse files Browse the repository at this point in the history
  • Loading branch information
pookmish committed Mar 29, 2024
1 parent 1fc4bb3 commit 74275ba
Show file tree
Hide file tree
Showing 9 changed files with 216 additions and 74 deletions.
6 changes: 2 additions & 4 deletions app/api/revalidate/route.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {NextRequest, NextResponse} from "next/server";
import {cache as nodeCache} from "@lib/drupal/get-cache";
import {revalidatePath, revalidateTag} from "next/cache";
import {revalidateTag} from "next/cache";

export const revalidate = 0;

Expand All @@ -12,12 +12,10 @@ export const GET = async (request: NextRequest) => {
let path = request.nextUrl.searchParams.get('slug');
if (!path || path.startsWith('/node/')) return NextResponse.json({message: 'Invalid slug'}, {status: 400});

revalidatePath(path);

const tagsInvalidated = ['paths', `paths:${path}`];
if (path.startsWith('/tags/')) path.substring(6).split('/').map(tag => tagsInvalidated.push(tag))

tagsInvalidated.map(tag => revalidateTag(tag));
nodeCache.del(tagsInvalidated)
return NextResponse.json({revalidated: true, path, tags: tagsInvalidated});
return NextResponse.json({revalidated: true, tags: tagsInvalidated});
}
1 change: 0 additions & 1 deletion app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ export const metadata = {

// https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config
export const revalidate = false;
export const dynamic = 'force-static';

const RootLayout = async ({children, modal}: { children: React.ReactNode, modal: React.ReactNode }) => {
const draftMode = isDraftMode();
Expand Down
1 change: 0 additions & 1 deletion app/search/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import AlgoliaSearch from "./algolia-search";

// https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config
export const revalidate = false;
export const dynamic = 'force-static';

export const metadata = {
title: "Search",
Expand Down
116 changes: 103 additions & 13 deletions src/lib/gql/__generated__/drupal.d.ts

Large diffs are not rendered by default.

76 changes: 47 additions & 29 deletions src/lib/gql/__generated__/queries.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

50 changes: 25 additions & 25 deletions src/lib/gql/entity-queries.drupal.gql
Original file line number Diff line number Diff line change
Expand Up @@ -5,51 +5,51 @@ query Node($uuid: ID!) {
}
}

query AllNodes($pageSize: Int = 100) {
nodeStanfordCourses(first: $pageSize, sortKey: CREATED_AT) {
query AllNodes($first: Int = 1000) {
nodeStanfordCourses(first: $first, sortKey: CREATED_AT) {
nodes {
...FragmentNodeInterface
}
}
nodeStanfordEventSeriesItems(first: $pageSize, sortKey: CREATED_AT) {
nodeStanfordEventSeriesItems(first: $first, sortKey: CREATED_AT) {
nodes {
...FragmentNodeInterface
}
}
nodeStanfordEvents(first: $pageSize, sortKey: CREATED_AT) {
nodeStanfordEvents(first: $first, sortKey: CREATED_AT) {
nodes {
...FragmentNodeInterface
}
}
nodeStanfordNewsItems(first: $pageSize, sortKey: CREATED_AT) {
nodeStanfordNewsItems(first: $first, sortKey: CREATED_AT) {
nodes {
...FragmentNodeInterface
}
}
nodeStanfordPages(first: $pageSize, sortKey: CREATED_AT) {
nodeStanfordPages(first: $first, sortKey: CREATED_AT) {
nodes {
...FragmentNodeInterface
}
}
nodeStanfordPeople(first: $pageSize, sortKey: CREATED_AT) {
nodeStanfordPeople(first: $first, sortKey: CREATED_AT) {
nodes {
...FragmentNodeInterface
}
}
nodeStanfordPolicies(first: $pageSize, sortKey: CREATED_AT) {
nodeStanfordPolicies(first: $first, sortKey: CREATED_AT) {
nodes {
...FragmentNodeInterface
}
}
nodeStanfordPublications(first: $pageSize, sortKey: CREATED_AT) {
nodeStanfordPublications(first: $first, sortKey: CREATED_AT) {
nodes {
...FragmentNodeInterface
}
}
}

query Courses($pageSize: Int = 100, $after: Cursor) {
nodeStanfordCourses(first: $pageSize, after: $after, sortKey: CREATED_AT) {
query Courses($first: Int = 1000, $after: Cursor) {
nodeStanfordCourses(first: $first, after: $after, sortKey: CREATED_AT) {
nodes {
...FragmentNodeStanfordCourse
}
Expand All @@ -60,8 +60,8 @@ query Courses($pageSize: Int = 100, $after: Cursor) {
}
}

query EventSeries($pageSize: Int = 100, $after: Cursor) {
nodeStanfordEventSeriesItems(first: $pageSize, after: $after, sortKey: CREATED_AT) {
query EventSeries($first: Int = 1000, $after: Cursor) {
nodeStanfordEventSeriesItems(first: $first, after: $after, sortKey: CREATED_AT) {
nodes {
...FragmentNodeStanfordEventSeries
}
Expand All @@ -72,8 +72,8 @@ query EventSeries($pageSize: Int = 100, $after: Cursor) {
}
}

query Events($pageSize: Int = 100, $after: Cursor) {
nodeStanfordEvents(first: $pageSize, after: $after, sortKey: CREATED_AT) {
query Events($first: Int = 1000, $after: Cursor) {
nodeStanfordEvents(first: $first, after: $after, sortKey: CREATED_AT) {
nodes {
...FragmentNodeStanfordEvent
}
Expand All @@ -84,8 +84,8 @@ query Events($pageSize: Int = 100, $after: Cursor) {
}
}

query News($pageSize: Int = 100, $after: Cursor) {
nodeStanfordNewsItems(first: $pageSize, after: $after, sortKey: CREATED_AT) {
query News($first: Int = 1000, $after: Cursor) {
nodeStanfordNewsItems(first: $first, after: $after, sortKey: CREATED_AT) {
nodes {
...FragmentNodeStanfordNews
}
Expand All @@ -96,8 +96,8 @@ query News($pageSize: Int = 100, $after: Cursor) {
}
}

query BasicPages($pageSize: Int = 100, $after: Cursor) {
nodeStanfordPages(first: $pageSize, after: $after, sortKey: CREATED_AT) {
query BasicPages($first: Int = 1000, $after: Cursor) {
nodeStanfordPages(first: $first, after: $after, sortKey: CREATED_AT) {
nodes {
...FragmentNodeStanfordPage
}
Expand All @@ -108,8 +108,8 @@ query BasicPages($pageSize: Int = 100, $after: Cursor) {
}
}

query People($pageSize: Int = 100, $after: Cursor) {
nodeStanfordPeople(first: $pageSize, after: $after, sortKey: CREATED_AT) {
query People($first: Int = 1000, $after: Cursor) {
nodeStanfordPeople(first: $first, after: $after, sortKey: CREATED_AT) {
nodes {
...FragmentNodeStanfordPerson
}
Expand All @@ -120,8 +120,8 @@ query People($pageSize: Int = 100, $after: Cursor) {
}
}

query Policies($pageSize: Int = 100, $after: Cursor) {
nodeStanfordPolicies(first: $pageSize, after: $after, sortKey: CREATED_AT) {
query Policies($first: Int = 1000, $after: Cursor) {
nodeStanfordPolicies(first: $first, after: $after, sortKey: CREATED_AT) {
nodes {
...FragmentNodeStanfordPolicy
}
Expand All @@ -132,8 +132,8 @@ query Policies($pageSize: Int = 100, $after: Cursor) {
}
}

query Publications($pageSize: Int = 100, $after: Cursor) {
nodeStanfordPublications(first: $pageSize, after: $after, sortKey: CREATED_AT) {
query Publications($first: Int = 1000, $after: Cursor) {
nodeStanfordPublications(first: $first, after: $after, sortKey: CREATED_AT) {
nodes {
...FragmentNodeStanfordPublication
}
Expand Down
4 changes: 4 additions & 0 deletions src/lib/gql/gql-client.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ export const graphqlClient = (requestConfig: RequestConfig = {}) => {
process.env.NEXT_PUBLIC_DRUPAL_BASE_URL + '/graphql',
{
...requestConfig,
next: {
revalidate: 60 * 60 * 24 * 365,
...requestConfig.next
},
// Use fetch function so Next.js will be able to cache it normally.
fetch: async (input: URL | RequestInfo, init?: RequestInit) => fetch(input, init),
}
Expand Down
Loading

0 comments on commit 74275ba

Please sign in to comment.