demeter

Autonomous Hydroponic Intelligence

cropSchema.js (1449B)


const mongoose = require("mongoose");

const sensorSchema = new mongoose.Schema(
  {
    pH: [Number],
    EC: [Number],
    temp: [Number],
    humidity: [Number],
  },
  { _id: false },
);

const sensorIdsSchema = new mongoose.Schema(
  {
    ph_sensor: { type: String, default: "" },
    ec_sensor: { type: String, default: "" },
    temp_sensor: { type: String, default: "" },
    humidity_sensor: { type: String, default: "" },
  },
  { _id: false },
);

const cropStateSchema = new mongoose.Schema({
  crop_id: { type: String, required: true, unique: true },
  crop: String,
  stage: String,
  sequence_number: { type: Number, default: 0 },
  cycle_duration_hours: { type: Number, default: 1 },
  total_crop_lifetime_days: { type: Number, default: 0 },
  simulated_age_hours: { type: Number, default: 0 },
  planted_at: { type: Date, default: Date.now },
  last_updated: { type: Date, default: Date.now },

  sensors: sensorSchema,

  sensor_ids: { type: sensorIdsSchema, default: () => ({}) },
  location: { type: String, default: "" },
  notes: { type: String, default: "" },
  image_url: { type: String, default: "" },

  action_taken: mongoose.Schema.Types.Mixed,
  outcome: String,
  explanation_log: String,
  bandit_action_id: Number,
  strategic_intent: String,
  reward_score: Number,
  visual_diagnosis: String,

  schema_version: { type: String, default: "1.2" },
});

module.exports = mongoose.model("CropState", cropStateSchema);