60 lines
1.6 KiB
Python
60 lines
1.6 KiB
Python
from sqlalchemy.orm import Session
|
|
from fastapi import HTTPException
|
|
|
|
from app.repositories.prodi import ProdiRepository
|
|
from app.schemas.prodi import ProdiCreate, ProdiUpdate
|
|
|
|
|
|
class ProdiService:
|
|
|
|
@staticmethod
|
|
def get_all(db: Session):
|
|
return ProdiRepository.get_all(db)
|
|
|
|
@staticmethod
|
|
def get_by_id(db: Session, prodi_id: int):
|
|
prodi = ProdiRepository.get_by_id(db, prodi_id)
|
|
|
|
if not prodi:
|
|
raise HTTPException(
|
|
status_code=404,
|
|
detail="Data prodi tidak ditemukan"
|
|
)
|
|
|
|
return prodi
|
|
|
|
@staticmethod
|
|
def create(db: Session, prodi: ProdiCreate):
|
|
# Cek apakah kode prodi sudah digunakan
|
|
data = ProdiRepository.get_all(db)
|
|
|
|
for item in data:
|
|
if item.kode_prodi == prodi.kode_prodi:
|
|
raise HTTPException(
|
|
status_code=400,
|
|
detail="Kode prodi sudah digunakan"
|
|
)
|
|
|
|
return ProdiRepository.create(db, prodi)
|
|
|
|
@staticmethod
|
|
def update(db: Session, prodi_id: int, prodi: ProdiUpdate):
|
|
|
|
if not ProdiRepository.get_by_id(db, prodi_id):
|
|
raise HTTPException(
|
|
status_code=404,
|
|
detail="Data prodi tidak ditemukan"
|
|
)
|
|
|
|
return ProdiRepository.update(db, prodi_id, prodi)
|
|
|
|
@staticmethod
|
|
def delete(db: Session, prodi_id: int):
|
|
|
|
if not ProdiRepository.get_by_id(db, prodi_id):
|
|
raise HTTPException(
|
|
status_code=404,
|
|
detail="Data prodi tidak ditemukan"
|
|
)
|
|
|
|
return ProdiRepository.delete(db, prodi_id) |