content: package com.food.order.system.restaurant.domain.core.entity;
  
  import com.food.order.system.entity.BaseEntity;
  import com.food.order.system.valueobject.Money;
  import com.food.order.system.valueobject.ProductId;
  
  public class Product extends BaseEntity<ProductId> {
  
      private String name;
      private Money price;
      private final int quantity;
      private boolean available;
  
      public void updateWithConfirmedNamePriceAndAvailablity(String name, Money price, boolean available) {
          this.name = name;
          this.price = price;
          this.available = available;
      }
  
      private Product(Builder builder) {
          setId(builder.productId);
          name = builder.name;
          price = builder.price;
          quantity = builder.quantity;
          available = builder.available;
      }
  
      public static Builder builder() {
          return new Builder();
      }
  
      public String getName() {
          return name;
      }
  
      public Money getPrice() {
          return price;
      }
  
      public int getQuantity() {
          return quantity;
      }
  
      public boolean isAvailable() {
          return available;
      }
  
  
      public static final class Builder {
          private ProductId productId;
          private String name;
          private Money price;
          private int quantity;
          private boolean available;
  
          private Builder() {
          }
  
          public Builder productId(ProductId val) {
              productId = val;
              return this;
          }
  
          public Builder name(String val) {
              name = val;
              return this;
          }
  
          public Builder price(Money val) {
              price = val;
              return this;
          }
  
          public Builder quantity(int val) {
              quantity = val;
              return this;
          }
  
          public Builder available(boolean val) {
              available = val;
              return this;
          }
  
          public Product build() {
              return new Product(this);
          }
      }
  }
  