1️⃣ Architecture de l’application 🔹 Technologies utilisées Composant Technologie Rôle Frontend Web SvelteKit Interface utilisateur, interaction avec le backend Standalone App Tauri (Rust) Exécute SvelteKit comme une application de bureau légère Backend FastAPI (Python) API qui gère les données, authentification, stockage Base de données PostgreSQL Stockage des utilisateurs, presets, discussions, fichiers référencés Stockage fichiers Nextcloud ou ZFS Hébergement des fichiers musicaux, presets, samples
talas-app/
│── backend/ # FastAPI - Backend (API REST, PostgreSQL)
│ │── main.py # Point d'entrée de l'API
│ │── database.py # Connexion à PostgreSQL
│ │── models.py # Modèles SQLAlchemy
│ │── crud.py # Opérations CRUD
│ │── schemas.py # Schémas Pydantic
│ │── config.py # Configuration des variables d'environnement
│ │── middleware.py # Middleware pour gestion de la sécurité (CORS, Authentification)
│── frontend/ # SvelteKit - Frontend (Web UI)
│ │── src/routes/ # Pages Svelte
│ │── src/lib/ # Gestion des appels API et des stores
│── standalone/ # Tauri - Standalone App (Windows/macOS/Linux)
cd backend
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install fastapi uvicorn asyncpg sqlalchemy alembic pydantic python-dotenv passlib[bcrypt] pyjwt
📂 Fichier : backend/config.py (Configuration des variables d’environnement)
import os
from dotenv import load_dotenv
load_dotenv()
DATABASE_URL = os.getenv("DATABASE_URL", "postgresql+asyncpg://talas:talaspass@localhost/talas")
SECRET_KEY = os.getenv("SECRET_KEY", "mysecret")
ALGORITHM = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES = 30
📂 Fichier : backend/middleware.py (CORS et Sécurité)
from fastapi.middleware.cors import CORSMiddleware
def setup_middleware(app):
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
📂 Fichier : backend/main.py
from fastapi import FastAPI, Depends
from sqlalchemy.orm import Session
from database import SessionLocal, engine
import models, crud, schemas
from middleware import setup_middleware
models.Base.metadata.create_all(bind=engine)
app = FastAPI()
setup_middleware(app)
@app.get("/")
def read_root():
return {"message": "Bienvenue sur Talas API"}
@app.post("/users/", response_model=schemas.User)
def create_user(user: schemas.UserCreate, db: Session = Depends(crud.get_db)):
return crud.create_user(db=db, user=user)
✅ Lancer FastAPI :
uvicorn main:app --reload
🌐 Accéder à l’API : http://127.0.0.1:8000
cd ../frontend
npm create svelte@latest .
npm install
npm install @sveltejs/adapter-static axios
npm run dev
📂 Fichier : frontend/src/lib/api.js (Gestion des appels API)
import axios from "axios";
const api = axios.create({
baseURL: "http://127.0.0.1:8000",
headers: {
"Content-Type": "application/json"
}
});
export default api;
📂 Fichier : frontend/src/routes/community/+page.svelte
<script>
import { onMount } from "svelte";
import api from "$lib/api";
let message = "Chargement...";
onMount(async () => {
try {
const response = await api.get("/");
message = response.data.message;
} catch (error) {
message = "Erreur de connexion";
}
});
</script>
<h1>Talas Community</h1>
<p>{message}</p>
✅ Lancer SvelteKit :
npm run dev
🌐 Accéder au site : http://localhost:5173
cd ../standalone
npm install -D @tauri-apps/cli
cargo install tauri-cli
npm run tauri init
📂 Fichier : standalone/src-tauri/tauri.conf.json
{
"package": {
"productName": "TalasApp",
"version": "1.0.0"
},
"tauri": {
"allowlist": {
"fs": { "all": true },
"dialog": { "all": true }
},
"security": { "csp": "default-src 'self'" }
}
}
✅ Lancer Tauri :
npm run tauri dev
🚀 Talas App tourne en standalone avec une API sécurisée et un frontend optimisé ! 🎉