ReportLockStatusHandler.java

package org.sanmibuh.tedee.lock.application;

import lombok.RequiredArgsConstructor;
import org.sanmibuh.ddd.port.CommandHandler;
import org.sanmibuh.tedee.lock.domain.Lock;
import org.sanmibuh.tedee.lock.domain.LockRepository;
import org.sanmibuh.tedee.lock.domain.vo.LockId;
import org.sanmibuh.tedee.lock.domain.vo.LockJamStatus;
import org.sanmibuh.tedee.lock.domain.vo.LockState;

@RequiredArgsConstructor
public final class ReportLockStatusHandler extends CommandHandler<ReportLockStatusCommand, Lock> {

  private final LockRepository repository;

  @Override
  protected Lock execute(final ReportLockStatusCommand command) {
    final var lock = repository.get(new LockId(command.deviceId()));
    lock.reportStatus(
        LockState.fromBridgeCode(command.state()), LockJamStatus.fromBridgeCode(command.jammed()));
    repository.save(lock);

    return lock;
  }
}