Untitled
unknown
typescript
3 years ago
2.4 kB
9
Indexable
import {
FreeBet,
FreeBetPrimitives,
FreeBetProps,
FreeBetStates,
FreeBetTypeProps,
} from '@lionline/games/free-bet/domain';
import { NaturalNumber, Amount, NonEmptyString, Id } from '@lionline/shared-kernel/domain';
import { TripleXFreeBet } from './triple-x-free-bet.value-object';
interface TripleXFreeBetRoundTypeProps extends FreeBetTypeProps {
name: NonEmptyString<'round'>;
config: { roundsToPlay: NaturalNumber };
}
interface TripleXFreeBetRoundTypePrimitives {
name: 'round';
config: { roundsToPlay: number };
}
export class TripleXFreeBetRound extends TripleXFreeBet<TripleXFreeBetRoundTypeProps> {
incrementRound(
numberOfRounds?: NaturalNumber | undefined,
): FreeBet<TripleXFreeBetRoundTypeProps> {
return this.clone({
actualRound: this.props.actualRound.sum(numberOfRounds ?? 1),
});
}
incrementWinAmount(amount: Amount): FreeBet<TripleXFreeBetRoundTypeProps> {
return this.clone({
winAmount: this.props.winAmount.sum(amount),
});
}
static fromPrimitives(props: FreeBetPrimitives<TripleXFreeBetRoundTypePrimitives>) {
return new TripleXFreeBetRound({
id: new Id({ id: props.id }),
actualRound: new NaturalNumber({ value: props.actualRound }),
betValue: new Amount({ value: props.betValue }),
dueDate: props.dueDate,
offerId: new Id({ id: props.offerId }),
state: new FreeBetStates({ state: props.state }),
type: {
name: new NonEmptyString({ value: props.type.name }),
config: { roundsToPlay: new NaturalNumber({ value: props.type.config.roundsToPlay }) },
},
winAmount: new Amount({ value: props.winAmount }),
});
}
toPrimitives(): FreeBetPrimitives<TripleXFreeBetRoundTypePrimitives> {
return {
id: this.props.id.toPrimitives(),
actualRound: this.props.actualRound.toPrimitives(),
betValue: this.props.betValue.toPrimitives(),
dueDate: this.props.dueDate,
offerId: this.props.offerId.toPrimitives(),
state: this.props.state.toPrimitives(),
type: {
name: this.props.type.name.toPrimitives(),
config: { roundsToPlay: this.props.type.config.roundsToPlay.toPrimitives() },
},
winAmount: this.props.winAmount.toPrimitives(),
};
}
private clone(props: Partial<FreeBetProps<TripleXFreeBetRoundTypeProps>>) {
return new TripleXFreeBetRound({
...this.props,
...props,
});
}
}
Editor is loading...