NutritionAIAPI / README.md
Sakshi
readme
293037b
metadata
title: Nutrition Analysis API
emoji: πŸ₯—
colorFrom: green
colorTo: blue
sdk: docker
sdk_version: 4.44.0
app_file: main.py
pinned: false

Nutrition Analysis API

Overview

A Python FastAPI backend system that provides comprehensive nutritional analysis and health recommendations. The system manages user authentication with role-based access (admin and normal users), product database management, health issue tracking, and AI-powered nutritional analysis using OCR and Google's Gemini API.

Features

Authentication & User Management

  • Role-Based Access Control: Admin and normal user roles
  • JWT Token Authentication: Secure authentication using JSON Web Tokens
  • User Registration & Login: Email and username-based registration
  • Password Security: Bcrypt password hashing

Admin Capabilities

  • Add products with complete nutrition facts to the database
  • List all products in the system
  • Delete products from the database

User Features

  • Manage personal health profile
  • Add/track health issues (diabetes, hypertension, cholesterol, etc.)
  • View and manage health issue records
  • Upload nutrition label images for analysis

AI-Powered Nutrition Analysis

  • OCR Processing: Extract nutrition facts from images using Tesseract OCR
  • Gemini AI Integration: Analyze nutrition data with Google's Gemini API
  • Health Rating: Products rated on a 1-10 scale based on nutritional value
  • Personalized Recommendations: Health-specific advice based on user's tracked health issues
  • Alternative Suggestions: Healthier product alternatives from the admin database

Project Structure

.
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ database.py          # SQLite database configuration
β”‚   β”œβ”€β”€ models.py             # SQLAlchemy ORM models
β”‚   β”œβ”€β”€ schemas.py            # Pydantic validation schemas
β”‚   β”œβ”€β”€ auth.py               # JWT authentication utilities
β”‚   └── routes/
β”‚       β”œβ”€β”€ __init__.py
β”‚       β”œβ”€β”€ admin.py          # Admin endpoints
β”‚       β”œβ”€β”€ user.py           # User auth and health management
β”‚       └── nutrition.py      # OCR and AI analysis endpoints
β”œβ”€β”€ main.py                   # FastAPI application entry point
β”œβ”€β”€ nutrition_app.db          # SQLite database (auto-generated)
└── pyproject.toml            # Python dependencies

Database Schema

Users Table

  • id, username, email, hashed_password, role (admin/user)

Products Table

  • id, name, brand, calories, protein, fat, carbohydrates, sodium, sugar, fiber, cholesterol, serving_size

Health Issues Table

  • id, user_id (FK), issue_type, severity, notes

API Endpoints

Authentication

  • POST /auth/register - Register new user
  • POST /auth/login - Login and get JWT token
  • GET /user/me - Get current user info

User Health Management

  • POST /user/health-issues - Add health issue
  • GET /user/health-issues - List user's health issues
  • DELETE /user/health-issues/{id} - Delete health issue

Admin Product Management

  • POST /admin/products - Add new product (admin only)
  • GET /admin/products - List all products (admin only)
  • DELETE /admin/products/{id} - Delete product (admin only)
  • POST /admin/users/{user_id}/promote - Promote user to admin role (admin only)

Nutrition Analysis

  • POST /nutrition/analyze - Upload image for nutrition analysis

Environment Variables

  • SESSION_SECRET - JWT secret key (auto-configured by)
  • GEMINI_API_KEY - Google Gemini API key (required for AI analysis)

Security Notes

Creating Admin Users

For security, all new user registrations default to normal user role. To create admin users:

  1. Register a regular user account via POST /auth/register
  2. Manually promote the user to admin using one of these methods:
    • Use an existing admin account to call POST /admin/users/{user_id}/promote
    • Directly modify the database to set the first admin (SQLite: UPDATE users SET role='admin' WHERE id=1;)
  3. Once you have at least one admin, use the promotion endpoint for additional admins

Production Deployment

  • Ensure SESSION_SECRET is set to a strong, random value in production
  • Keep GEMINI_API_KEY secure and never expose it in client-side code
  • Consider adding rate limiting for authentication endpoints
  • Regularly audit admin user accounts

Recent Changes

  • 2025-11-17: Initial project setup with complete FastAPI backend implementation
    • Configured SQLite database with SQLAlchemy ORM
    • Implemented secure JWT-based authentication system with role-based access control
    • Created admin and user role-based endpoints
    • Integrated Tesseract OCR for nutrition label extraction
    • Added Gemini API integration for AI-powered analysis
    • Set up comprehensive error handling and validation
    • Fixed critical security vulnerability: removed self-service admin role assignment
    • Added admin-only user promotion endpoint

Technology Stack

  • Framework: FastAPI
  • Database: SQLite with SQLAlchemy ORM
  • Authentication: JWT (python-jose) + bcrypt
  • OCR: Tesseract + pytesseract
  • AI: Google Gemini API
  • Image Processing: Pillow
  • Server: Uvicorn ASGI server

User Preferences

None specified yet.