File size: 2,406 Bytes
9df97a2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | """Skills API routes"""
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from typing import List
from pydantic import BaseModel
from app.core.dependencies import get_db
from app.models.models import Skill
router = APIRouter(prefix="/api/skills", tags=["skills"])
class SkillCreate(BaseModel):
name: str
category: str # tech, soft, language
class SkillResponse(BaseModel):
id: int
name: str
category: str
class Config:
from_attributes = True
@router.get("/", response_model=List[SkillResponse])
def get_skills(
category: str = None,
skip: int = 0,
limit: int = 100,
db: Session = Depends(get_db)
):
"""Get all skills, optionally filtered by category"""
query = db.query(Skill)
if category:
query = query.filter(Skill.category == category)
skills = query.offset(skip).limit(limit).all()
return skills
@router.get("/{skill_id}", response_model=SkillResponse)
def get_skill(
skill_id: int,
db: Session = Depends(get_db)
):
"""Get a specific skill by ID"""
skill = db.query(Skill).filter(Skill.id == skill_id).first()
if not skill:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Skill not found"
)
return skill
@router.post("/", response_model=SkillResponse)
def create_skill(
skill: SkillCreate,
db: Session = Depends(get_db)
):
"""Create a new skill"""
# Check if skill already exists
existing_skill = db.query(Skill).filter(
Skill.name == skill.name,
Skill.category == skill.category
).first()
if existing_skill:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Skill already exists"
)
db_skill = Skill(name=skill.name, category=skill.category)
db.add(db_skill)
db.commit()
db.refresh(db_skill)
return db_skill
@router.delete("/{skill_id}", status_code=status.HTTP_204_NO_CONTENT)
def delete_skill(
skill_id: int,
db: Session = Depends(get_db)
):
"""Delete a skill"""
skill = db.query(Skill).filter(Skill.id == skill_id).first()
if not skill:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Skill not found"
)
db.delete(skill)
db.commit()
return None
|