from datetime import datetime
from dataclasses import dataclass

from typing import Any, List, Optional


@dataclass
class Dto[Properties: Any]:
  id: Optional[str] = None
  ref: Optional[str] = None
  owner: Optional[str] = None

  shares: Optional[List[str]] = None
  groups: Optional[List[str]] = None
  clients: Optional[List[str]] = None

  created_at: Optional[datetime] = None
  created_by: Optional[str] = None
  created_in: Optional[str] = None

  updated_at: Optional[datetime] = None
  updated_by: Optional[str] = None
  updated_in: Optional[str] = None
  deleted_at: Optional[datetime] = None
  deleted_by: Optional[str] = None
  deleted_in: Optional[str] = None
  restored_at: Optional[datetime] = None
  restored_by: Optional[str] = None
  restored_in: Optional[str] = None

  description: Optional[str] = None
  identity: Optional[str] = None
  props: Optional[Properties] = None
  tags: Optional[List[str]] = None

  version: Optional[str] = None

  rand: Optional[str] = None
  timestamp: Optional[str] = None
