Skip to content

xmarano/Area

Repository files navigation

AREA - Action-REAction Platform

BACKEND FRONTEND AREA

AREA Platform Screenshot

📋 Table des Matières

🎯 Vue d'ensemble

AREA est une plateforme d'automatisation qui permet de créer des workflows connectant différents services web. Inspiré par IFTTT (If This Then That), AREA permet aux utilisateurs de définir des Actions qui déclenchent des REActions automatiques.

Fonctionnalités principales

  • 🔗 Intégration multi-services : Connectez Spotify, Gmail, Discord, Notion et plus
  • 🔄 Workflows automatisés : Créez des automatisations personnalisées
  • 📱 Multi-plateforme : Interface web et application mobile Android
  • 🔐 Authentification sécurisée : OAuth2 et authentification par email
  • 🎨 Interface intuitive : Design moderne et responsive
  • 📊 API RESTful : API complète et documentée

Exemples d'utilisation

  • Recevoir un email quand une nouvelle musique est jouée sur Spotify
  • Poster un message Discord quand un nouveau projet Notion est créé
  • Sauvegarder automatiquement les musiques aimées dans une playlist

🏗️ Architecture

Architecture globale

graph TB
    subgraph "Frontend"
        WEB["Interface Web<br/>(React + Ionic)"]
        MOB["Application Mobile<br/>(Ionic + Capacitor)"]
    end
    
    subgraph "Backend"
        API["API REST<br/>(Flask)"]
        AUTH["Module Auth<br/>(Supabase Auth)"]
        WORK["Gestionnaire Workflows"]
        SERV["Connecteurs Services"]
    end
    
    subgraph "Base de données"
        DB["Supabase<br/>(PostgreSQL)"]
    end
    
    subgraph "Services externes"
        SPOT["Spotify API"]
        YOUTUBE["Youtube API"]
        DISC["Discord API"]
        TELEGRAM["Telegram API"]
    end
    
    WEB --> API
    MOB --> API
    API --> AUTH
    API --> WORK
    API --> SERV
    AUTH --> DB
    WORK --> DB
    SERV --> SPOT
    SERV --> YOUTUBE
    SERV --> DISC
    SERV --> TELEGRAM
Loading

Structure du projet

AREA/
├── server/                 # Backend Flask
│   ├── app.py             # Point d'entrée principal
│   ├── auth/              # Module d'authentification
│   ├── spotify/           # Intégration Spotify
│   ├── database/          # Gestion base de données
│   ├── workflows/         # Gestion des workflows
│   └── requirements.txt   # Dépendances Python
├── mobile/                # Application mobile Ionic
│   ├── src/              # Code source TypeScript/React
│   ├── android/          # Projet Android natif
│   └── package.json      # Dépendances Node.js
├── docker-compose.yml     # Configuration Docker
└── docs/                 # Documentation

🔧 Prérequis

Logiciels requis

  • Node.js >= 18.0.0
  • Python >= 3.8
  • Docker et Docker Compose
  • Git

Pour le développement mobile

  • Java JDK >= 17
  • Android SDK avec command-line tools
  • Android Debug Bridge (ADB)

Comptes de services

  • Compte Supabase (base de données et authentification)
  • Compte Spotify Developer (pour l'intégration Spotify)
  • Comptes optionnels : Youtube API, Discord Developer, Telegram bot

📦 Installation

1. Cloner le dépôt

git clone https://github.com/EpitechPGE3-2025/G-DEV-500-MAR-5-1-area-1.git
cd G-DEV-500-MAR-5-1-area-1

2. Installer les dépendances

Backend (Python)

cd server
pip install -r requirements.txt

Frontend/Mobile (Node.js)

cd mobile
npm install

3. Configuration Android (optionnel)

# Configurer les variables d'environnement
export ANDROID_HOME="$HOME/android-sdk"
export PATH="$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools"

# Installer les outils SDK nécessaires
sdkmanager "platform-tools" "platforms;android-33" "build-tools;33.0.0"
sdkmanager --licenses

⚙️ Configuration

Variables d'environnement

Créez un fichier .env à la racine du projet :

# Supabase Configuration
SUPABASE_URL=your_supabase_project_url
SUPABASE_KEY=your_supabase_anon_key
SUPABASE_SERVICE_KEY=your_supabase_service_key

# Flask Configuration
SECRET_KEY=your_flask_secret_key
FLASK_ENV=development

# Spotify API
SPOTIFY_CLIENT_ID=your_spotify_client_id
SPOTIFY_CLIENT_SECRET=your_spotify_client_secret
SPOTIFY_REDIRECT_URI=http://localhost:8080/spotify/callback

# Frontend URL
FRONTEND_URL=http://localhost:8081

# Email Configuration
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
EMAIL_ADDRESS=your_email@gmail.com
EMAIL_PASSWORD=your_app_password

WEATHER_CLIENT_SECRET=your_api_openweather

Configuration Supabase

  1. Créez un projet sur Supabase
  2. Exécutez le script SQL shema.sql pour créer les tables
  3. Configurez l'authentification OAuth pour GitHub
  4. Récupérez les clés API et URL du projet

🚀 Démarrage

Démarrage rapide avec Docker

# Démarrer tous les services
./run.sh

# Ou manuellement
docker-compose up --build

Démarrage manuel

1. Démarrer le backend

cd server
python app.py

2. Démarrer le frontend

cd mobile
npm run dev

Accès aux services

Build de l'application mobile

# Build complet (première fois)
./build-mobile.sh

# Build rapide (développement)
./rebuild-mobile.sh

# Installation sur device Android
./install-mobile-apk.sh

📖 API Documentation

Endpoints principaux

Informations système

GET /about.json

Retourne les informations sur le serveur et les services disponibles.

Authentification

POST /auth/signup          # Inscription
POST /auth/login           # Connexion
GET  /auth/github          # OAuth GitHub
POST /auth/logout          # Déconnexion
GET  /auth/me              # Informations utilisateur

Workflows

GET    /workflows/list               # Liste des workflows
POST   /workflows/create             # Créer un workflow
GET    /workflows/{id}               # Détails d'un workflow
PUT    /workflows/{id}               # Modifier un workflow
DELETE /workflows/{id}               # Supprimer un workflow
PUT    /workflows/{id}/toggle        # Activer/désactiver

Services

GET /database/services               # Liste des services
GET /spotify/me                      # Profil Spotify
GET /spotify/currently-playing       # Musique en cours
GET /weather/marseille               # Météo de marseille actuel
GET /weather/too-cold                # M'informe si j'ai besoin de me couvrir
GET /weather/marseille.              # M'informe de si je peux m'habiller léger

Format de réponse API

Tous les endpoints retournent du JSON avec la structure suivante :

{
  "success": true,
  "data": {},
  "message": "Opération réussie",
  "error": null
}

Authentification

L'API utilise des sessions Flask pour l'authentification. Les tokens OAuth sont gérés automatiquement.

Codes d'erreur

  • 200 : Succès
  • 201 : Ressource créée
  • 400 : Requête invalide
  • 401 : Non authentifié
  • 403 : Accès refusé
  • 404 : Ressource non trouvée
  • 500 : Erreur serveur

🛠️ Développement

Structure du backend

# app.py - Point d'entrée principal
from flask import Flask
from auth.routes import auth
from spotify.routes import spotify
from workflows.routes import workflows

app = Flask(__name__)
app.register_blueprint(auth)
app.register_blueprint(spotify)
app.register_blueprint(workflows)

Ajout d'un nouveau service

Voir le guide détaillé dans HOWTOCONTRIBUTE.md

Modèle de données

-- Utilisateurs gérés par Supabase Auth
-- Workflows utilisateur
CREATE TABLE Workflows (
    id BIGINT PRIMARY KEY,
    user_id UUID REFERENCES auth.users(id),
    name TEXT NOT NULL,
    description TEXT,
    is_active BOOLEAN DEFAULT true
);

-- Services disponibles
CREATE TABLE Services (
    id SERIAL PRIMARY KEY,
    name TEXT UNIQUE NOT NULL,
    description TEXT,
    actions_list TEXT[],
    reactions_list TEXT[]
);

Guidelines de développement

  • Code Style : Suivre PEP 8 pour Python, ESLint pour TypeScript
  • Tests : Écrire des tests unitaires pour chaque nouvelle fonctionnalité
  • Documentation : Documenter les nouvelles API et fonctionnalités
  • Commits : Utiliser des messages de commit descriptifs

🗄️ Base de données

Vue d'ensemble

AREA utilise PostgreSQL via Supabase avec une architecture en 3 tables principales :

  • auth.users : Gestion des utilisateurs (Supabase Auth)
  • Users_credentials : Stockage des tokens OAuth pour chaque service
  • Workflows : Workflows d'automatisation des utilisateurs
  • Services : Catalogue des services disponibles

Documentation détaillée

Pour une documentation complète de la base de données, incluant le diagramme UML, les relations entre tables, les exemples de requêtes et les politiques de sécurité, consultez :

📘 docs/Database.md

Cette documentation inclut :

  • 📊 Diagramme UML complet avec relations
  • 📋 Description détaillée de chaque table et colonne
  • 🔑 Contraintes, clés étrangères et index
  • 🔄 Flux de données et cas d'usage
  • 🔒 Row Level Security (RLS) et politiques de sécurité
  • 📊 Requêtes SQL utiles pour les statistiques
  • 🚀 Scripts de migration et évolutions futures

Schéma rapide

erDiagram
    auth_users ||--o{ Users_credentials : "possède"
    auth_users ||--o{ Workflows : "crée"
    Services ||--o{ Workflows : "utilisé dans"
    
    Users_credentials {
        uuid uuid PK
        jsonb spotify
        jsonb github
        jsonb discord
        jsonb telegram
        jsonb youtube
    }
    
    Workflows {
        bigint id PK
        uuid user_id FK
        text name
        jsonb actions
        jsonb reactions
        boolean is_active
    }
    
    Services {
        bigint id PK
        text name
        array actions_list
        array reactions_list
    }
Loading

🧪 Tests

Backend

cd server
python -m pytest tests/

Frontend

cd mobile
npm test

Tests d'intégration

# Démarrer les services
docker-compose up -d

# Exécuter les tests E2E
cd mobile
npm run e2e

🚢 Déploiement

Production avec Docker

# Build des images de production
docker-compose -f docker-compose.prod.yml build

# Démarrage en production
docker-compose -f docker-compose.prod.yml up -d

Variables d'environnement de production

FLASK_ENV=production
SECRET_KEY=your_secure_secret_key
SUPABASE_URL=your_production_supabase_url
# ... autres variables

Déploiement mobile

# Build de production Android
cd mobile
npx cap build android --prod

# Génération de l'APK signé
cd android
./gradlew assembleRelease

🤝 Contribution

Nous accueillons les contributions ! Consultez HOWTOCONTRIBUTE.md pour les guidelines détaillées.

Processus de contribution

  1. Fork le projet
  2. Créez une branche feature (git checkout -b feature/nouvelle-fonctionnalite)
  3. Commitez vos changements (git commit -m 'Ajout nouvelle fonctionnalité')
  4. Push sur la branche (git push origin feature/nouvelle-fonctionnalite)
  5. Ouvrez une Pull Request

📞 Support

Problèmes courants

Android

  • ADB unauthorized : Accepter la clé RSA sur l'appareil
  • Gradle build failed : Vérifier la version JDK (>= 17)
  • SDK licenses : Exécuter sdkmanager --licenses

Backend

  • Supabase connection failed : Vérifier les variables d'environnement
  • Spotify OAuth error : Vérifier l'URL de callback
  • CORS issues : Vérifier la configuration FRONTEND_URL

Logs et debugging

# Logs du backend
docker-compose logs server

# Logs du frontend
docker-compose logs client_mobile

# Logs Android
adb logcat | grep Area

Contact

📄 Licence

Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.


Développé avec ❤️ par l'équipe AREA

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors