--- /dev/null
+package de.juplo.demos.pwreset.domain.ports.in;
+
+import de.juplo.demos.pwreset.domain.internal.PasswordResetProgress;
+import de.juplo.demos.pwreset.domain.internal.PasswordResetRequest;
+import de.juplo.demos.pwreset.domain.internal.PasswordResetRequestProgress;
+import lombok.RequiredArgsConstructor;
+import lombok.Value;
+
+import java.time.ZonedDateTime;
+import java.util.Optional;
+import java.util.UUID;
+
+import static de.juplo.demos.pwreset.domain.internal.PasswordResetProgress.Status.*;
+
+
+@RequiredArgsConstructor
+@Value
+public class PasswordResetRequestProgressDTO
+{
+ private final UUID requestId;
+ private final boolean accepted;
+ private final String message;
+ private final Optional<ZonedDateTime> created;
+ private final Optional<ZonedDateTime> confirmed;
+ private final Optional<ZonedDateTime> accomplished;
+
+ public static PasswordResetRequestProgressDTO from(
+ PasswordResetRequest request,
+ PasswordResetProgress progress)
+ {
+ return
+ new PasswordResetRequestProgressDTO(
+ request.getId(),
+ progress.getStatus() != CONFIRMATION_DENIED,
+ progress.getMessage(),
+ Optional.of(request.getCreated()),
+ progress.getStatus() == CONFIRMATION_DENIED
+ ? Optional.empty()
+ : Optional.of(request.getConfirmed()),
+ progress.getStatus() == ACCOMPLISHED
+ ? Optional.empty()
+ : Optional.of(request.getAccomplihed()));
+ }
+}