mirror of
https://github.com/R0m1k3/noteflow.git
synced 2026-10-11 17:29:37 +02:00
Ajouts majeurs: - Système de tags complet pour les notes * Table note_tags en base de données avec indexes * API REST pour CRUD des tags (GET/POST/DELETE) * UI avec onglet Tags dans l'éditeur de notes * Badges cliquables avec icônes et suppression au survol * Modal pour ajouter des tags - Liste automatique des modèles OpenRouter * Nouvelle route API /api/openrouter/models * Cache des modèles avec rafraîchissement automatique (1h) * Dropdown dans l'admin avec tous les modèles disponibles * Bouton "Actualiser" pour forcer le refresh * Affichage du nom et description de chaque modèle * Fallback sur input manuel si pas de clé API Améliorations UI: - Ajout de dates de création et modification dans les notes - Affichage des dates dans les cartes et l'éditeur - Format français pour toutes les dates - Onglets passés de 4 à 5 colonnes pour inclure Tags - Animation de chargement sur le bouton refresh des modèles Architecture: - Nouveau service TagsService.ts pour la gestion des tags - Nouveau service OpenRouterService.ts pour l'API OpenRouter - Nouvelles routes openrouter.routes.js - Support Select component pour les dropdowns - Modals InputModal utilisés pour les tags
60 lines
1.5 KiB
TypeScript
60 lines
1.5 KiB
TypeScript
import AuthService from './AuthService';
|
|
|
|
export interface OpenRouterModel {
|
|
id: string;
|
|
name: string;
|
|
description: string;
|
|
context_length: number;
|
|
pricing: {
|
|
prompt?: string;
|
|
completion?: string;
|
|
};
|
|
}
|
|
|
|
class OpenRouterService {
|
|
/**
|
|
* Get available models from OpenRouter API
|
|
*/
|
|
async getModels(): Promise<OpenRouterModel[]> {
|
|
try {
|
|
const response = await fetch('/api/openrouter/models', {
|
|
headers: AuthService.getHeaders()
|
|
});
|
|
|
|
if (!response.ok) {
|
|
throw new Error('Erreur lors de la récupération des modèles');
|
|
}
|
|
|
|
const models = await response.json();
|
|
return Array.isArray(models) ? models : [];
|
|
} catch (error) {
|
|
console.error('Erreur lors de la récupération des modèles OpenRouter:', error);
|
|
return [];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Refresh models cache
|
|
*/
|
|
async refreshModels(): Promise<OpenRouterModel[]> {
|
|
try {
|
|
const response = await fetch('/api/openrouter/refresh-models', {
|
|
method: 'POST',
|
|
headers: AuthService.getHeaders()
|
|
});
|
|
|
|
if (!response.ok) {
|
|
throw new Error('Erreur lors du rafraîchissement des modèles');
|
|
}
|
|
|
|
const data = await response.json();
|
|
return Array.isArray(data.models) ? data.models : [];
|
|
} catch (error) {
|
|
console.error('Erreur lors du rafraîchissement des modèles:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
}
|
|
|
|
export default new OpenRouterService();
|