live-forum/server/CLAUDE.md
2026-03-24 11:27:37 +08:00

173 lines
5.0 KiB
Markdown

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Repository Overview
This is the **live-forum** server repository, a live streaming forum platform with three main components:
1. **webapi/** - Main API service (.NET 8 Web API) for the forum application
2. **crawler/** - Python-based data crawlers for ByteDance live streaming platforms
3. **admin/** - Backend admin panel (ZrAdminNetCore framework, .NET 8 + Vue)
## Build and Run Commands
### WebAPI (Forum API)
```bash
# Navigate to solution directory
cd webapi/LiveForum
# Restore dependencies
dotnet restore LiveForum.sln
# Build
dotnet build LiveForum.sln
# Run in development mode
dotnet run --project LiveForum.WebApi
# Run in release mode
dotnet run --project LiveForum.WebApi --configuration Release
```
The API runs on `http://*:8080` by default (configured in appsettings.json).
### Crawler (Python)
```bash
# Commerce crawler
cd crawler/commerce
pip install -r requirements.txt
playwright install chromium
# Login (opens browser for manual login)
python main.py login
# Fetch data
python main.py fetch-daren
python main.py daemon # Daemon mode for scheduled crawling
# Entertainment crawler
cd crawler/entertainment
pip install -r requirements.txt
playwright install chromium
python main.py login
python main.py crawl
python main.py daemon # Daemon mode
```
### Admin Panel
```bash
# Backend (.NET)
cd admin/ZrAdminNetCore
dotnet restore ZRAdmin.sln
dotnet run --project ZR.Admin.WebApi
# Frontend (Vue)
cd admin/ZrAdminNetCore/ZR.Vue
npm install
npm run dev
```
## Architecture
### WebAPI Solution Structure
```
webapi/LiveForum/
├── LiveForum.WebApi # Controllers, Background Services, Program.cs entry point
├── LiveForum.Service # Business logic implementation
├── LiveForum.IService # Service interfaces
├── LiveForum.Model # DTOs, Entities, Enums
├── LiveForum.Code # Infrastructure (JWT, Redis, Middleware, Utilities)
├── LiveForum.Repository # Data access layer
└── LiveForum # Core shared library
```
### Key Technologies
- **ORM**: FreeSql (SQL Server)
- **DI Container**: Autofac (with property injection for services)
- **Caching**: Redis (StackExchange.Redis)
- **Background Jobs**: Hangfire (SQL Server storage)
- **Configuration**: AgileConfig (remote config center with hot reload)
- **Logging**: Serilog (console + file sinks)
- **Authentication**: JWT tokens
- **WeChat**: SKIT.FlurlHttpClient.Wechat.Api
- **File Storage**: Tencent COS
### Service Registration Pattern
Services in `LiveForum.Service` are automatically registered via Autofac assembly scanning:
```csharp
autofac.RegisterAssemblyTypes(Assembly.Load("LiveForum.Service"))
.AsImplementedInterfaces()
.PropertiesAutowired()
.InstancePerLifetimeScope();
```
Exceptions: `SensitiveWordService` and `WechatApiClientManager` are registered as singletons in Program.cs.
### Background Services
- `LikeMessageConsumer` - Processes like notifications from Redis
- `CommentReplyMessageConsumer` - Processes comment reply notifications
- `CustomMessageConsumer` - Custom message processing
- `LikeBatchSyncService` - Batch syncs likes to database
- `ViewBatchSyncService` - Batch syncs view counts
- `FlowerBatchSyncService` - Batch syncs flower (gift) counts
### Scheduled Jobs (Hangfire)
- `streamer-flower-reset` - Resets streamer flower counts monthly (1st day, 3 AM)
## Configuration
Configuration sources (priority order):
1. AgileConfig (remote, supports hot reload)
2. appsettings.json
Key configuration sections:
- `ConnectionStrings:LiveForumConnection` - SQL Server connection
- `Redis:Configuration` - Redis connection string
- `JwtTokenConfig` - JWT secret, issuer, audience, expiration
- `Wechat` - WeChat Mini Program AppId/AppSecret
- `TENCENT_COS` - Tencent COS storage settings
- `SensitiveWord` - Sensitive word filtering configuration
## API Endpoints
Access Swagger UI at: `http://localhost:8080/swagger`
Main controller areas:
- `/api/Auth` - Authentication (WeChat login)
- `/api/Posts` - Posts CRUD
- `/api/PostComments` - Comments
- `/api/UsersInfo` - User profiles
- `/api/UserFollow` - Follow relationships
- `/api/Streamers` - Streamer data
- `/api/Flowers` - Gift/flower system
- `/api/Messages` - Notifications
- `/api/Search` - Search functionality
## Crawler Structure
Both crawlers share similar architecture:
```
crawler/{commerce,entertainment}/
├── config/settings.py # Configuration
├── core/
│ ├── cookie_manager.py # Cookie persistence
│ ├── browser_login.py # Playwright browser automation
│ └── api_client.py # API calls with cookies
├── services/
│ └── crawler_service.py # Data fetching logic
├── data/ # Output JSON files
├── logs/ # Log files
└── main.py # CLI entry point
```
Cookies are saved to `data/cookies.json` after manual browser login.