Skip to content

Skiper29/SmartAgroPlan

Repository files navigation

🌱 SmartAgroPlan

Intelligent Farm Management & Precision Agriculture System

Build & Test Quality Gate Status Coverage Maintainability Rating Security Rating Bugs Vulnerabilities

Features β€’ Tech Stack β€’ Getting Started β€’ API Documentation β€’ Architecture


πŸ“– Overview

SmartAgroPlan is a comprehensive precision agriculture platform that leverages data-driven insights and scientific models to optimize farm operations. Built with modern .NET technologies, it provides farmers and agronomists with actionable recommendations for:

  • πŸ’§ Irrigation Management - FAO-56 based evapotranspiration calculations and soil moisture tracking
  • πŸ§ͺ Fertilization Planning - Nutrient requirement analysis, product optimization, and application scheduling
  • 🌾 Crop Management - Variety selection, phenological stage tracking, and yield forecasting
  • 🌦️ Weather Integration - Real-time and historical weather data from OpenMeteo API
  • πŸ“Š Field Analytics - Soil analysis, nutrient balance, and field condition monitoring
  • πŸ“ Geospatial Support - NetTopologySuite for field boundary management

✨ Key Features

🚜 Fertilizer Management

  • Season Planning: Generate complete fertilization plans based on crop requirements
  • Nutrient Calculations: Scientific nutrient requirement and soil supply analysis
  • Product Optimization: AI-driven fertilizer product selection
  • Application Tracking: Record and monitor actual fertilizer applications
  • Nutrient Analysis: Real-time deficit detection and balance monitoring

πŸ’§ Irrigation Intelligence

  • FAO-56 Methodology: Scientifically accurate evapotranspiration calculations
  • Smart Scheduling: Weather-aware irrigation recommendations
  • Batch Processing: Multi-field recommendation generation
  • Soil Moisture Tracking: Real-time field water status monitoring

🌾 Crop & Field Management

  • Crop Variety Database: Comprehensive crop coefficient definitions
  • Field Monitoring: Track soil conditions, history, and phenological stages
  • Geospatial Data: GeoJSON field boundary support with NetTopologySuite
  • Historical Tracking: Complete crop rotation and application history

🌐 Weather Services

  • Current Conditions: Real-time weather data
  • 7-Day Forecast: Detailed weather predictions
  • Historical Data: Access past weather patterns for analysis

πŸ›  Technology Stack

Backend Framework

  • .NET 9 - Latest .NET platform with native AOT support
  • ASP.NET Core - High-performance REST API framework
  • C# 13 - Modern language features and null safety

Architecture & Patterns

  • MediatR (v13.0) - CQRS implementation for clean command/query separation
  • AutoMapper (v15.0) - Object-to-object mapping for DTOs
  • FluentValidation (v12.0) - Strongly-typed validation rules
  • FluentResults (v4.0) - Railway-oriented programming for error handling

Database & ORM

API Documentation & Testing

  • Scalar (v2.7.2) - Modern OpenAPI/Swagger documentation UI
  • OpenAPI - API specification (ASP.NET Core 9)
  • xUnit (v2.9.3) - Unit testing framework
  • Moq (v4.20.72) - Mocking library
  • FluentAssertions (v8.6.0) - Expressive test assertions
  • Coverlet (v6.0.4) - Code coverage analysis

Logging & Monitoring

Quality Assurance

  • SonarCloud - Continuous code quality and security analysis
  • GitHub Actions - CI/CD pipeline automation
  • Code Coverage - Automated test coverage reporting

Development Tools

  • Rider / Visual Studio - JetBrains and Microsoft IDEs
  • Docker - Containerization (planned)
  • User Secrets - Secure local configuration management

πŸš€ Getting Started

Prerequisites

Ensure you have the following installed:

Installation

  1. Clone the repository
git clone https://github.com/Skiper29/SmartAgroPlan.git
cd SmartAgroPlan
  1. Configure the database connection

Create appsettings.Development.json in SmartAgroPlan.WebAPI/:

{
  "ConnectionStrings": {
    "DefaultConnection": "Host=localhost;Port=5432;Database=SmartAgroPlan;Username=postgres;Password=yourpassword"
  },
  "OpenMeteo": {
    "BaseUrl": "https://api.open-meteo.com/v1"
  }
}
  1. Apply database migrations
cd SmartAgroPlan.WebAPI
dotnet ef database update
  1. Run the application
dotnet run

The API will start at:

  • HTTPS: https://localhost:7001
  • HTTP: http://localhost:5000
  1. Access API Documentation

Navigate to:

  • Scalar UI: https://localhost:7001/scalar/v1
  • OpenAPI JSON: https://localhost:7001/openapi/v1.json

πŸ§ͺ Running Tests

Run all tests

dotnet test

Run with code coverage

dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=opencover

Run specific test project

dotnet test SmartAgroPlan.XUnitTest

The test suite includes:

  • βœ… Unit tests for business logic (BLL)
  • βœ… Repository tests with in-memory database (DAL)
  • βœ… Controller integration tests (WebAPI)
  • βœ… Validation tests with FluentValidation

πŸ“š API Endpoints

🌾 Crops

Method Endpoint Description
GET /api/crop Get all crop varieties
GET /api/crop/{id} Get crop variety by ID
POST /api/crop Create new crop variety
PUT /api/crop Update crop variety
DELETE /api/crop/{id} Delete crop variety

πŸ—ΊοΈ Fields

Method Endpoint Description
GET /api/field Get all fields
GET /api/field/{id} Get field by ID
POST /api/field Create new field
PUT /api/field Update field
DELETE /api/field/{id} Delete field

🌱 Field Conditions

Method Endpoint Description
GET /api/fieldcondition Get all field conditions
GET /api/fieldcondition/{id} Get condition by ID
GET /api/fieldcondition/{fieldId} Get conditions for field
POST /api/fieldcondition Create field condition record
DELETE /api/fieldcondition/{id} Delete condition record

πŸͺ¨ Soil

Method Endpoint Description
GET /api/soil Get all soil types
GET /api/soil/{id} Get soil by ID
GET /api/soil/{soilType} Get soil by type

πŸ’§ Irrigation

Method Endpoint Description
GET /api/irrigation/recommendation/{fieldId} Get irrigation recommendation
POST /api/irrigation/recommendations/batch Get batch recommendations
GET /api/irrigation/schedule/weekly/{fieldId} Get weekly irrigation schedule

Query Parameters:

  • includeForecast - Include weather forecast in calculations
  • forecastDays - Number of forecast days (default: 7)
  • startDate - Schedule start date

πŸ§ͺ Fertilizer - Planning

Method Endpoint Description
GET /api/fertilizer/planning/season-plan Calculate season fertilizer plan
POST /api/fertilizer/planning/season-plan Save season plan to database
GET /api/fertilizer/planning/current-recommendation Get current stage recommendation
GET /api/fertilizer/planning/season-plan/saved Get saved season plan

Query Parameters:

  • fieldId - Field identifier
  • targetYield - Target yield (tons/ha)
  • sowingDate - Sowing date

πŸ§ͺ Fertilizer - Applications

Method Endpoint Description
POST /api/fertilizer/applications Record fertilizer application
GET /api/fertilizer/applications/history Get application history
GET /api/fertilizer/applications/{recordId} Get application details
PUT /api/fertilizer/applications/{recordId} Update application record
DELETE /api/fertilizer/applications/{recordId} Delete application record
GET /api/fertilizer/applications/upcoming Get upcoming applications
GET /api/fertilizer/applications/date-range Get applications by date range
GET /api/fertilizer/applications/summary Get nutrient application summary
GET /api/fertilizer/applications/plans Get saved application plans
PUT /api/fertilizer/applications/plans/{planId} Update application plan

πŸ§ͺ Fertilizer - Calculations

Method Endpoint Description
GET /api/fertilizer/calculations/nutrient-requirement Calculate nutrient requirements
GET /api/fertilizer/calculations/soil-nutrient-supply Calculate soil nutrient supply
POST /api/fertilizer/calculations/optimize-products Optimize product selection

Query Parameters:

  • cropVarietyId - Crop variety ID
  • targetYield - Target yield (tons/ha)
  • fieldAreaHa - Field area in hectares
  • fieldId - Field identifier

πŸ§ͺ Fertilizer - Analysis

Method Endpoint Description
GET /api/fertilizer/analysis/nutrient-balance Get nutrient balance analysis
GET /api/fertilizer/analysis/nutrient-deficit Analyze nutrient deficits

πŸ§ͺ Fertilizer - Products

Method Endpoint Description
GET /api/fertilizer/products Get all fertilizer products
GET /api/fertilizer/products/by-type Get products by type
GET /api/fertilizer/products/search Search products
GET /api/fertilizer/products/{productId} Get product by ID
POST /api/fertilizer/products Create new product
PUT /api/fertilizer/products/{productId} Update product
DELETE /api/fertilizer/products/{productId} Delete product

🌦️ Weather

Method Endpoint Description
GET /api/weather/current Get current weather
GET /api/weather/forecast Get weather forecast
GET /api/weather/historical Get historical weather data

Query Parameters:

  • lat - Latitude
  • lon - Longitude
  • days - Forecast days (default: 7)
  • startDate - Historical data start
  • endDate - Historical data end

πŸ— Architecture

Project Structure

SmartAgroPlan/
β”‚
β”œβ”€β”€ SmartAgroPlan.WebAPI/           # 🌐 Presentation Layer
β”‚   β”œβ”€β”€ Controllers/                # API endpoints
β”‚   β”œβ”€β”€ Extensions/                 # Service configuration extensions
β”‚   β”œβ”€β”€ Data/                       # CSV datasets for seeding
β”‚   └── Program.cs                  # Application entry point
β”‚
β”œβ”€β”€ SmartAgroPlan.BLL/              # πŸ’Ό Business Logic Layer
β”‚   β”œβ”€β”€ Services/                   # Business services
β”‚   β”‚   β”œβ”€β”€ Crops/                  # Crop coefficient calculations
β”‚   β”‚   β”œβ”€β”€ Irrigation/             # FAO-56 irrigation logic
β”‚   β”‚   β”œβ”€β”€ FertilizerForecasting/  # Fertilizer calculations
β”‚   β”‚   β”œβ”€β”€ Weather/                # OpenMeteo integration
β”‚   β”‚   └── Caching/                # Phenology caching
β”‚   β”œβ”€β”€ MediatR/                    # CQRS commands and queries
β”‚   β”‚   β”œβ”€β”€ Crops/
β”‚   β”‚   β”œβ”€β”€ Fields/
β”‚   β”‚   β”œβ”€β”€ Irrigation/
β”‚   β”‚   └── FertilizerForecasting/
β”‚   β”œβ”€β”€ DTO/                        # Data transfer objects
β”‚   β”œβ”€β”€ Validators/                 # FluentValidation rules
β”‚   β”œβ”€β”€ Mapping/                    # AutoMapper profiles
β”‚   β”œβ”€β”€ Models/                     # Business models
β”‚   β”œβ”€β”€ Utils/                      # Helper utilities
β”‚   β”œβ”€β”€ Interfaces/                 # Service contracts
β”‚   β”œβ”€β”€ Attributes/                 # Custom attributes
β”‚   └── PipelineBehaviour/          # MediatR behaviors
β”‚
β”œβ”€β”€ SmartAgroPlan.DAL/              # πŸ—„οΈ Data Access Layer
β”‚   β”œβ”€β”€ Entities/                   # Database entities
β”‚   β”‚   β”œβ”€β”€ Crops/
β”‚   β”‚   β”œβ”€β”€ Fields/
β”‚   β”‚   β”œβ”€β”€ Irrigation/
β”‚   β”‚   β”œβ”€β”€ FertilizerForecasting/
β”‚   β”‚   └── Calendar/
β”‚   β”œβ”€β”€ Configurations/             # EF Core entity configurations
β”‚   β”œβ”€β”€ Repositories/               # Data repositories
β”‚   β”œβ”€β”€ Migrations/                 # EF Core migrations
β”‚   β”œβ”€β”€ Persistence/                # DbContext
β”‚   β”œβ”€β”€ Enums/                      # Database enums
β”‚   └── Helpers/                    # Data helpers
β”‚
└── SmartAgroPlan.XUnitTest/        # πŸ§ͺ Testing Layer
    β”œβ”€β”€ BLL_Tests/                  # Business logic tests
    β”œβ”€β”€ DAL_Tests/                  # Repository tests
    └── WebAPI_Tests/               # Controller tests

Design Patterns

  • 🎯 CQRS - Command Query Responsibility Segregation with MediatR
  • πŸ—‚οΈ Repository Pattern - Data access abstraction
  • πŸ”„ Pipeline Behavior - Cross-cutting concerns (validation, caching)
  • 🏭 Factory Pattern - Object creation strategies
  • πŸ“¦ Dependency Injection - Built-in ASP.NET Core DI
  • 🧬 Domain-Driven Design - Rich domain models
  • πŸš‚ Railway-Oriented Programming - FluentResults for error handling

Key Components

1. MediatR Pipeline

Request β†’ Validation Behavior β†’ Caching Behavior β†’ Handler β†’ Response

2. Caching Strategy

  • Phenology-based cache invalidation
  • Field-related request tracking
  • Automatic cache refresh on data changes

3. FAO-56 Irrigation Model

  • Reference evapotranspiration (ETβ‚€)
  • Crop coefficient calculations
  • Soil water balance
  • Management allowed depletion (MAD)

4. Fertilizer Optimization

  • Nutrient requirement calculations
  • Soil supply analysis
  • Linear programming for product mix
  • Multi-stage fertilization planning

πŸ”§ Configuration

Database Connection

{
  "ConnectionStrings": {
    "DefaultConnection": "Host=localhost;Port=5432;Database=SmartAgroPlan;Username=youruser;Password=yourpassword"
  }
}

Logging (Serilog)

{
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "./logs/log-.txt",
          "rollingInterval": "Day"
        }
      },
      {
        "Name": "Console"
      }
    ]
  }
}

CORS

{
  "CORS": {
    "AllowedOrigins": "*",
    "AllowedHeaders": "*",
    "AllowedMethods": "*"
  }
}

Weather API (OpenMeteo)

{
  "OpenMeteo": {
    "BaseUrl": "https://api.open-meteo.com/v1"
  }
}

πŸ” Code Quality

SonarCloud Integration

This project maintains high code quality standards through continuous analysis:

  • βœ… Maintainability Rating - A-grade maintainable code
  • πŸ” Security Rating - Vulnerability-free codebase
  • 🐞 Bug Detection - Zero critical bugs
  • πŸ“Š Test Coverage - >80% code coverage

πŸ”— View Live Dashboard

CI/CD Pipeline

GitHub Actions workflow includes:

  1. Build verification
  2. Unit test execution
  3. Code coverage analysis
  4. SonarCloud quality gate
  5. Security scanning

πŸ—ΊοΈ Roadmap

βœ… Completed

  • Core API infrastructure with .NET 9
  • PostgreSQL + EF Core setup with migrations
  • MediatR CQRS implementation
  • FAO-56 irrigation calculations
  • Fertilizer planning and optimization
  • OpenMeteo weather integration
  • NetTopologySuite geospatial support
  • Scalar API documentation
  • SonarCloud integration
  • Comprehensive unit tests

🚧 In Progress

  • Advanced caching with Redis
  • Real-time notifications with SignalR
  • Machine learning yield predictions

πŸ“… Planned

  • Frontend dashboard (React/Blazor)
  • Satellite imagery integration
  • IoT sensor integration (soil moisture, weather stations)
  • Multi-tenant organization support
  • Advanced reporting and analytics
  • Export to Excel/PDF

🀝 Contributing

Contributions are welcome! Please follow these steps:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Please ensure:

  • Code passes all tests
  • Code coverage remains above 80%
  • SonarCloud quality gate passes
  • Follows C# coding conventions

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


πŸ‘₯ Authors

Skiper29 - Initial work - GitHub Profile


πŸ™ Acknowledgements

  • Lviv Polytechnic National University - Academic supervision
  • Open-Meteo - Free weather API
  • FAO - Irrigation methodology (FAO-56)
  • Microsoft - .NET platform and tooling
  • JetBrains - Rider IDE
  • SonarCloud - Code quality analysis
  • Open-source community for amazing libraries

πŸ“ž Contact & Support


Made with ❀️ for sustainable agriculture

⭐ Star this repo if you find it useful!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages