expo-popcore-app/findings.md

122 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Findings: Backend Integration Research
## Date: 2026-01-21
## Project Structure
- **Package Manager:** bun
- **Base URL:** https://api.mixvideo.bowong.cc
- **Owner ID:** t0m9cketSQdCA6cHXI9mXQLJPM9LDIw5
- **SDK Location:** node_modules/@repo/sdk
## @repo/sdk Analysis
### Architecture
- **Pattern:** Dependency Injection with Better Auth integration
- **Controllers:** 23 total (Activity, Template, Project, Chat, File, etc.)
- **Access Methods:**
1. Better Auth style: `authClient.loomart.xxx`
2. DI style: `root.get(Controller)`
### Key Controllers
1. **TemplateController** - Template CRUD, workflow execution
2. **CategoryController** - Category management with templates
3. **ProjectController** - Project management
4. **ChatController** - Chat functionality
5. **FileController** - File management
6. **ActivityController** - Activity tracking
7. **TemplateSocialController** - Likes, views, social features
8. **TemplateGenerationController** - Generation tracking
9. **AICharacterController** - AI character management
10. **AigcController** - AIGC operations
## Current State Management
### Zustand Stores (Only 1)
- **useCategoriesStore** (hooks/use-categories.ts)
- Global cache for categories
- Has loading/error/hasLoaded states
- Prevents redundant API calls
### Custom Hooks Pattern (15 hooks)
Most screens use local state via custom hooks:
- use-templates.ts - Template list with pagination
- use-template-detail.ts - Single template
- use-template-actions.ts - Like, view actions
- use-template-generations.ts - Generation history
- use-activates.ts - Activity list
- use-tags.ts - Tag management
- use-search-history.ts - Search history
## API Integration Patterns
### Pattern 1: Better Auth Client (Primary)
```typescript
import { authClient, loomart } from '@/lib/auth'
const result = await loomart.template.list(params)
```
### Pattern 2: DI Container
```typescript
import { root } from '@repo/core'
import { TemplateController } from '@repo/sdk'
const template = root.get(TemplateController)
const result = await template.list(params)
```
### Pattern 3: Error Handling
```typescript
const { data, error } = await handleError(async () => await apiCall())
```
## Frontend Screens Inventory
### Tab Screens (5)
| Screen | Path | Needs API | SDK Support | Notes |
|--------|------|-----------|-------------|-------|
| Home | (tabs)/index.tsx | ✅ Categories, Templates | ✅ TemplateController, CategoryController | Has basic integration |
| Video | (tabs)/video.tsx | ✅ Video list | ✅ TemplateController | Already uses useTemplates |
| Message | (tabs)/message.tsx | ✅ Chat/messages | ❌ No list API | ChatController只有chat()和listModels(),没有消息列表接口 |
| My Profile | (tabs)/my.tsx | ✅ User data | ⚠️ 需确认 | 需要用户信息接口 |
### Main Screens (15)
| Screen | Path | Needs API | Notes |
|--------|------|-----------|-------|
| Auth | auth.tsx | ✅ Login/signup | Has Better Auth |
| Membership | membership.tsx | ✅ Subscription | Needs Stripe |
| Template Detail | templateDetail.tsx | ✅ Template data | Has integration |
| Generate Video | generateVideo.tsx | ✅ Generation API | Needs progress |
| Generation Record | generationRecord.tsx | ✅ History list | Needs pagination |
| Works List | worksList.tsx | ✅ User works | Needs pagination |
| Search Template | searchTemplate.tsx | ✅ Search API | Needs debounce |
| Search Results | searchResults.tsx | ✅ Results list | Needs pagination |
| Search Works | searchWorks.tsx | ✅ Works search | Needs pagination |
| Search Works Results | searchWorksResults.tsx | ✅ Results list | Needs pagination |
| Channels | channels.tsx | ✅ Category data | Needs refresh |
| Change Password | changePassword.tsx | ✅ Auth API | Has integration |
| Privacy | privacy.tsx | ❌ Static | No API needed |
| Terms | terms.tsx | ❌ Static | No API needed |
## Key Discoveries
1. **Minimal Global State:** Only 1 Zustand store (categories), rest uses local state
2. **Hook-Based Architecture:** 15 custom hooks handle API calls
3. **Existing Patterns:** Some screens already have API integration
4. **Missing Features:**
- Loading states inconsistent across screens
- No pull-to-refresh on most screens
- Pagination exists in hooks but not all screens use it
- No error retry mechanisms
- No optimistic updates
5. **SDK限制**
- ❌ ChatController没有消息列表接口只有chat()和listModels()
- ❌ 没有用户信息相关的Controller
- ✅ Video页面已正确使用TemplateController不需要单独的视频hook
## Technical Constraints
1. **Multi-tenant:** All requests need `x-ownerid` header
2. **Authentication:** Token stored in expo-secure-store
3. **Design Width:** 375px (need to convert styles to Tailwind)
4. **No Redux:** Project uses minimal global state approach
5. **Better Auth:** Primary auth method, SDK integrated as plugin