Spaces:
Running
API response inventory (DTO sources)
Data originates from Supabase via engine_* modules and is exposed as JSON through FastAPI (server.py). The browser calls /api/* (Next.js rewrite to FastAPI).
POST list item (feed, userPosts, station posts)
Typical keys after engine normalization:
| Field | Type (JSON) | Notes |
|---|---|---|
| id | string | |
| username | string | Author or station pseudo-user |
| content | string | |
| media_path | string | URL or path |
| timestamp | string | Unix or parsed string |
| comments_count | string | Coerced in engine |
| likes_count | string | |
| station_name | string | Empty for personal posts |
| avatar | string | User or station profile pic |
| is_liked | boolean | When viewer set |
GET /api/post/{post_id}
Success: { "status": "success", "post": { ... } } — post includes select("*") columns as strings plus is_liked, avatar.
Restricted: HTTP 403 { "status": "restricted", "username": ... }.
POST /api/post/feed and GET /api/post/feed
Success: { "status": "success", "feed": Post[], "posts": Post[] } (same array twice for client compatibility).
POST /api/post/userPosts
Success: { "status": "success", "posts": Post[] } — optional { "blocked": true } when viewer blocked.
POST /api/station/get
Success: { "status": "success", "station": { station_name, admin, user_count, bio, hero_banner, profile_pic, users, members_info } | null }.
GET /api/user/{username}/full
Success: { "user": {...}, "avatar": str, "heroBanner": str } — errors use { "error": str }.
Optional pagination (feed)
FeedRequest accepts optional limit (max 500) and offset for slicing the in-memory feed list after get_feed (does not change DB query yet).