pounce/backend/app/api/check.py
Yves Gugger 9acb90c067 Initial commit: Pounce - Domain Monitoring System
- FastAPI backend mit Domain-Check, TLD-Pricing, User-Management
- Next.js frontend mit modernem UI
- Sortierbare TLD-Tabelle mit Mini-Charts
- Domain availability monitoring
- Subscription tiers (Starter, Professional, Enterprise)
- Authentication & Authorization
- Scheduler für automatische Domain-Checks
2025-12-08 07:26:57 +01:00

74 lines
2.3 KiB
Python

"""Public domain check API (no auth required)."""
from datetime import datetime
from fastapi import APIRouter, HTTPException, status
from app.schemas.domain import DomainCheckRequest, DomainCheckResponse
from app.services.domain_checker import domain_checker
router = APIRouter()
@router.post("/", response_model=DomainCheckResponse)
async def check_domain_availability(request: DomainCheckRequest):
"""
Check if a domain is available.
This endpoint is public and does not require authentication.
For quick checks, set `quick=true` to use DNS-only lookup (faster but less detailed).
"""
# Validate domain format
is_valid, error = domain_checker.validate_domain(request.domain)
if not is_valid:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=error,
)
# Check domain
result = await domain_checker.check_domain(request.domain, quick=request.quick)
return DomainCheckResponse(
domain=result.domain,
status=result.status.value,
is_available=result.is_available,
registrar=result.registrar,
expiration_date=result.expiration_date,
creation_date=result.creation_date,
name_servers=result.name_servers,
error_message=result.error_message,
checked_at=datetime.utcnow(),
)
@router.get("/{domain}", response_model=DomainCheckResponse)
async def check_domain_get(domain: str, quick: bool = False):
"""
Check domain availability via GET request.
Useful for quick lookups. Domain should be URL-encoded if it contains special characters.
"""
# Validate domain format
is_valid, error = domain_checker.validate_domain(domain)
if not is_valid:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=error,
)
# Check domain
result = await domain_checker.check_domain(domain, quick=quick)
return DomainCheckResponse(
domain=result.domain,
status=result.status.value,
is_available=result.is_available,
registrar=result.registrar,
expiration_date=result.expiration_date,
creation_date=result.creation_date,
name_servers=result.name_servers,
error_message=result.error_message,
checked_at=datetime.utcnow(),
)