All files / src/lib/graphql resolvers.ts

0% Statements 0/12
0% Branches 0/8
0% Functions 0/4
0% Lines 0/10

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120                                                                                                                                                                                                                                               
import {
  getAllMetadata,
  getMetadataByKey,
  getMetadataByType,
} from './resolvers/metadata/queries';
import {
  createRecipe,
  deleteRating,
  editRecipe,
  rateRecipe,
} from './resolvers/recipe/mutations';
import {
  getRecipeById,
  getRecipes,
  getRecipesByUserId,
} from './resolvers/recipe/queries';
import {
  addToFavoriteRecipes,
  changePassword,
  cleanUserRecipes,
  createUser,
  deleteAllUser,
  deleteUser,
  followUser,
  loginUser,
  removeFromFavoriteRecipes,
  resetPassword,
  setNewPassword,
  unfollowUser,
  updateUser,
} from './resolvers/user/mutations';
import {
  getFavoriteRecipes,
  getFollowing,
  getUserById,
} from './resolvers/user/queries';
 
export const resolvers = {
  Query: {
    getUserById,
    getRecipeById,
    getRecipes,
    getRecipesByUserId,
    getFavoriteRecipes,
    getFollowing,
    // Metadata queries
    getAllMetadata,
    getMetadataByType,
    getMetadataByKey,
  },
  Mutation: {
    addToFavoriteRecipes,
    changePassword,
    cleanUserRecipes,
    createUser,
    deleteAllUser,
    deleteUser,
    followUser,
    loginUser,
    removeFromFavoriteRecipes,
    resetPassword,
    setNewPassword,
    unfollowUser,
    updateUser,
    createRecipe,
    editRecipe,
    rateRecipe,
    deleteRating,
  },
  Recipe: {
    averageRating: async (
      parent: { id: string },
      _: unknown,
      context: import('@/types/graphql/context').GraphQLContext,
    ) => {
      const agg = await context.prisma.rating.aggregate({
        where: { recipeId: parent.id },
        _avg: { ratingValue: true },
      });
      return agg._avg?.ratingValue || 0;
    },
    ratingsCount: async (
      parent: { id: string },
      _: unknown,
      context: import('@/types/graphql/context').GraphQLContext,
    ) => {
      return await context.prisma.rating.count({
        where: { recipeId: parent.id },
      });
    },
    userRating: async (
      parent: { id: string },
      _: unknown,
      context: import('@/types/graphql/context').GraphQLContext,
    ) => {
      if (!context.userId) return null;
      const rating = await context.prisma.rating.findUnique({
        where: {
          recipeId_userId: { recipeId: parent.id, userId: context.userId },
        },
      });
      return rating?.ratingValue || null;
    },
    isFavorite: async (
      parent: { id: string },
      _: unknown,
      context: import('@/types/graphql/context').GraphQLContext,
    ) => {
      if (!context.userId) return false;
      const count = await context.prisma.recipe.count({
        where: {
          id: parent.id,
          favoritedBy: { some: { id: context.userId } },
        },
      });
      return count > 0;
    },
  },
};