fix: resolve all ruff and ESLint lint errors

Backend (ruff):
- F821: Add TYPE_CHECKING imports for Vehicle, Contact, File in models
  (file.py, retouch.py, sale.py, vehicle.py)
- E741: Rename ambiguous variable  to /
  (copilot_service.py, price_compare_service.py, openrouter.py)
- F841: Remove unused variable  in sale_service.py

Frontend (ESLint):
- react/no-unescaped-entities: Escape quotes in ContractPreview.tsx
- @next/next/no-img-element: Replace <img> with <Image> from next/image
  (FileGallery.tsx, FileList.tsx, FilePreview.tsx, BeforeAfterSlider.tsx)

Tests: 392 backend passed, 112 frontend passed, next build successful
This commit is contained in:
2026-07-17 21:16:38 +02:00
parent f1d6de0e47
commit 341d0c6f38
30 changed files with 4078 additions and 48 deletions
+1 -1
View File
@@ -43,7 +43,7 @@ def _parse_ai_response(raw_content: str) -> dict[str, Any]:
# Strip markdown code fences if present
if text.startswith("```"):
lines = text.split("\n")
lines = [l for l in lines if not l.strip().startswith("```")]
lines = [line for line in lines if not line.strip().startswith("```")]
text = "\n".join(lines).strip()
try:
+1 -2
View File
@@ -6,7 +6,6 @@ import os
import uuid
from datetime import date
from decimal import Decimal
from typing import Any
from sqlalchemy import and_, func, select
from sqlalchemy.ext.asyncio import AsyncSession
@@ -14,7 +13,7 @@ from sqlalchemy.orm import selectinload
from app.models.datev_export import DATEVExport
from app.models.sale import Sale
from app.utils.datev import generate_datev_csv, validate_datev_csv
from app.utils.datev import generate_datev_csv
async def create_export(
-1
View File
@@ -8,7 +8,6 @@ Enforces MAX_FILE_SIZE_MB from config (default 50MB, but endpoint enforces 20MB)
from __future__ import annotations
import logging
import os
import uuid
from pathlib import Path
from typing import Optional
+1 -2
View File
@@ -8,10 +8,9 @@ from __future__ import annotations
import uuid
from datetime import datetime, timezone
from typing import Any
import httpx
from sqlalchemy import and_, select
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from app.config import settings
-2
View File
@@ -5,8 +5,6 @@ from __future__ import annotations
import logging
import os
import uuid
from datetime import datetime, timezone
from typing import Any
from sqlalchemy import and_, func, select
from sqlalchemy.ext.asyncio import AsyncSession
@@ -5,7 +5,6 @@ from __future__ import annotations
import logging
import random
import uuid
from typing import Any
from sqlalchemy.ext.asyncio import AsyncSession
@@ -83,7 +82,7 @@ async def compare_prices(
# Calculate average price
if listings:
average_price = round(sum(l.price for l in listings) / len(listings), 2)
average_price = round(sum(listing.price for listing in listings) / len(listings), 2)
else:
average_price = None
+1 -3
View File
@@ -3,8 +3,7 @@
from __future__ import annotations
import uuid
from datetime import date, datetime, timezone
from decimal import Decimal
from datetime import date
from typing import Any
from sqlalchemy import and_, func, select
@@ -26,7 +25,6 @@ async def create_sale(db: AsyncSession, data: dict[str, Any]) -> Sale:
Raises ValueError if vehicle or buyer contact not found.
"""
vehicle_id = data["vehicle_id"]
buyer_contact_id = data["buyer_contact_id"]
# Verify vehicle exists
vehicle = await db.get(Vehicle, vehicle_id)
-1
View File
@@ -8,7 +8,6 @@ from typing import Any
from sqlalchemy import and_, func, or_, select
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import selectinload
from app.models.vehicle import Vehicle