Initial commit - Migrated to Dev environment
This commit is contained in:
BIN
backend/app/schemas/__pycache__/user.cpython-312.pyc
Executable file
BIN
backend/app/schemas/__pycache__/user.cpython-312.pyc
Executable file
Binary file not shown.
40
backend/app/schemas/admin.py
Executable file
40
backend/app/schemas/admin.py
Executable 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
16
backend/app/schemas/auth.py
Executable 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
56
backend/app/schemas/fleet.py
Executable 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
60
backend/app/schemas/social.py
Executable 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
10
backend/app/schemas/token.py
Executable 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
52
backend/app/schemas/user.py
Executable 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
30
backend/app/schemas/vehicle.py
Executable 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
|
||||
Reference in New Issue
Block a user