The object literal is limited to defining recognized properties, and 'clientId' is not present in the 'RatesWhereUniqueInput' type

Currently, I am using typescript alongside prisma and typegraphql in my project. However, I have encountered a type error while working with RatesWhereUniqueInput generated by prisma. This input is classified as a "CompoundUniqueInput" due to the database I am referencing having two keys: clientId (string) and employeeId (number).

My issue arises when trying to utilize both clientId and employeeId in my repository to target a specific database entry using the "update()" method. The problem stems from the type being autogenerated within the prisma client as clientId_employeeId?, leading to a type error.

Repository Function:

async update(model: Rates): Promise<Rates> {
        const { employeeId, clientId, ...data } = this.mapper.from(model);

        const entity = await this.db.rates.update({
            where: { employeeId, clientId },
            data: {
                ...data,
            },
        });

        return this.mapper.to(entity);
    }

Prisma index.d.ts:

export type RatesWhereUniqueInput = {
    clientId_employeeId?: RatesClientIdEmployeeIdCompoundUniqueInput
}

RatesMapper.ts:

@injectable()
export class RatesMapper {
    public from(model: Rates): RatesEntity {
        return {
            employeeId: model.employeeId,
            clientId: model.clientId,
            rateFull: model.rateFull,
            rateQuarter: model.rateQuarter,
            rateLine: model.rateLine,
            rateWord: model.rateWord,
            createdAt: model.createdAt,
            updatedAt: model.updatedAt,
        };
    }

    public to(entity: RatesEntity): Rates {
        return new Rates({
            ...entity,
        });
    }
}

Answer №1

Let me clarify, your objective is to execute an update query using Prisma on a single record from the Rates table/model. The issue arises when you encounter an error in your where condition.

Solution

To resolve this, consider modifying the update query as shown below:

const entity = await this.db.rates.update({
        where: {
            clientId_employeeId: {
                employeeId,
                clientId,
            },
        },
        data: {
            ...data,
        },
    });

This specific syntax is utilized by Prisma when defining the where condition for models with Compound ID or unique identifier (an ID or unique identifier composed of multiple fields of the model). For further insights, refer to the get record by compound ID or compound unique identifier section within the CRUD Reference Guide found in the Prisma documentation.

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

The argument provided is of type 'string | null' which cannot be assigned to a parameter expecting only 'string' type. The value of 'null' is not compatible with the type 'string' in Angular 12

When trying to parse the stored session data using JSON.parse(sessionStorage.getItem('owner')), we may encounter an error stating: Argument of type 'string | null' is not assignable to parameter of type 'string'. This is becau ...

Tips for customizing Material UI CSS default properties in React

I'm currently working on a React project and utilizing the 'Table' component from Material UI. The default CSS properties of this table, along with its components like TableHead, TableCell, and TableRow, are proving difficult to override whi ...

Creating a React Typescript interface with nested interfaces for props

My issue is with a functional component that is supposed to receive props from another functional component. The problem lies in the fact that an interface within the receiving component always returns 'undefined' when I log it in the console. De ...

What is the proper way to retrieve a constant variable within a return statement?

Here is the code I have written: const keyToDisplayMessage = 'REGULAR_HOME'; const cf = format( { accountName: this.accountName, }, this.pageData.sucessMessages.keyToDisplayMessage, this.$route.name ); return cf; The ...

Determine the category of a nested key within a different type

I'm currently utilizing graphql-codegen which generates types in the following structure: type Price = { onetime: number; monthtly: number; }; type CarModel = { price: Price; name: string; }; type Car = { model: CarModel; someOtherAttri ...

Can we specify the type of a destructured prop when passing it as an argument?

I have implemented Material UI's FixedSizeList which requires rendering rows in the renderRow function and passing it as a child to the component. The renderRow function accepts (index, style, data, scrolling) as arguments from the FixedSizeList comp ...

Is it possible that a declaration file for module 'material-ui/styles/MuiThemeProvider' is missing?

I have been trying to implement the react material-ui theme after installing it via npm. However, I am encountering errors when adding 'import MuiThemeProvider from "material-ui/styles/MuiThemeProvider";' in boot-client.tsx: TS7016: Could not ...

Manufacturing TypeScript classes that are returned by a factory

Developed a custom library that generates classes based on input data and integrates them into a main class. To enhance code maintainability and readability, the logic for generating classes has been extracted into a separate file that exports a factory f ...

Struggle between Angular and fundamental CSS principles

Upon following the steps below, I aim to achieve my desired grids: How to set auto-margin boxes in flexible-width design using CSS? The solution provided is effective when implemented outside of Angular. However, when inserted inside an Angular component ...

Exploring the capabilities of supertest by testing endpoints in Express with NodeJS

Having trouble setting up a test environment to test my TypeScript Express Node.js endpoints. Here are the packages I've installed: jest ts-jest jest-junit supertest @types/supertest @types/jest This is how my spec file looks like: imp ...

Trouble encountered with Axios post request in TypeScript

Currently, I am in the process of integrating TypeScript into my project and while working with Axios for a post request, I encountered an issue. The scenario is that I need to send email, first name, last name, and password in my post request, and expect ...

Ways to dynamically update a Vuetify 3 element's placeholder text?

Here is the code snippet from my component.vue file: <template> <v-text-field name="Foo" :label="$t('foo')" type="text" hint="This is a hint" persistent-hint >& ...

Determine whether there is only one array in the object that contains values

At the moment, I am attempting to examine an array in order to determine if only one of its elements contains data. Consider this sample array: playersByGender = { mens: [], womens: [], other: [] }; Any combination of these elements may contain dat ...

Removing a value from a hashmap using Typescript - what is the best way to do it?

After successfully implementing a hashmap in typescript following a helpful post, I am facing an issue with removing something from the hashmap. TypeScript hashmap/dictionary interface To add a key to the keys field of my abstract Input class's hash ...

The Angular program is receiving significant data from the backend, causing the numbers to be presented in a disorganized manner within an

My Angular 7 application includes a service that fetches data from a WebApi utilizing EntityFramework to retrieve information. The issue arises when numeric fields with more than 18 digits are incorrectly displayed (e.g., the number 23434343434345353453,3 ...

The link function fails to execute

I have created a custom Directive. The issue I am facing is that the html template is not being rendered. Upon debugging, I noticed that the link function is never called because the instance function is also never called. To troubleshoot, I added "debu ...

The Relationship Between Typing Variables and Generic Types in Functions

I need help implementing a specific function type: type TestType<T extends HTMLElement> = (input: T) => React.Ref<T>; I have a variable that I want to be typed with the above type for strict type guarantees on the return type: const Test ...

Challenges encountered while compiling Node.js code with ts-node (Error: Cannot use import statement outside a module)

Trying to compile TypeScript code with NodeJS using this command: npx ts-node src/server.ts An error is thrown: SyntaxError: Cannot use import statement outside a module Following the error's instructions: Warning: To load an ES module, set " ...

Angular: Array in the template re-renders even if its length remains unchanged

Below is the template of a parent component: <ng-container *ngFor="let set of timeSet; index as i"> <time-shift-input *ngIf="enabled" [ngClass]="{ 'mini-times' : miniTimes, 'field field-last&ap ...

Unable to create resource in nestjs due to typeScript compatibility issue

Encountered an Error: TypeError: Cannot access 'properties' property of undefined Failed to execute command: node @nestjs/schematics:resource --name=post --no-dry-run --language="ts" --sourceRoot="src" --spec Attempts made ...