0

so, i want to create a memory for a user and add the user to the memory api using prisma. in this user table and memory table are connected by a many to many relationship. They share a common table userMemory.

schema.prisma

model User {
  userId         String       @id @default(uuid())
  avatarUrl      String?
  bio            String?
  firstName      String
  lastName       String?
  dob            DateTime
  createdAt      DateTime     @default(now())
  modifiedAt     DateTime     @default(now()) @updatedAt
  createdBy      String?
  modifiedBy     String?
  followersCount BigInt       @default(0)
  followingCount BigInt       @default(0)
  memories       UserMemory[]
}

model Memory {
  memoryId   String       @id @default(uuid())
  users      UserMemory[]
  latitude   Float?
  longitude  Float?
  createdAt  DateTime     @default(now())
  modifiedAt DateTime     @default(now()) @updatedAt
  createdBy  String?
  modifiedBy String?
  textHtml   String?
  mediaUrl   String[]
}

This is my user services file

import { Injectable } from '@nestjs/common';
import { GraphQLError } from 'graphql/error';
import { PrismaService } from 'src/prisma/prisma.service';
import {
  CreateUserInput,
  OrderByInput,
  UpdateUserInput,
} from 'src/types/graphql';

@Injectable()
export class UserService {
  constructor(private prisma: PrismaService) {}

  async create(createUserInput: CreateUserInput) {
    try {
      let user = await this.prisma.user.create({
        data: createUserInput,
      });

      user = await this.prisma.user.update({
        where: { userId: user.userId },
        data: {
          createdBy: user.userId,
          modifiedBy: user.userId,
        },
      });

      return user;
    } catch (e) {
      throw new GraphQLError('Error Occurred', {
        extensions: { e },
      });
    }
  }

}

This is my memories service file

import { Injectable } from '@nestjs/common';
import { GraphQLError } from 'graphql';
import { PrismaService } from 'src/prisma/prisma.service';
import { CreateMemoryInput, UpdateMemoryInput } from 'src/types/graphql';

@Injectable()
export class MemoriesService {
  constructor(private prisma: PrismaService) {}

  async create({ authorId, ...createMemoryInput }: CreateMemoryInput) {
    try {
      const user = await this.prisma.user.findUnique({
        where: {
          userId: authorId,
        },
      });
      const memory = await this.prisma.memory.create({
        data: {
          ...createMemoryInput,
          createdBy: authorId,
          modifiedBy: authorId,
          users: {
            create: [
              {
                user: {
                  connect: {
                    userId: authorId,
                    ...user,
                  },
                },
              },
            ],
          },
        },
        include: {
          users: true,
        },
      });
      return memory;
    } catch (e) {
      throw new GraphQLError('Error Occurred', {
        extensions: { e },
      });
    }
  }

  async findOne(memoryId: string) {
    try {
      return await this.prisma.memory.findUnique({
        where: {
          memoryId,
        },
        include: {
          users: true,
        },
      });
    } catch (e) {
      throw new GraphQLError('Error Occurred', {
        extensions: { e },
      });
    }
  }

}

my users type defination file

scalar Date
scalar URL
scalar Timestamp
scalar UUID

type User {
  userId: UUID!
  avatarUrl: URL
  bio: String
  firstName: String!
  lastName: String
  dob: Date
  createdAt: Timestamp
  modifiedAt: Timestamp
  createdBy: UUID
  modifiedBy: UUID
  memories: [Memory]
}

input CreateUserInput {
  firstName: String!
  lastName: String
  dob: Date!
}

type Mutation {
  createUser(createUserInput: CreateUserInput!): User!
}

my memories type defination file

type Memory {
  memoryId: UUID!
  users: [User]
  latitude: Float
  longitude: Float
  createdAt: Timestamp
  modifiedAt: Timestamp
  createdBy: UUID
  modifiedBy: UUID
  textHtml: String
  mediaUrl: [String]
}

input CreateMemoryInput {
  authorId: UUID!
  latitude: Float
  longitude: Float
  textHtml: String
  mediaUrl: [String]
}

type Query {
  memories: [Memory]!
  memory(memoryId: UUID!): Memory
}

type Mutation {
  createMemory(createMemoryInput: CreateMemoryInput!): Memory!
}

this is my creat mutation query

mutation CreateMemory($createMemoryInput: CreateMemoryInput!) {
  createMemory(createMemoryInput: $createMemoryInput) {
    createdAt
    createdBy
    latitude
    longitude
    mediaUrl
    memoryId
    modifiedAt
    modifiedBy
    textHtml
    users {
      accountType
      avatarUrl
      bio
      createdAt
      createdBy
      dob
      firstName
      gender
      lastName
      modifiedAt
      modifiedBy
      userId
    }
  }
}

so whenever i am creating a memoory against a user, i am getting this error, although data is population in data base.

{
  "errors": [
    {
      "message": "Cannot return null for non-nullable field User.firstName.",
      "locations": [
        {
          "line": 43,
          "column": 7
        }
      ],
      "path": [
        "memory",
        "users",
        0,
        "firstName"
      ],
      "extensions": {
        "code": "INTERNAL_SERVER_ERROR",
        "exception": {
          "stacktrace": [
            "Error: Cannot return null for non-nullable field User.firstName.",
            "    at completeValue (/Users/sohamnandi/Desktop/Projects/link-yatri-api/node_modules/graphql/execution/execute.js:594:13)",
            "    at executeField (/Users/sohamnandi/Desktop/Projects/link-yatri-api/node_modules/graphql/execution/execute.js:489:19)",
            "    at executeFields (/Users/sohamnandi/Desktop/Projects/link-yatri-api/node_modules/graphql/execution/execute.js:413:20)",
            "    at completeObjectValue (/Users/sohamnandi/Desktop/Projects/link-yatri-api/node_modules/graphql/execution/execute.js:914:10)",
            "    at completeValue (/Users/sohamnandi/Desktop/Projects/link-yatri-api/node_modules/graphql/execution/execute.js:635:12)",
            "    at /Users/sohamnandi/Desktop/Projects/link-yatri-api/node_modules/graphql/execution/execute.js:696:25",
            "    at Function.from (<anonymous>)",
            "    at completeListValue (/Users/sohamnandi/Desktop/Projects/link-yatri-api/node_modules/graphql/execution/execute.js:676:34)",
            "    at completeValue (/Users/sohamnandi/Desktop/Projects/link-yatri-api/node_modules/graphql/execution/execute.js:607:12)",
            "    at executeField (/Users/sohamnandi/Desktop/Projects/link-yatri-api/node_modules/graphql/execution/execute.js:489:19)"
          ]
        }
      }
    }
  ],
  "data": {
    "memory": {
      "createdAt": 1674566005576,
      "createdBy": "5a147521-a797-4587-b75f-a07f5b00430e",
      "latitude": null,
      "longitude": null,
      "mediaUrl": [],
      "memoryId": "0f2a1a5a-298b-4b8c-a526-7e06e0d4b126",
      "modifiedAt": 1674566005576,
      "modifiedBy": "5a147521-a797-4587-b75f-a07f5b00430e",
      "textHtml": null,
      "users": [
        null
      ]
    }
  }
}

0 Answers0