diff --git a/app/(api)/_actions/handleApolloRequest.ts b/app/(api)/_actions/handleApolloRequest.ts index 1182a67..bd372b3 100644 --- a/app/(api)/_actions/handleApolloRequest.ts +++ b/app/(api)/_actions/handleApolloRequest.ts @@ -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', @@ -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(); } diff --git a/app/(api)/_datalib/_resolvers/Playlist.ts b/app/(api)/_datalib/_resolvers/Playlist.ts index b94ceb0..20463c6 100644 --- a/app/(api)/_datalib/_resolvers/Playlist.ts +++ b/app/(api)/_datalib/_resolvers/Playlist.ts @@ -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; diff --git a/app/(api)/_datalib/_resolvers/Song.ts b/app/(api)/_datalib/_resolvers/Song.ts index 4e87ae8..2ce895d 100644 --- a/app/(api)/_datalib/_resolvers/Song.ts +++ b/app/(api)/_datalib/_resolvers/Song.ts @@ -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; diff --git a/app/(api)/_datalib/_resolvers/User.ts b/app/(api)/_datalib/_resolvers/User.ts index 569e32d..007920e 100644 --- a/app/(api)/_datalib/_resolvers/User.ts +++ b/app/(api)/_datalib/_resolvers/User.ts @@ -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), }, }; diff --git a/app/(api)/_datalib/_services/Playlists.ts b/app/(api)/_datalib/_services/Playlists.ts index 00c7a1a..4c10343 100644 --- a/app/(api)/_datalib/_services/Playlists.ts +++ b/app/(api)/_datalib/_services/Playlists.ts @@ -1,9 +1,15 @@ +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: { @@ -11,6 +17,7 @@ export default class Playlists { name, }, }); + revalidatePath(revalidateCachePath); return playlist; } @@ -24,7 +31,11 @@ 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: { @@ -32,6 +43,7 @@ export default class Playlists { songId, }, }); + revalidatePath(revalidateCachePath); return true; } catch (e) { return false; diff --git a/app/(api)/_datalib/_services/Songs.ts b/app/(api)/_datalib/_services/Songs.ts index 369c543..375632b 100644 --- a/app/(api)/_datalib/_services/Songs.ts +++ b/app/(api)/_datalib/_services/Songs.ts @@ -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; } diff --git a/app/(api)/_datalib/_services/Users.ts b/app/(api)/_datalib/_services/Users.ts index 44ab747..4c278da 100644 --- a/app/(api)/_datalib/_services/Users.ts +++ b/app/(api)/_datalib/_services/Users.ts @@ -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; } @@ -34,7 +37,11 @@ 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: { @@ -42,6 +49,7 @@ export default class Users { }, data: input, }); + revalidatePath(revalidateCachePath); return user; } catch (e) { return null; @@ -49,13 +57,14 @@ export default class Users { } // 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; diff --git a/app/(api)/_datalib/_typeDefs/Playlist.ts b/app/(api)/_datalib/_typeDefs/Playlist.ts index 48f733e..1b359f5 100644 --- a/app/(api)/_datalib/_typeDefs/Playlist.ts +++ b/app/(api)/_datalib/_typeDefs/Playlist.ts @@ -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; diff --git a/app/(api)/_datalib/_typeDefs/Song.ts b/app/(api)/_datalib/_typeDefs/Song.ts index 30d2ad7..b87a857 100644 --- a/app/(api)/_datalib/_typeDefs/Song.ts +++ b/app/(api)/_datalib/_typeDefs/Song.ts @@ -17,7 +17,7 @@ const typeDefs = gql` } type Mutation { - createSong(input: SongInput!): Song + createSong(input: SongInput!, revalidatePath: String!): Song } `; export default typeDefs; diff --git a/app/(api)/_datalib/_typeDefs/User.ts b/app/(api)/_datalib/_typeDefs/User.ts index 41af8a7..c9ab738 100644 --- a/app/(api)/_datalib/_typeDefs/User.ts +++ b/app/(api)/_datalib/_typeDefs/User.ts @@ -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; diff --git a/app/(pages)/_utils/sendApolloRequest.ts b/app/(pages)/_utils/sendApolloRequest.ts index ccd2c7d..74c00cd 100644 --- a/app/(pages)/_utils/sendApolloRequest.ts +++ b/app/(pages)/_utils/sendApolloRequest.ts @@ -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); } diff --git a/app/(pages)/graphql-example/_components/Example/ExampleClientComponent.tsx b/app/(pages)/graphql-example/_components/Example/ExampleClientComponent.tsx index fde0275..1cf7889 100644 --- a/app/(pages)/graphql-example/_components/Example/ExampleClientComponent.tsx +++ b/app/(pages)/graphql-example/_components/Example/ExampleClientComponent.tsx @@ -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', ], }; diff --git a/app/(pages)/graphql-example/_components/Example/ExampleServerComponent.tsx b/app/(pages)/graphql-example/_components/Example/ExampleServerComponent.tsx index af4e658..369691c 100644 --- a/app/(pages)/graphql-example/_components/Example/ExampleServerComponent.tsx +++ b/app/(pages)/graphql-example/_components/Example/ExampleServerComponent.tsx @@ -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', ], };