Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Moved cache revalidation inside mutations #8

Merged
merged 1 commit into from
Jan 15, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 1 addition & 11 deletions app/(api)/_actions/handleApolloRequest.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
'use server';

import { revalidatePath, revalidateTag } from 'next/cache';

import handler from '@datalib/apolloServer';

export default async function handleApolloRequest(
query: string,
variables: object,
revalidateCache?: { path?: string; type?: 'page' | 'layout'; tag?: string }
variables: object
) {
const headers = {
'Content-Type': 'application/json',
Expand All @@ -25,12 +22,5 @@ export default async function handleApolloRequest(

const res = await handler(req);

if (revalidateCache?.path) {
revalidatePath(revalidateCache.path, revalidateCache.type);
}
if (revalidateCache?.tag) {
revalidateTag(revalidateCache.tag);
}

return res.json();
}
10 changes: 6 additions & 4 deletions app/(api)/_datalib/_resolvers/Playlist.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,12 @@ const resolvers = {
Mutation: {
createPlaylist: (
_: never,
args: { userId: string; input: PlaylistInput }
) => Playlists.create(args.userId, args.input),
addSong: (_: never, args: { playlistId: string; songId: string }) =>
Playlists.addSong(args.playlistId, args.songId),
args: { userId: string; input: PlaylistInput; revalidatePath: string }
) => Playlists.create(args.userId, args.input, args.revalidatePath),
addSong: (
_: never,
args: { playlistId: string; songId: string; revalidatePath: string }
) => Playlists.addSong(args.playlistId, args.songId, args.revalidatePath),
},
};
export default resolvers;
6 changes: 4 additions & 2 deletions app/(api)/_datalib/_resolvers/Song.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@ const resolvers = {
songs: () => Songs.findAll(),
},
Mutation: {
createSong: (_: never, args: { input: SongInput }) =>
Songs.create(args.input),
createSong: (
_: never,
args: { input: SongInput; revalidatePath: string }
) => Songs.create(args.input, args.revalidatePath),
},
};
export default resolvers;
15 changes: 10 additions & 5 deletions app/(api)/_datalib/_resolvers/User.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,16 @@ const resolvers = {
users: (_: never, args: { ids: string[] }) => Users.findMany(args.ids),
},
Mutation: {
createUser: (_: never, args: { input: UserInput }) =>
Users.create(args.input),
updateUser: (_: never, args: { id: string; input: UserInput }) =>
Users.update(args.id, args.input),
deleteUser: (_: never, args: { id: string }) => Users.delete(args.id),
createUser: (
_: never,
args: { input: UserInput; revalidatePath: string }
) => Users.create(args.input, args.revalidatePath),
updateUser: (
_: never,
args: { id: string; input: UserInput; revalidatePath: string }
) => Users.update(args.id, args.input, args.revalidatePath),
deleteUser: (_: never, args: { id: string; revalidatePath: string }) =>
Users.delete(args.id, args.revalidatePath),
},
};

Expand Down
16 changes: 14 additions & 2 deletions app/(api)/_datalib/_services/Playlists.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,23 @@
import { revalidatePath } from 'next/cache';

import prisma from '../_prisma/client';
import { PlaylistInput } from '@datatypes/Playlist';

export default class Playlists {
// CREATE
static async create(userId: string, input: PlaylistInput) {
static async create(
userId: string,
input: PlaylistInput,
revalidateCachePath: string
) {
const { name } = input;
const playlist = await prisma.playlist.create({
data: {
userId,
name,
},
});
revalidatePath(revalidateCachePath);
return playlist;
}

Expand All @@ -24,14 +31,19 @@ export default class Playlists {
}

// OTHER
static async addSong(playlistId: string, songId: string) {
static async addSong(
playlistId: string,
songId: string,
revalidateCachePath: string
) {
try {
await prisma.playlistToSong.create({
data: {
playlistId,
songId,
},
});
revalidatePath(revalidateCachePath);
return true;
} catch (e) {
return false;
Expand Down
5 changes: 4 additions & 1 deletion app/(api)/_datalib/_services/Songs.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
import { revalidatePath } from 'next/cache';

import prisma from '../_prisma/client';
import { SongInput } from '@datatypes/Song';

export default class Songs {
// CREATE
static async create(input: SongInput) {
static async create(input: SongInput, revalidateCachePath: string) {
const { name } = input;
const song = await prisma.song.create({
data: {
name,
},
});
revalidatePath(revalidateCachePath);
return song;
}

Expand Down
15 changes: 12 additions & 3 deletions app/(api)/_datalib/_services/Users.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
import { revalidatePath } from 'next/cache';

import { UserInput } from '@datatypes/User';
import prisma from '../_prisma/client';

export default class Users {
// CREATE
static async create(input: UserInput) {
static async create(input: UserInput, revalidateCachePath: string) {
const { name } = input;
const user = await prisma.user.create({
data: {
name,
},
});
revalidatePath(revalidateCachePath);
return user;
}

Expand All @@ -34,28 +37,34 @@ export default class Users {
}

// UDPATE
static async update(id: string, input: UserInput) {
static async update(
id: string,
input: UserInput,
revalidateCachePath: string
) {
try {
const user = await prisma.user.update({
where: {
id,
},
data: input,
});
revalidatePath(revalidateCachePath);
return user;
} catch (e) {
return null;
}
}

// DELETE
static async delete(id: string) {
static async delete(id: string, revalidateCachePath: string) {
try {
await prisma.user.delete({
where: {
id,
},
});
revalidatePath(revalidateCachePath);
return true;
} catch (e) {
return false;
Expand Down
8 changes: 6 additions & 2 deletions app/(api)/_datalib/_typeDefs/Playlist.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,12 @@ const typeDefs = gql`
}

type Mutation {
createPlaylist(userId: ID!, input: PlaylistInput!): Playlist
addSong(playlistId: ID!, songId: ID!): Boolean
createPlaylist(
userId: ID!
input: PlaylistInput!
revalidatePath: String!
): Playlist
addSong(playlistId: ID!, songId: ID!, revalidatePath: String!): Boolean
}
`;
export default typeDefs;
2 changes: 1 addition & 1 deletion app/(api)/_datalib/_typeDefs/Song.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ const typeDefs = gql`
}

type Mutation {
createSong(input: SongInput!): Song
createSong(input: SongInput!, revalidatePath: String!): Song
}
`;
export default typeDefs;
6 changes: 3 additions & 3 deletions app/(api)/_datalib/_typeDefs/User.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ const typeDefs = gql`
}

type Mutation {
createUser(input: UserInput!): User
updateUser(id: ID!, input: UserInput!): User
deleteUser(id: ID!): Boolean
createUser(input: UserInput!, revalidatePath: String!): User
updateUser(id: ID!, input: UserInput!, revalidatePath: String!): User
deleteUser(id: ID!, revalidatePath: String!): Boolean
}
`;
export default typeDefs;
5 changes: 2 additions & 3 deletions app/(pages)/_utils/sendApolloRequest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@ import handleApolloRequest from '@actions/handleApolloRequest';

export default async function sendApolloRequest(
query: DocumentNode,
variables: object,
revalidateCache?: { path?: string; type?: 'page' | 'layout'; tag?: string }
variables: object
) {
return handleApolloRequest(print(query), variables, revalidateCache);
return handleApolloRequest(print(query), variables);
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ const query = gql`
// Example IDs
const variables = {
ids: [
'7bae85c0-7862-4d8e-b991-41c73d51936d',
'9e327de1-38f1-4324-9427-48ec9a670ca3',
'47ca283a-2178-4760-814f-7f847f580af3',
// '7bae85c0-7862-4d8e-b991-41c73d51936d',
// '9e327de1-38f1-4324-9427-48ec9a670ca3',
// '47ca283a-2178-4760-814f-7f847f580af3',
],
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ const query = gql`
// Example IDs
const variables = {
ids: [
'7bae85c0-7862-4d8e-b991-41c73d51936d',
'9e327de1-38f1-4324-9427-48ec9a670ca3',
'47ca283a-2178-4760-814f-7f847f580af3',
// '7bae85c0-7862-4d8e-b991-41c73d51936d',
// '9e327de1-38f1-4324-9427-48ec9a670ca3',
// '47ca283a-2178-4760-814f-7f847f580af3',
],
};

Expand Down