Files
devplacepy/devplacepy/schemas/profile.py
T
retoor 0f872336b1 feat: add online presence tracking with last_seen column and configurable timeout
Add `last_seen` column to users table with index, implement `set_last_seen` and `get_online_users` database functions, expose presence config env vars (`PRESENCE_TIMEOUT_SECONDS`, `PRESENCE_ONLINE_LIMIT`, `PRESENCE_ONLINE_MARGIN_SECONDS`), include `last_seen` in follow list responses, and update profile docs to mention online indicator.
2026-07-04 22:08:20 +00:00

81 lines
2.5 KiB
Python

# retoor <retoor@molodetz.nl>
from __future__ import annotations
from typing import Any, Optional
from devplacepy.schemas.base import _Out
from devplacepy.schemas.content import BadgeOut, ProjectOut, UserOut
from devplacepy.schemas.listings import FeedItemOut, GistItemOut
class MediaItemOut(_Out):
uid: str = ""
original_filename: Optional[str] = None
file_size: Optional[int] = None
mime_type: Optional[str] = None
url: Optional[str] = None
thumbnail_url: Optional[str] = None
has_thumbnail: bool = False
is_image: bool = False
is_video: bool = False
target_type: Optional[str] = None
target_uid: Optional[str] = None
target_url: Optional[str] = None
created_at: Optional[str] = None
class ProfileOut(_Out):
profile_user: UserOut
posts: list[FeedItemOut] = []
badges: list[BadgeOut] = []
achievements: list[dict] = []
badge_total: int = 0
badge_earned: int = 0
projects: list[ProjectOut] = []
gists: list[GistItemOut] = []
current_tab: Optional[str] = None
posts_count: Optional[int] = None
is_following: bool = False
is_blocked: bool = False
is_muted: bool = False
is_owner: bool = False
profile_online: bool = False
can_view_api_key: bool = False
api_key: Optional[str] = None
ai_correction_enabled: bool = False
ai_correction_sync: bool = False
ai_correction_prompt: Optional[str] = None
ai_modifier_enabled: bool = False
ai_modifier_sync: bool = False
ai_modifier_prompt: Optional[str] = None
telegram_paired: bool = False
notif_telegram_paired: bool = False
can_manage_customization: bool = False
cust_disable_global: bool = False
cust_disable_pagetype: bool = False
ai_quota: Optional[dict] = None
correction_usage: Optional[dict] = None
modifier_usage: Optional[dict] = None
activities: list[Any] = []
rank: Optional[int] = None
heatmap: Optional[Any] = None
heatmap_months: Optional[Any] = None
streak: Optional[Any] = None
people: list[Any] = []
follow_pagination: Optional[Any] = None
followers_count: Optional[int] = None
following_count: Optional[int] = None
viewer_is_admin: bool = False
media: list[MediaItemOut] = []
media_pagination: Optional[Any] = None
notification_prefs: list[Any] = []
class TelegramPairOut(_Out):
ok: bool = True
paired: bool = False
code: Optional[str] = None
expires_at: Optional[str] = None
ttl_minutes: Optional[int] = None