Comments (6)
I don't use Prisma, but according to their docs it generates TS types based on your schemas and exports them from @prisma/client/index.d.ts
https://www.prisma.io/docs/concepts/components/prisma-schema/data-model#type-definitions.
The mapper would look something like this:
// user type exported from prisma, not sure if the "from" is correct but it should be somewhere in your project
import { User as PrismaUser } from "@prisma/client";
export class UserOrmMapper extends OrmMapper<UserEntity, PrismaUser> {
protected toOrmProps(entity: UserEntity): PrismaUser {
const props = entity.getPropsCopy();
const prismaUser: PrismaUser = {
email: props.email.value,
role: props.role,
};
return prismaUser;
}
protected toDomainProps(prismaUser: PrismaUser): EntityProps<UserProps> {
const id = new UUID(prismaUser.id);
const props: UserProps = {
email: new Email(prismaUser.email),
role: prismaUser.role,
};
return { id, props };
}
}
Repository can look something like this:
export class UserRepository {
protected constructor(
protected readonly mapper: OrmMapper<UserEntity, PrismaUser>,
) {}
private readonly prisma = new PrismaClient();
async save(entity: UserEntity): Promise<UserEntity> {
entity.validate(); // Protecting invariant before saving
const ormEntity = this.mapper.toOrmEntity(entity);
const user = await this.prisma.user.create({ data: ormEntity })
return this.mapper.toDomainEntity(user);
}
}
You might need to modify base classes slightly to support prisma instead of typeorm, but the general principles are the same
from domain-driven-hexagon.
Prisma generates typescript types/interfaces for you: https://www.prisma.io/docs/concepts/components/prisma-client/advanced-type-safety
In a mapper you will just need to map your domain entity to match that type so you can save it into a db
from domain-driven-hexagon.
Ah great ! thanks for your explanation and the link provided !
from domain-driven-hexagon.
@Sairyss is there any chance you can provide an example of repository for using prisma typescript types/interfaces with mapper ? (for both methods toDomainEntity and toOrmEntity)
I'm totally stuck on the implementation of the classes
from domain-driven-hexagon.
Thanks @Sairyss I'm gonna try this :)
from domain-driven-hexagon.
Everything working like a charm, thanks @Sairyss !
from domain-driven-hexagon.
Related Issues (20)
- `StructuredClone()` function converts entity object into plain object, causing `undefined` properties when calling getters HOT 2
- @slonik/migrator is not compatible with slonik 30+ HOT 9
- InternalServerErrorException has incorrect documentation HOT 1
- FindUsersQuery should map data to response in order to avoid leaks HOT 1
- Why are ports defined in infrastructure layer? HOT 2
- Intermittent test failure for create-user HOT 7
- Clarification on the Practical Usage of Domain Services in DDD
- it shows compile error HOT 1
- execute start:dev throws error HOT 6
- Implement and add examples for Adapters and Providers from Infrastructure folder? HOT 6
- Enable GitHub discussions ? HOT 1
- Correct approach for different types of concept? HOT 1
- UnitOfWork creating many QueryRunners and not release them HOT 4
- Types are incorrect for value object's unpack method
- Dependency Inversion in new version HOT 1
- Queries using repositories HOT 1
- Query handler breaking the dependency rule? HOT 4
- Authentication module HOT 1
- Resolver returning type HOT 1
- resolver return HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from domain-driven-hexagon.