168 lines
3.9 KiB
Python
168 lines
3.9 KiB
Python
"""
|
|
Schemas untuk Tabel Baru - PRD Section 24
|
|
"""
|
|
|
|
from pydantic import BaseModel
|
|
from typing import Optional, List
|
|
from datetime import datetime
|
|
|
|
|
|
# ============== PEKERJAAN ==============
|
|
|
|
class PekerjaanBase(BaseModel):
|
|
alumni_id: int
|
|
status_pekerjaan: Optional[str] = None
|
|
jenis_perusahaan: Optional[str] = None
|
|
nama_perusahaan: Optional[str] = None
|
|
jabatan: Optional[str] = None
|
|
tingkatan_tempat_kerja: Optional[str] = None
|
|
provinsi: Optional[str] = None
|
|
kabupaten_kota: Optional[str] = None
|
|
teks_pekerjaan: Optional[str] = None
|
|
|
|
|
|
class PekerjaanCreate(PekerjaanBase):
|
|
pass
|
|
|
|
|
|
class PekerjaanUpdate(BaseModel):
|
|
status_pekerjaan: Optional[str] = None
|
|
jenis_perusahaan: Optional[str] = None
|
|
nama_perusahaan: Optional[str] = None
|
|
jabatan: Optional[str] = None
|
|
tingkatan_tempat_kerja: Optional[str] = None
|
|
provinsi: Optional[str] = None
|
|
kabupaten_kota: Optional[str] = None
|
|
teks_pekerjaan: Optional[str] = None
|
|
|
|
|
|
class PekerjaanResponse(PekerjaanBase):
|
|
id: int
|
|
created_at: Optional[datetime] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
# ============== KOMPETENSI ==============
|
|
|
|
class KompetensiBase(BaseModel):
|
|
alumni_id: int
|
|
etika_lulus: Optional[int] = None
|
|
keahlian_lulus: Optional[int] = None
|
|
bahasa_inggris_lulus: Optional[int] = None
|
|
teknologi_informasi_lulus: Optional[int] = None
|
|
komunikasi_lulus: Optional[int] = None
|
|
kerja_sama_lulus: Optional[int] = None
|
|
pengembangan_diri_lulus: Optional[int] = None
|
|
|
|
|
|
class KompetensiCreate(KompetensiBase):
|
|
pass
|
|
|
|
|
|
class KompetensiUpdate(BaseModel):
|
|
etika_lulus: Optional[int] = None
|
|
keahlian_lulus: Optional[int] = None
|
|
bahasa_inggris_lulus: Optional[int] = None
|
|
teknologi_informasi_lulus: Optional[int] = None
|
|
komunikasi_lulus: Optional[int] = None
|
|
kerja_sama_lulus: Optional[int] = None
|
|
pengembangan_diri_lulus: Optional[int] = None
|
|
|
|
|
|
class KompetensiResponse(KompetensiBase):
|
|
id: int
|
|
created_at: Optional[datetime] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
# ============== CLUSTERING RESULT ==============
|
|
|
|
class ClusteringResultBase(BaseModel):
|
|
alumni_id: int
|
|
model_version: Optional[str] = None
|
|
k: int
|
|
cluster: int
|
|
kategori: str # C0, C1, C2, C3
|
|
profile_match: bool = False
|
|
matched_keyword: Optional[str] = None
|
|
|
|
|
|
class ClusteringResultCreate(ClusteringResultBase):
|
|
pass
|
|
|
|
|
|
class ClusteringResultResponse(ClusteringResultBase):
|
|
id: int
|
|
created_at: Optional[datetime] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
# ============== MODEL EVALUATION ==============
|
|
|
|
class ModelEvaluationBase(BaseModel):
|
|
model_version: str
|
|
k: int
|
|
inertia: float
|
|
silhouette_score: float
|
|
|
|
|
|
class ModelEvaluationCreate(ModelEvaluationBase):
|
|
pass
|
|
|
|
|
|
class ModelEvaluationResponse(ModelEvaluationBase):
|
|
id: int
|
|
created_at: Optional[datetime] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
# ============== KEYWORD DICTIONARY ==============
|
|
|
|
class KeywordDictionaryBase(BaseModel):
|
|
kode_prodi: str # TIF, MIF, TKK
|
|
keyword: str
|
|
kategori_keyword: Optional[str] = None
|
|
aktif: bool = True
|
|
|
|
|
|
class KeywordDictionaryCreate(KeywordDictionaryBase):
|
|
pass
|
|
|
|
|
|
class KeywordDictionaryUpdate(BaseModel):
|
|
keyword: Optional[str] = None
|
|
kategori_keyword: Optional[str] = None
|
|
aktif: Optional[bool] = None
|
|
|
|
|
|
class KeywordDictionaryResponse(KeywordDictionaryBase):
|
|
id: int
|
|
created_at: Optional[datetime] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
# ============== BULK IMPORT ==============
|
|
|
|
class BulkAlumniCreate(BaseModel):
|
|
"""Untuk import bulk alumni dari file Excel"""
|
|
alumni_list: List[dict]
|
|
|
|
|
|
class BulkClusteringResult(BaseModel):
|
|
"""Untuk save hasil clustering"""
|
|
model_version: str
|
|
k: int
|
|
inertia: float
|
|
silhouette_score: float
|
|
results: List[dict] # List of {alumni_id, cluster, kategori, profile_match, matched_keyword}
|