feat: dashbaord services api
feat: clinic setup api
This commit is contained in:
@@ -46,4 +46,25 @@ class ClinicDoctorsServices:
|
||||
def delete_clinic_doctor(self, clinic_doctor_id: int):
|
||||
clinic_doctor = self.db.query(ClinicDoctors).filter(ClinicDoctors.id == clinic_doctor_id).first()
|
||||
self.db.delete(clinic_doctor)
|
||||
self.db.commit()
|
||||
self.db.commit()
|
||||
|
||||
def get_doctor_status_count(self):
|
||||
# Use SQLAlchemy's func.count to get the count for each status
|
||||
from sqlalchemy import func
|
||||
from enums.enums import ClinicDoctorStatus
|
||||
|
||||
# Query to count doctors by status
|
||||
status_counts = self.db.query(
|
||||
ClinicDoctors.status,
|
||||
func.count(ClinicDoctors.id).label('count')
|
||||
).group_by(ClinicDoctors.status).all()
|
||||
|
||||
# Initialize result dictionary with all possible statuses set to 0
|
||||
result = {status.value: 0 for status in ClinicDoctorStatus}
|
||||
|
||||
# Update with actual counts from the query
|
||||
for status, count in status_counts:
|
||||
result[status.value] = count
|
||||
|
||||
return result
|
||||
|
||||
@@ -5,6 +5,7 @@ from schemas.UpdateSchemas import ClinicUpdate
|
||||
from schemas.ResponseSchemas import Clinic
|
||||
from typing import List
|
||||
from exceptions import ResourceNotFoundException
|
||||
from enums.enums import ClinicStatus
|
||||
|
||||
class ClinicServices:
|
||||
def __init__(self):
|
||||
@@ -48,5 +49,45 @@ class ClinicServices:
|
||||
if clinic is None:
|
||||
raise ResourceNotFoundException("Clinic not found")
|
||||
|
||||
self.db.delete(clinic)
|
||||
self.db.commit()
|
||||
clinic.soft_delete(self.db)
|
||||
|
||||
def get_clinic_count(self):
|
||||
from sqlalchemy import func
|
||||
|
||||
# Get total count
|
||||
totalClinics = self.db.query(Clinics).count()
|
||||
|
||||
# Get counts for specific statuses in a single query
|
||||
status_counts = self.db.query(
|
||||
Clinics.status,
|
||||
func.count(Clinics.id).label('count')
|
||||
).filter(
|
||||
Clinics.status.in_([
|
||||
ClinicStatus.ACTIVE,
|
||||
ClinicStatus.UNDER_REVIEW,
|
||||
ClinicStatus.REJECTED
|
||||
])
|
||||
).group_by(Clinics.status).all()
|
||||
|
||||
# Initialize counts with 0
|
||||
counts = {
|
||||
"totalClinics": totalClinics,
|
||||
"totalActiveClinics": 0,
|
||||
"totalUnderReviewClinics": 0,
|
||||
"totalRejectedClinics": 0
|
||||
}
|
||||
|
||||
# Map status values to their respective count keys
|
||||
status_to_key = {
|
||||
ClinicStatus.ACTIVE: "totalActiveClinics",
|
||||
ClinicStatus.UNDER_REVIEW: "totalUnderReviewClinics",
|
||||
ClinicStatus.REJECTED: "totalRejectedClinics"
|
||||
}
|
||||
|
||||
# Update counts with actual values from the query
|
||||
for status, count in status_counts:
|
||||
key = status_to_key.get(status)
|
||||
if key:
|
||||
counts[key] = count
|
||||
|
||||
return counts
|
||||
@@ -0,0 +1,17 @@
|
||||
from database import get_db
|
||||
from services.clinicDoctorsServices import ClinicDoctorsServices
|
||||
from services.clinicServices import ClinicServices
|
||||
|
||||
class DashboardService:
|
||||
def __init__(self):
|
||||
self.db = next(get_db())
|
||||
self.clinicDoctorsServices = ClinicDoctorsServices()
|
||||
self.clinicServices = ClinicServices()
|
||||
|
||||
def get_dashboard_counts(self, isSuperAdmin:bool):
|
||||
if isSuperAdmin:
|
||||
clinicCounts = self.clinicServices.get_clinic_count()
|
||||
return clinicCounts
|
||||
else:
|
||||
clinicDoctorsCount = self.clinicDoctorsServices.get_doctor_status_count()
|
||||
return clinicDoctorsCount
|
||||
Reference in New Issue
Block a user