- 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
74 lines
2.3 KiB
Python
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(),
|
|
)
|
|
|