Initial commit - Migrated to Dev environment

This commit is contained in:
2026-02-03 19:55:45 +00:00
commit a34e5b7976
3518 changed files with 481663 additions and 0 deletions

Binary file not shown.

40
backend/app/schemas/admin.py Executable file
View File

@@ -0,0 +1,40 @@
from pydantic import BaseModel, ConfigDict
from typing import Optional, Any
from datetime import datetime
# --- Pontszabályok (Point Rules) ---
class PointRuleBase(BaseModel):
rule_key: str
points: int
region_code: str = "GLOBAL"
start_date: Optional[datetime] = None
end_date: Optional[datetime] = None
is_active: bool = True
class PointRuleCreate(PointRuleBase):
pass
class PointRuleResponse(PointRuleBase):
id: int
model_config = ConfigDict(from_attributes=True)
# --- Regionális Beállítások (MOT, Tax, stb.) ---
class RegionalSettingBase(BaseModel):
region_code: str
setting_key: str
value: Any # JSON adat (pl. {"months": 24})
start_date: Optional[datetime] = None
end_date: Optional[datetime] = None
class RegionalSettingCreate(RegionalSettingBase):
pass
# --- Szintlépési Konfiguráció ---
class LevelConfigBase(BaseModel):
level_number: int
min_points: int
name_translation_key: str
region_code: str = "GLOBAL"
class LevelConfigUpdate(LevelConfigBase):
pass

16
backend/app/schemas/auth.py Executable file
View File

@@ -0,0 +1,16 @@
from pydantic import BaseModel, EmailStr, Field
from typing import Optional
class Token(BaseModel):
access_token: str
token_type: str
class TokenData(BaseModel):
email: Optional[str] = None
class UserRegister(BaseModel):
email: EmailStr
password: str = Field(..., min_length=8)
full_name: str
region_code: str = "HU"
device_id: str # Az eszköz egyedi azonosítója a védelemhez

56
backend/app/schemas/fleet.py Executable file
View File

@@ -0,0 +1,56 @@
from pydantic import BaseModel, ConfigDict
from typing import Optional, List
from datetime import date, datetime
from app.models.expense import ExpenseCategory
# --- Vehicle Schemas ---
class VehicleBase(BaseModel):
license_plate: str
make: str
model: str
year: int
fuel_type: Optional[str] = None
vin: Optional[str] = None
initial_odometer: int = 0
mot_expiry_date: Optional[date] = None
insurance_expiry_date: Optional[date] = None
class VehicleCreate(VehicleBase):
pass
class VehicleResponse(VehicleBase):
id: int
current_odometer: int
created_at: datetime
model_config = ConfigDict(from_attributes=True)
# --- Event / Expense Schemas ---
class EventBase(BaseModel):
event_type: ExpenseCategory
date: date
odometer_value: int
cost_amount: int
description: Optional[str] = None
is_diy: bool = False
# Ad-Hoc Provider mező: Ha stringet kapunk, a service megkeresi vagy létrehozza
provider_name: Optional[str] = None
provider_id: Optional[int] = None # Ha már ismert ID-t küldünk
class EventCreate(EventBase):
pass
class EventResponse(EventBase):
id: int
vehicle_id: int
odometer_anomaly: bool
service_provider_id: Optional[int]
image_paths: Optional[List[str]] = []
model_config = ConfigDict(from_attributes=True)
class TCOStats(BaseModel):
vehicle_id: int
total_cost: int
breakdown: dict[str, int] # Kategóriánkénti bontás
cost_per_km: Optional[float] = 0.0

60
backend/app/schemas/social.py Executable file
View File

@@ -0,0 +1,60 @@
from pydantic import BaseModel, ConfigDict
from typing import Optional, List
from datetime import datetime
from app.models.social import ModerationStatus, SourceType
# --- Alap Sémák ---
class ServiceProviderBase(BaseModel):
name: str
address: Optional[str] = None
category: Optional[str] = None
source: SourceType = SourceType.manual
class ServiceProviderCreate(BaseModel):
name: str
address: str
category: Optional[str] = None
class ServiceProviderResponse(ServiceProviderBase):
id: int
status: ModerationStatus
validation_score: int # Látni kell a pontszámot
evidence_image_path: Optional[str] = None
added_by_user_id: Optional[int] = None
created_at: datetime
model_config = ConfigDict(from_attributes=True)
# --- Voting & Gamification Sémák ---
class VoteCreate(BaseModel):
vote_value: int # Csak a +1 vagy -1 kell, a user_id jön a tokenből, a provider_id az URL-ből
class LeaderboardEntry(BaseModel):
username: str
points: int
rank: int
model_config = ConfigDict(from_attributes=True)
# --- GAMIFIKÁCIÓS SÉMÁK (Amiket a log keresett) ---
class BadgeSchema(BaseModel):
id: int
name: str
description: str
image_url: Optional[str] = None
class Config:
from_attributes = True
class UserStatSchema(BaseModel):
user_id: int
total_points: int
current_level: int
rank_title: str
badges: List[BadgeSchema] = []
class Config:
from_attributes = True

10
backend/app/schemas/token.py Executable file
View File

@@ -0,0 +1,10 @@
from pydantic import BaseModel
from typing import Optional
class Token(BaseModel):
access_token: str
token_type: str
class TokenData(BaseModel):
username: Optional[str] = None
role: Optional[str] = None

52
backend/app/schemas/user.py Executable file
View File

@@ -0,0 +1,52 @@
from pydantic import BaseModel, EmailStr, field_validator, ConfigDict
from typing import Optional
from datetime import date
# Alap adatok, amik mindenhol kellenek
class UserBase(BaseModel):
email: EmailStr
first_name: Optional[str] = None
last_name: Optional[str] = None
is_active: Optional[bool] = True
is_superuser: bool = False
region_code: str = "HU"
# --- REGISZTRÁCIÓ ---
class UserRegister(UserBase):
password: str
birthday: Optional[date] = None
is_company: bool = False
company_name: Optional[str] = None
tax_number: Optional[str] = None
@field_validator('email')
@classmethod
def block_temporary_emails(cls, v: str) -> str:
blacklist = ['mailinator.com', '10minutemail.com', 'temp-mail.org', 'guerrillamail.com']
domain = v.split('@')[-1].lower()
if domain in blacklist:
raise ValueError('Ideiglenes email szolgáltató nem engedélyezett!')
return v
@field_validator('tax_number')
@classmethod
def validate_tax_id(cls, v: Optional[str], info) -> Optional[str]:
if info.data.get('is_company') and (not v or len(v) < 8):
raise ValueError('Cég esetén az adószám első 8 karaktere kötelező!')
return v
# --- VÁLASZ (Ezt hiányolta a rendszer!) ---
class UserResponse(UserBase):
id: int
is_company: bool
company_name: Optional[str] = None
# Pydantic V2 konfiguráció az ORM (SQLAlchemy) támogatáshoz
model_config = ConfigDict(from_attributes=True)
# Frissítéshez használt séma
class UserUpdate(BaseModel):
password: Optional[str] = None
first_name: Optional[str] = None
last_name: Optional[str] = None
email: Optional[EmailStr] = None

30
backend/app/schemas/vehicle.py Executable file
View File

@@ -0,0 +1,30 @@
from pydantic import BaseModel, Field, validator
from typing import Optional, List, Any
from uuid import UUID
from datetime import datetime
class EngineSpecBase(BaseModel):
engine_code: str
fuel_type: str
power_kw: int
default_service_interval_km: int = 15000
class VehicleBase(BaseModel):
brand_id: int
model_name: str
identification_number: str
license_plate: Optional[str] = None
tracking_mode: str = "km"
class VehicleCreate(VehicleBase):
current_company_id: int
engine_spec_id: int
class VehicleRead(VehicleBase):
id: UUID
current_rating_pct: int
total_real_usage: float
created_at: datetime
class Config:
from_attributes = True