Automated Action 27c9268a6a Implement HR platform backend with FastAPI and SQLite
- Set up project structure with FastAPI framework
- Create database models for users, employees, departments, and job titles
- Implement JWT authentication and authorization system
- Set up SQLite database with SQLAlchemy ORM
- Add Alembic migrations for database versioning
- Create CRUD API endpoints for employee management
- Implement category-based search functionality
- Add OpenAPI documentation and health check endpoint
- Update README with comprehensive setup and usage instructions
2025-06-03 01:18:41 +00:00

64 lines
2.8 KiB
Python

from typing import List, Optional
from sqlalchemy.orm import Session
from sqlalchemy import or_
from app.crud.base import CRUDBase
from app.models.employee import Employee
from app.schemas.employee import EmployeeCreate, EmployeeUpdate, EmployeeSearchParams
class CRUDEmployee(CRUDBase[Employee, EmployeeCreate, EmployeeUpdate]):
def get_by_email(self, db: Session, *, email: str) -> Optional[Employee]:
return db.query(Employee).filter(Employee.email == email).first()
def get_all(self, db: Session, *, skip: int = 0, limit: int = 100) -> List[Employee]:
return db.query(Employee).offset(skip).limit(limit).all()
def get_by_department(self, db: Session, *, department_id: str, skip: int = 0, limit: int = 100) -> List[Employee]:
return db.query(Employee).filter(Employee.department_id == department_id).offset(skip).limit(limit).all()
def get_by_job_title(self, db: Session, *, job_title_id: str, skip: int = 0, limit: int = 100) -> List[Employee]:
return db.query(Employee).filter(Employee.job_title_id == job_title_id).offset(skip).limit(limit).all()
def get_by_manager(self, db: Session, *, manager_id: str, skip: int = 0, limit: int = 100) -> List[Employee]:
return db.query(Employee).filter(Employee.manager_id == manager_id).offset(skip).limit(limit).all()
def search(self, db: Session, *, params: EmployeeSearchParams, skip: int = 0, limit: int = 100) -> List[Employee]:
query = db.query(Employee)
# Apply filters based on the search parameters
if params.department_id:
query = query.filter(Employee.department_id == params.department_id)
if params.job_title_id:
query = query.filter(Employee.job_title_id == params.job_title_id)
if params.is_active is not None:
query = query.filter(Employee.is_active == params.is_active)
if params.name:
query = query.filter(
or_(
Employee.first_name.ilike(f"%{params.name}%"),
Employee.last_name.ilike(f"%{params.name}%")
)
)
if params.skills:
skill_filters = []
for skill in params.skills:
skill_filters.append(Employee.skills.ilike(f"%{skill}%"))
if skill_filters:
query = query.filter(or_(*skill_filters))
if params.categories:
category_filters = []
for category in params.categories:
category_filters.append(Employee.categories.ilike(f"%{category}%"))
if category_filters:
query = query.filter(or_(*category_filters))
return query.offset(skip).limit(limit).all()
employee = CRUDEmployee(Employee)