IMapper

The mapper's function is to translate and/or convert a domain object into a persistence object

There are two methods: toDomain and toPersistence the first one receives as argument a persistence object and convert it to a domain object.

// Mapper to be injected on repository.
export class UserModelToDomainMapper implements TMapper<Model, User> {
	//
	map(model: Model): Result<User> {
		const nameOrError = UserNameValueObject.create(model.userName);
		const emailOrError = EmailValueObject.create(model.userEmail);
		const passOrError = PasswordValueObject.create(model.userPassword);
		const birthOrError = BirthdayValueObject.create(model.userBirthDay);

		const observer = ChangesObserver.init<unknown>();

		observer.add(nameOrError);
		observer.add(emailOrError);
		observer.add(passOrError);
		observer.add(birthOrError);

		const result = observer.getResult();

		if (result.isFailure) {
			return Result.fail(result.errorValue());
		}

		return User.create({
			ID: DomainId.create(model.id),
			userName: nameOrError.getResult(),
			userEmail: emailOrError.getResult(),
			userPassword: passOrError.getResult(),
			userBirthDay: birthOrError.getResult(),
			createdAt: model.createdAt,
			updatedAt: model.updatedAt,
			isDeleted: model.isDeleted,
		});
	}
}

// What about Domain to Persistence Conversion ???
// use your domain instance toObject method. e.g: user.toObject();
// OR

export class UserDomainToModelMapper implements TMapper<User, Model> {
	//
	map(domain: User): Result<Model> {
		const model: Model = {
			id: domain.id.uid,
			userName: domain.userName.toObject(),
			userEmail: domain.userEmail.toObject(),
			userPassword: domain.userPassword.toObject(),
			userBirthDay: domain.userBirthDay.toObject(),
			createdAt: domain.createdAt,
			updatedAt: domain.updatedAt,
			isDeleted: domain.isDeleted,
		};

		return Result.ok(model);
	}
}

Mapper with state

TMapper implements map method with state

State

Generate a state for any class that extends to it

What if I have a possible undefined key

Example a user has a optional role on dto, but required on domain entity

Last updated

Was this helpful?