Equipment.java

package com.github.jenkaby.bikerental.equipment.domain.model;

import com.github.jenkaby.bikerental.equipment.domain.service.StatusTransitionPolicy;
import com.github.jenkaby.bikerental.equipment.shared.domain.model.vo.SerialNumber;
import com.github.jenkaby.bikerental.equipment.shared.domain.model.vo.Uid;
import lombok.*;
import org.jspecify.annotations.NonNull;

import java.time.LocalDate;

@Setter
@Getter
@Builder
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class Equipment {

    private Long id;
    private SerialNumber serialNumber;
    private Uid uid;
    private String typeSlug;
    private String statusSlug;
    private String model;
    private LocalDate commissionedAt;
    private String condition;


    public void changeStatusTo(@NonNull String newStatusSlug, @NonNull StatusTransitionPolicy policy) {
        policy.validateTransition(this.statusSlug, newStatusSlug);
        this.statusSlug = newStatusSlug;
    }
}