Create a new feature/test case manually.
(project_name: str, feature: FeatureCreate)
| 167 | |
| 168 | @router.post("", response_model=FeatureResponse) |
| 169 | async def create_feature(project_name: str, feature: FeatureCreate): |
| 170 | """Create a new feature/test case manually.""" |
| 171 | project_name = validate_project_name(project_name) |
| 172 | project_dir = _get_project_path(project_name) |
| 173 | |
| 174 | if not project_dir: |
| 175 | raise HTTPException(status_code=404, detail=f"Project '{project_name}' not found in registry") |
| 176 | |
| 177 | if not project_dir.exists(): |
| 178 | raise HTTPException(status_code=404, detail="Project directory not found") |
| 179 | |
| 180 | _, Feature = _get_db_classes() |
| 181 | |
| 182 | try: |
| 183 | with get_db_session(project_dir) as session: |
| 184 | # Get next priority if not specified |
| 185 | if feature.priority is None: |
| 186 | max_priority = session.query(Feature).order_by(Feature.priority.desc()).first() |
| 187 | priority = (max_priority.priority + 1) if max_priority else 1 |
| 188 | else: |
| 189 | priority = feature.priority |
| 190 | |
| 191 | # Create new feature |
| 192 | db_feature = Feature( |
| 193 | priority=priority, |
| 194 | category=feature.category, |
| 195 | name=feature.name, |
| 196 | description=feature.description, |
| 197 | steps=feature.steps, |
| 198 | dependencies=feature.dependencies if feature.dependencies else None, |
| 199 | passes=False, |
| 200 | in_progress=False, |
| 201 | ) |
| 202 | |
| 203 | session.add(db_feature) |
| 204 | session.commit() |
| 205 | session.refresh(db_feature) |
| 206 | |
| 207 | return feature_to_response(db_feature) |
| 208 | except HTTPException: |
| 209 | raise |
| 210 | except Exception: |
| 211 | logger.exception("Failed to create feature") |
| 212 | raise HTTPException(status_code=500, detail="Failed to create feature") |
| 213 | |
| 214 | |
| 215 | # ============================================================================ |
nothing calls this directly
no test coverage detected