TIF_E41253310/Backend/app/schemas/clustering.py

60 lines
1.5 KiB
Python

"""
Pydantic Schemas untuk Clustering
"""
from pydantic import BaseModel, Field
from typing import List, Optional
from datetime import datetime
class ClusteringRequest(BaseModel):
"""Request untuk clustering"""
n_clusters: int = Field(default=3, ge=2, le=10, description="Jumlah cluster")
auto_k: bool = Field(default=False, description="Auto-detect jumlah cluster optimal")
tahun: Optional[List[str]] = Field(default=None, description="Filter tahun (opsional)")
class AlumniInput(BaseModel):
"""Data alumni untuk clustering"""
nama: str
nim: Optional[str] = None
perusahaan: str
jabatan: str
class ClusterResult(BaseModel):
"""Hasil clustering untuk satu alumni"""
nama: str
nim: Optional[str] = None
perusahaan: str
jabatan: str
cluster: int
cluster_label: str
class ClusteringResponse(BaseModel):
"""Response dari clustering"""
status: str
message: Optional[str] = None
total_records: int
n_clusters: int
distribution: dict
summary: Optional[dict] = None
top_features: Optional[dict] = None
data: List[ClusterResult]
class StandardizeRequest(BaseModel):
"""Request untuk standarisasi data"""
files: List[str] = Field(description="List filename yang diupload")
tahun: List[str] = Field(description="List tahun untuk setiap file")
class StandardizeResponse(BaseModel):
"""Response dari standarisasi"""
status: str
message: Optional[str] = None
total_records: int
years_processed: List[str]
data: Optional[List[AlumniInput]] = None