Add business logic to a service
General
In this example, you will see how to add a new function with your business logic to an existing service. The entity.service.ts file is generated only once by Amplication, and you can freely customize it. Amplication will never override this file.
You can use this file to add new functions, override existing functions that are inherited from entity.service.base, import libraries and modules to the file, or anything else you may need.
You may also use the super keyword to call the functions in the base class.
//this code invoke the update function on the base class
super.update(args);
example
This example will demonstrate how to pass parameters to the service, how to access the database using prisma client , and how to return the data from the service using your application models.
Adding a new function to user.service.ts
- Open your application and open the
user.service.ts
. The file is located in./server/src/user/user.service.ts
.
Initially, the files should look like this
import { Injectable } from "@nestjs/common";
import { PrismaService } from "nestjs-prisma";
import { UserServiceBase } from "./base/user.service.base";
import { PasswordService } from "../auth/password.service";
@Injectable()
export class UserService extends UserServiceBase {
constructor(
protected readonly prisma: PrismaService,
protected readonly passwordService: PasswordService
) {
super(prisma, passwordService);
}
}
- Add import for User. This is the type that describes the User entity in the application and is required for the return type of our new function.
import { User } from "./base/User";
- Add import for UserFindUniqueArgs. this is the args type that is used to find a single User by its ID. We will use it as the input parameter of our new function.
import { UserFindUniqueArgs } from "./base/UserFindUniqueArgs";
- Add the following function to the bottom of the UserService class.
async resetPassword(args: UserFindUniqueArgs): Promise<User> {
return this.prisma.user.update({
where: args.where,
data:{
password:"123456"
}
});
}
For simplicity and demonstration purposes this function resets a password to a fixed string "123456". It is against best practices to use this function in production as it is. You should instead use a random complex string as the new password.
This function gets an object of type FindOneUserArgs as a parameter. It uses the prisma client to find the user and reset its password and then returns the updated user object.