504fb1bfa1
no-issue This adds the concept of "Value Objects" to an Offers properties, allowing us to move validation out and ensure that an Offer will only ever have valid properties, without having to duplicate checks - or leave them to the persistent layer. This means we can fail early, as well as write unit tests for all of our validation.
25 lines
714 B
JavaScript
25 lines
714 B
JavaScript
const ValueObject = require('../../shared/ValueObject');
|
|
const InvalidOfferTitle = require('../../errors').InvalidOfferTitle;
|
|
|
|
/** @extends ValueObject<string> */
|
|
class OfferTitle extends ValueObject {
|
|
/** @param {unknown} title */
|
|
static create(title) {
|
|
if (!title || typeof title !== 'string') {
|
|
throw new InvalidOfferTitle({
|
|
message: 'Offer `display_title` must be a string.'
|
|
});
|
|
}
|
|
|
|
if (title.length > 191) {
|
|
throw new InvalidOfferTitle({
|
|
message: 'Offer `display_title` can be a maximum of 191 characters.'
|
|
});
|
|
}
|
|
|
|
return new OfferTitle(title);
|
|
}
|
|
}
|
|
|
|
module.exports = OfferTitle;
|