api

package
v0.0.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 4, 2025 License: AGPL-3.0 Imports: 21 Imported by: 0

Documentation

Overview

internal/api/archive_handlers.go - Nouvelle fonctionnalité d'archive

internal/api/router.go - Enhanced version with worker routes

internal/api/swagger.go

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GetValidator

func GetValidator(c *gin.Context) *validation.APIValidator

GetValidator helper pour récupérer le validator du contexte

func RateLimitMiddleware

func RateLimitMiddleware(requestsPerMinute int) gin.HandlerFunc

RateLimitMiddleware - Rate limiting basique par IP

func SecurityHeadersMiddleware

func SecurityHeadersMiddleware() gin.HandlerFunc

SecurityHeadersMiddleware ajoute des headers de sécurité

func SetupRouter

func SetupRouter(jobService jobs.JobService, storageService *storage.StorageService, workerPool *worker.WorkerPool) *gin.Engine

SetupRouter configure le routeur standard (rétrocompatibilité)

func SetupSwagger

func SetupSwagger(router *gin.Engine)

SetupSwagger configure les routes Swagger

func StandardErrorResponse

func StandardErrorResponse() gin.HandlerFunc

StandardErrorResponse middleware pour standardiser les réponses d'erreur

func ValidateArchiveParams

func ValidateArchiveParams(c *gin.Context, v *validation.APIValidator) *validation.ValidationResult

Validation pour les paramètres d'archive

func ValidationErrorLogger

func ValidationErrorLogger() gin.HandlerFunc

ValidationErrorLogger middleware pour logger les erreurs de validation

func ValidationMiddleware

func ValidationMiddleware(validator *validation.APIValidator) gin.HandlerFunc

ValidationMiddleware injecte l'APIValidator dans le contexte

Types

type ArchiveHandlers

type ArchiveHandlers struct {
	// contains filtered or unexported fields
}

ArchiveHandlers gère les endpoints d'archive

func NewArchiveHandlers

func NewArchiveHandlers(storageService *storage.StorageService) *ArchiveHandlers

NewArchiveHandlers crée un nouveau gestionnaire d'archives

func (*ArchiveHandlers) DownloadResultsArchive

func (h *ArchiveHandlers) DownloadResultsArchive(c *gin.Context)

DownloadResultsArchive crée et télécharge une archive des résultats d'un cours @Summary Download course results as archive @Description Creates and downloads a ZIP archive containing all result files for a course @Tags Archive @Accept json @Produce application/zip @Param course_id path string true "Course ID" @Param format query string false "Archive format (zip, tar)" default(zip) @Param compress query bool false "Enable compression" default(true) @Success 200 {file} archive "Archive file" @Failure 400 {object} map[string]interface{} "Validation error" @Failure 404 {object} map[string]interface{} "Course not found" @Failure 500 {object} map[string]interface{} "Internal error" @Router /api/v1/storage/courses/{course_id}/archive [get]

type Handlers

type Handlers struct {
	// contains filtered or unexported fields
}

func NewHandlers

func NewHandlers(jobService jobs.JobService) *Handlers

func (*Handlers) CreateJob

func (h *Handlers) CreateJob(c *gin.Context)

CreateJob crée un nouveau job de génération @Summary Créer un job de génération @Description Créer un nouveau job de génération de cours Slidev @Description @Description Le job sera traité de manière asynchrone par le pool de workers. @Description Utilisez l'endpoint GET /jobs/{id} pour suivre le progress. @Tags Jobs @Accept json @Produce json @Param request body models.GenerationRequest true "Détails du job à créer" @Success 201 {object} models.JobResponse "Job créé avec succès" @Failure 400 {object} models.ErrorResponse "Erreur de validation" @Failure 409 {object} models.ErrorResponse "Job avec cet ID existe déjà" @Failure 500 {object} models.ErrorResponse "Erreur interne du serveur" @Router /generate [post]

func (*Handlers) GetJobStatus

func (h *Handlers) GetJobStatus(c *gin.Context)

GetJobStatus récupère le statut d'un job @Summary Récupérer le statut d'un job @Description Récupère les détails et le statut actuel d'un job de génération @Description @Description Les statuts possibles sont: @Description - `pending`: Job en attente de traitement @Description - `processing`: Job en cours de traitement @Description - `completed`: Job terminé avec succès @Description - `failed`: Job échoué (voir le champ error) @Description - `timeout`: Job interrompu par timeout @Tags Jobs @Accept json @Produce json @Param id path string true "ID du job (UUID)" Format(uuid) @Success 200 {object} models.JobResponse "Détails du job" @Failure 400 {object} models.ErrorResponse "ID du job invalide" @Failure 404 {object} models.ErrorResponse "Job non trouvé" @Failure 500 {object} models.ErrorResponse "Erreur interne du serveur" @Router /jobs/{id} [get]

func (*Handlers) Health

func (h *Handlers) Health(c *gin.Context)

Health effectue un health check du service @Summary Health check du service @Description Vérifie l'état de santé du service OCF Worker @Description @Description Retourne l'état du service, de la base de données et des composants critiques. @Tags Health @Accept json @Produce json @Success 200 {object} models.HealthResponse "Service en bonne santé" @Success 503 {object} models.ErrorResponse "Service dégradé ou en panne" @Router /health [get]

func (*Handlers) ListJobs

func (h *Handlers) ListJobs(c *gin.Context)

ListJobs liste les jobs avec filtrage optionnel @Summary Lister les jobs @Description Liste les jobs de génération avec options de filtrage et pagination @Description @Description Permet de filtrer par statut et par course_id pour retrouver facilement @Description les jobs en cours ou terminés. @Tags Jobs @Accept json @Produce json @Param status query string false "Filtrer par statut" Enums(pending,processing,completed,failed,timeout) @Param course_id query string false "Filtrer par ID de cours" Format(uuid) @Param limit query integer false "Nombre maximum de résultats" default(100) minimum(1) maximum(1000) @Param offset query integer false "Décalage pour la pagination" default(0) minimum(0) @Success 200 {object} models.JobListResponse "Liste des jobs" @Failure 400 {object} models.ErrorResponse "Paramètres de requête invalides" @Failure 500 {object} models.ErrorResponse "Erreur interne du serveur" @Router /jobs [get]

type StorageHandlers

type StorageHandlers struct {
	// contains filtered or unexported fields
}

func NewStorageHandlers

func NewStorageHandlers(storageService *storage.StorageService) *StorageHandlers

func (*StorageHandlers) DownloadJobSource

func (h *StorageHandlers) DownloadJobSource(c *gin.Context)

DownloadJobSource télécharge un fichier source spécifique @Summary Télécharger un fichier source @Description Télécharge un fichier source spécifique d'un job par son nom @Tags Storage @Accept json @Produce application/octet-stream @Produce text/markdown @Produce text/css @Produce application/javascript @Param job_id path string true "ID du job" Format(uuid) @Param filename path string true "Nom du fichier à télécharger" @Param filepath query string false "Chemin spécifique du fichier (optionnel)" @Success 200 {file} file "Contenu du fichier" @Header 200 {string} Content-Type "Type MIME du fichier" @Header 200 {string} Content-Disposition "attachment; filename=..." @Failure 400 {object} models.ErrorResponse "Paramètres invalides" @Failure 404 {object} models.ErrorResponse "Fichier non trouvé" @Failure 500 {object} models.ErrorResponse "Erreur de stockage" @Router /storage/jobs/{job_id}/sources/{filename} [get]

func (*StorageHandlers) DownloadResult

func (h *StorageHandlers) DownloadResult(c *gin.Context)

DownloadResult télécharge un fichier de résultat @Summary Télécharger un résultat généré @Description Télécharge un fichier spécifique des résultats générés d'un cours @Tags Storage @Accept json @Produce application/octet-stream @Produce text/html @Produce text/css @Produce application/javascript @Param course_id path string true "ID du cours" Format(uuid) @Param filename path string true "Nom du fichier à télécharger" @Success 200 {file} file "Contenu du fichier généré" @Header 200 {string} Content-Type "Type MIME du fichier" @Failure 400 {object} models.ErrorResponse "Paramètres invalides" @Failure 404 {object} models.ErrorResponse "Fichier non trouvé" @Failure 500 {object} models.ErrorResponse "Erreur de stockage" @Router /storage/courses/{course_id}/results/{filename} [get]

func (*StorageHandlers) GetJobLogs

func (h *StorageHandlers) GetJobLogs(c *gin.Context)

GetJobLogs récupère les logs d'exécution d'un job @Summary Récupérer les logs d'un job @Description Récupère les logs détaillés d'exécution d'un job (build Slidev, erreurs, etc.) @Tags Storage @Accept json @Produce text/plain @Param job_id path string true "ID du job" Format(uuid) @Success 200 {string} string "Logs du job (format texte)" @Header 200 {string} Content-Type "text/plain" @Failure 400 {object} models.ErrorResponse "ID du job invalide" @Failure 404 {object} models.ErrorResponse "Logs non trouvés" @Failure 500 {object} models.ErrorResponse "Erreur de stockage" @Router /storage/jobs/{job_id}/logs [get]

func (*StorageHandlers) GetStorageInfo

func (h *StorageHandlers) GetStorageInfo(c *gin.Context)

GetStorageInfo retourne des informations sur le système de stockage @Summary Informations sur le stockage @Description Retourne les informations de configuration et l'état du système de stockage @Tags Storage @Accept json @Produce json @Success 200 {object} models.StorageInfo "Informations sur le stockage" @Failure 500 {object} models.ErrorResponse "Erreur interne du serveur" @Router /storage/info [get]

func (*StorageHandlers) ListJobSources

func (h *StorageHandlers) ListJobSources(c *gin.Context)

ListJobSources liste les fichiers sources d'un job @Summary Lister les fichiers sources @Description Liste tous les fichiers sources uploadés pour un job donné @Tags Storage @Accept json @Produce json @Param job_id path string true "ID du job" Format(uuid) @Success 200 {object} models.FileListResponse "Liste des fichiers sources" @Failure 400 {object} models.ErrorResponse "ID du job invalide" @Failure 404 {object} models.ErrorResponse "Job non trouvé ou aucun fichier" @Failure 500 {object} models.ErrorResponse "Erreur de stockage" @Router /storage/jobs/{job_id}/sources [get]

func (*StorageHandlers) ListResults

func (h *StorageHandlers) ListResults(c *gin.Context)

ListResults liste les fichiers de résultat d'un cours @Summary Lister les résultats générés @Description Liste tous les fichiers générés (HTML, CSS, JS, assets) pour un cours @Description @Description Les résultats incluent généralement: @Description - `index.html` - Page principale de la présentation @Description - `assets/` - Ressources (CSS, JS, images) @Description - Autres fichiers générés par Slidev @Tags Storage @Accept json @Produce json @Param course_id path string true "ID du cours" Format(uuid) @Success 200 {object} models.FileListResponse "Liste des fichiers de résultat" @Failure 400 {object} models.ErrorResponse "ID du cours invalide" @Failure 404 {object} models.ErrorResponse "Cours non trouvé ou aucun résultat" @Failure 500 {object} models.ErrorResponse "Erreur de stockage" @Router /storage/courses/{course_id}/results [get]

func (*StorageHandlers) UploadJobSources

func (h *StorageHandlers) UploadJobSources(c *gin.Context)

UploadJobSources upload des fichiers sources pour un job @Summary Upload des fichiers sources @Description Upload des fichiers sources (slides.md, CSS, images, etc.) pour un job de génération @Description @Description Types de fichiers supportés: @Description - `.md` - Fichiers Markdown (slides) @Description - `.css` - Feuilles de style @Description - `.js` - Scripts JavaScript @Description - `.vue` - Fichiers Vue.js @Description - `.json` - Fichiers de configuration @Description - `.png`, `.jpg`, `.gif`, `.svg` - Images @Description - `.woff`, `.woff2`, `.ttf` - Polices @Tags Storage @Accept multipart/form-data @Produce json @Param job_id path string true "ID du job" Format(uuid) @Param files formData file true "Fichiers à uploader (multiple autorisé)" @Success 201 {object} models.FileUploadResponse "Fichiers uploadés avec succès" @Failure 400 {object} models.ErrorResponse "Erreur de validation (taille, type, etc.)" @Failure 413 {object} models.ErrorResponse "Fichier trop volumineux" @Failure 500 {object} models.ErrorResponse "Erreur de stockage" @Router /storage/jobs/{job_id}/sources [post]

type SwaggerInfo

type SwaggerInfo struct {
	Title       string `json:"title"`
	Description string `json:"description"`
	Version     string `json:"version"`
	Host        string `json:"host"`
	BasePath    string `json:"basePath"`
}

SwaggerInfo contient les métadonnées pour Swagger

func GetSwaggerInfo

func GetSwaggerInfo() SwaggerInfo

GetSwaggerInfo retourne les informations Swagger

type WorkerHandlers

type WorkerHandlers struct {
	// contains filtered or unexported fields
}

WorkerHandlers gère les endpoints liés au worker

func NewWorkerHandlers

func NewWorkerHandlers(workerPool *worker.WorkerPool) *WorkerHandlers

NewWorkerHandlers crée un nouveau gestionnaire pour les workers

func (*WorkerHandlers) CleanupOldWorkspaces

func (h *WorkerHandlers) CleanupOldWorkspaces(c *gin.Context)

CleanupOldWorkspaces supprime les workspaces anciens @Summary Nettoyage automatique des anciens workspaces @Description Supprime tous les workspaces plus anciens que l'âge spécifié @Description @Description Opération de maintenance pour libérer l'espace disque. @Description Par défaut, supprime les workspaces de plus de 24 heures. @Tags Worker @Accept json @Produce json @Param max_age_hours query integer false "Âge maximum en heures" default(24) minimum(1) maximum(8760) @Success 200 {object} models.WorkspaceCleanupBatchResponse "Nettoyage terminé" @Failure 400 {object} models.ErrorResponse "Paramètres invalides" @Failure 500 {object} models.ErrorResponse "Erreur de nettoyage" @Router /worker/workspaces/cleanup [post]

func (*WorkerHandlers) CleanupWorkspace

func (h *WorkerHandlers) CleanupWorkspace(c *gin.Context)

CleanupWorkspace supprime un workspace spécifique @Summary Supprimer un workspace @Description Supprime complètement un workspace et tous ses fichiers @Description @Description ⚠️ **Opération destructive** : tous les fichiers du workspace seront perdus. @Description Utilisez cette opération uniquement pour les jobs terminés ou échoués. @Tags Worker @Accept json @Produce json @Param job_id path string true "ID du job associé au workspace" Format(uuid) @Success 200 {object} models.WorkspaceCleanupResponse "Workspace supprimé avec succès" @Failure 400 {object} models.ErrorResponse "ID du job invalide" @Failure 404 {object} models.ErrorResponse "Workspace non trouvé" @Failure 500 {object} models.ErrorResponse "Erreur de suppression" @Router /worker/workspaces/{job_id} [delete]

func (*WorkerHandlers) GetWorkerHealth

func (h *WorkerHandlers) GetWorkerHealth(c *gin.Context)

GetWorkerHealth vérifie l'état de santé du système de workers @Summary Santé du système de workers @Description Effectue un health check complet du système de workers @Description @Description Vérifie que le pool de workers fonctionne correctement, @Description que les workers ne sont pas bloqués, et que la queue n'est pas saturée. @Tags Worker @Accept json @Produce json @Success 200 {object} models.WorkerHealthResponse "Système de workers en bonne santé" @Success 503 {object} models.WorkerHealthResponse "Système de workers dégradé ou en panne" @Failure 500 {object} models.ErrorResponse "Erreur interne du serveur" @Router /worker/health [get]

func (*WorkerHandlers) GetWorkerStats

func (h *WorkerHandlers) GetWorkerStats(c *gin.Context)

GetWorkerStats retourne les statistiques détaillées du pool de workers @Summary Statistiques du pool de workers @Description Retourne des informations détaillées sur l'état du pool de workers @Description @Description Inclut le nombre de workers actifs, la taille de la queue des jobs, @Description les statistiques individuelles de chaque worker, et les métriques de performance. @Tags Worker @Accept json @Produce json @Success 200 {object} models.WorkerStatsResponse "Statistiques du pool de workers" @Failure 500 {object} models.ErrorResponse "Erreur interne du serveur" @Router /worker/stats [get]

func (*WorkerHandlers) GetWorkspaceInfo

func (h *WorkerHandlers) GetWorkspaceInfo(c *gin.Context)

GetWorkspaceInfo retourne les informations détaillées d'un workspace @Summary Informations détaillées d'un workspace @Description Retourne les informations complètes d'un workspace spécifique @Description @Description Inclut la taille utilisée, le nombre de fichiers, l'état du répertoire dist, @Description et autres métadonnées utiles pour le debug et le monitoring. @Tags Worker @Accept json @Produce json @Param job_id path string true "ID du job associé au workspace" Format(uuid) @Success 200 {object} models.WorkspaceInfoResponse "Informations du workspace" @Failure 400 {object} models.ErrorResponse "ID du job invalide" @Failure 404 {object} models.ErrorResponse "Workspace non trouvé" @Failure 500 {object} models.ErrorResponse "Erreur interne du serveur" @Router /worker/workspaces/{job_id} [get]

func (*WorkerHandlers) ListWorkspaces

func (h *WorkerHandlers) ListWorkspaces(c *gin.Context)

ListWorkspaces liste tous les workspaces actifs @Summary Lister les workspaces actifs @Description Liste tous les workspaces de jobs en cours ou récents @Description @Description Permet de surveiller l'utilisation des ressources et identifier @Description les workspaces qui peuvent nécessiter un nettoyage. @Tags Worker @Accept json @Produce json @Param status query string false "Filtrer par statut" Enums(active,idle,completed) @Param limit query integer false "Nombre maximum de résultats" default(50) minimum(1) maximum(500) @Param offset query integer false "Décalage pour la pagination" default(0) minimum(0) @Success 200 {object} models.WorkspaceListResponse "Liste des workspaces" @Failure 400 {object} models.ErrorResponse "Paramètres de requête invalides" @Failure 500 {object} models.ErrorResponse "Erreur interne du serveur" @Router /worker/workspaces [get]

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL