This commit is contained in:
2025-09-06 06:23:56 +02:00
parent 00029680d0
commit a29252c716
7 changed files with 1195 additions and 0 deletions

54
models.py Normal file
View File

@@ -0,0 +1,54 @@
from dataclasses import dataclass
from typing import List, Optional
@dataclass
class Host:
"""Represents a host/service within a location."""
name: str
address: str
type: str # e.g., "SSH", "Web", "SMB", "PostgreSQL", "Redis"
@dataclass
class Location:
"""Represents a location within a customer (e.g., headquarters, branch office)."""
name: str
vpn_type: str # e.g., "OpenVPN", "WireGuard", "IPSec"
connected: bool = False
active: bool = False
hosts: List[Host] = None
def __post_init__(self):
if self.hosts is None:
self.hosts = []
@dataclass
class Customer:
"""Represents a customer with multiple locations."""
name: str
locations: List[Location] = None
def __post_init__(self):
if self.locations is None:
self.locations = []
def get_active_locations(self) -> List[Location]:
"""Get all active locations for this customer."""
return [loc for loc in self.locations if loc.active]
def get_inactive_locations(self) -> List[Location]:
"""Get all inactive locations for this customer."""
return [loc for loc in self.locations if not loc.active]
def has_active_locations(self) -> bool:
"""Check if customer has any active locations."""
return any(loc.active for loc in self.locations)
def get_location_by_name(self, location_name: str) -> Optional[Location]:
"""Get a location by its name."""
for location in self.locations:
if location.name == location_name:
return location
return None