shanshanzhong147 a46fb83054 新功能(#3): 抽奖 Stage 1 handler 真实业务对接 + 邀请钩子
Closes HIF-3 (阶段 PR B)

PR B:handler 真实业务对接 + 邀请钩子(迭代含 R1 修复)

- 迁移 02157_lottery_grant_ledger:external_ref UNIQUE 作为发奖幂等键
- log.CommissionTypeLottery=339(架构师批准的新常量)
- DispatchRequest.IdempotencyKey(架构师 review 建议第 2 条)
- GrantLedger + LedgerService.Reserve:INSERT ON CONFLICT DO NOTHING 幂等 upsert
- VPNDurationHandler:ResolveEffectiveUser 归位家庭 owner + UpdateSubscribe,ExpireTime 三分支对齐 grantGiftDays
- CommissionHandler:UpdateCommission + WriteCommissionLog(339),发给中奖者本人,不做家庭组归位
- Handler 从 model 层迁到 logic 层(避免 model → logic 反向依赖);noop 保留在 model 层
- InviteHook:fire-and-forget 独立 goroutine + 10s timeout,扫 running 活动的 invite_success 源
- ServiceContext 新增 LotteryChance / LotteryLedger / LotteryInviteHook
- activateOrderLogic.handleCommission 两条分支通过 invokeInviteHookIfEligible 助手触发,助手内统一 gate IsNew(架构师 R1 打回后的修复)

架构师 R1 打回:branch B 未按"首次付款激活"gate,续费也会给 referer 发抽奖机会 → 已通过助手函数集中收拢,避免 branch A/B 判断漂移。

测试覆盖率:model 76.5% / handler 73.2% / hook 91.7%;补 4 个回归测试覆盖 IsNew 门槛(含关键的 DoesNotFireOnRenewal)。

线上仍零可见变更:无对外路由,钩子仅在活动 status=running 时生效,Stage 1 全流程无活动记录时 loadRunningActivities 返回空。
2026-07-08 21:19:28 -07:00
2026-03-06 21:58:29 -08:00
x
2026-05-08 06:19:59 -07:00
2026-04-29 12:49:45 -07:00
x
2026-05-08 06:19:59 -07:00
x
2026-05-03 18:34:14 -07:00
2025-04-25 12:08:29 +09:00
2025-04-25 16:40:57 +09:00
2026-03-08 07:31:11 -07:00

TawCorp hifast-server (internal fork)

This repository is the canonical TawCorp fork of perfect-panel/server. Migrated from git.kxsw.us/HI-VPN/hi-server on 2026-06-03; the old Gitea remote is deprecated — do not push or pull from it.

  • Development workflow (required reading for internal contributors): doc/development-workflow-zh.md
  • Branch model: internal (dev mainline, auto-deploys to staging) → main (release)
  • Merge policy: PR + architect review + GitHub UI "Squash and merge"; direct push to internal/main is blocked by lefthook pre-push and forbidden by policy
  • Issue tracker: Multica workspace Hifast (prefix HIF-)

External contributors: read CONTRIBUTING.md for the upstream-compatible baseline.


PPanel Server

License Go Version Go Report Card Docker CI/CD

PPanel is a pure, professional, and perfect open-source proxy panel tool, designed for learning and practical use.

English | 中文 | Report Bug | Request Feature

Article 1.
All human beings are born free and equal in dignity and rights.
They are endowed with reason and conscience and should act towards one another in a spirit of brotherhood.

Article 12.
No one shall be subjected to arbitrary interference with his privacy, family, home or correspondence, nor to attacks upon his honour and reputation.
Everyone has the right to the protection of the law against such interference or attacks.

Article 19.
Everyone has the right to freedom of opinion and expression; this right includes freedom to hold opinions without interference and to seek, receive and impart information and ideas through any media and regardless of frontiers.

Source: United Nations Universal Declaration of Human Rights (UN.org)

📋 Overview

PPanel Server is the backend component of the PPanel project, providing robust APIs and core functionality for managing proxy services. Built with Go, it emphasizes performance, security, and scalability.

Key Features

  • Multi-Protocol Support: Supports Shadowsocks, V2Ray, Trojan, and more.
  • Privacy First: No user logs are collected, ensuring privacy and security.
  • Minimalist Design: Simple yet powerful, with complete business logic.
  • User Management: Full authentication and authorization system.
  • Subscription System: Manage user subscriptions and service provisioning.
  • Payment Integration: Supports multiple payment gateways.
  • Order Management: Track and process user orders.
  • Ticket System: Built-in customer support and issue tracking.
  • Node Management: Monitor and control server nodes.
  • API Framework: Comprehensive RESTful APIs for frontend integration.

Subscription Mode Behavior

The subscription behavior can be switched by the backend config Subscribe.SingleModel:

  • false (multi-subscription mode): each successful purchase creates a new user_subscribe record.
  • true (single-subscription mode): purchase is auto-routed to renewal semantics when the user already has a paid subscription:
    • a new order is still created,
    • but the existing subscription is extended (instead of creating another user_subscribe).

🚀 Quick Start

Prerequisites

  • Go: 1.21 or higher
  • Docker: Optional, for containerized deployment
  • Git: For cloning the repository

Installation from Source

  1. Clone the repository:

    git clone https://github.com/perfect-panel/ppanel-server.git
    cd ppanel-server
    
  2. Install dependencies:

    go mod download
    
  3. Generate code:

    chmod +x script/generate.sh
    ./script/generate.sh
    
  4. Build the project:

    make linux-amd64
    
  5. Run the server:

    ./ppanel-server-linux-amd64 run --config etc/ppanel.yaml
    

🐳 Docker Deployment

  1. Build the Docker image:

    docker buildx build --platform linux/amd64 -t ppanel-server:latest .
    
  2. Run the container:

    docker run --rm -p 8080:8080 -v $(pwd)/etc:/app/etc ppanel-server:latest
    
  3. Use Docker Compose (create docker-compose.yml):

    version: '3.8'
    services:
      ppanel-server:
        image: ppanel-server:latest
        ports:
          - "8080:8080"
        volumes:
          - ./etc:/app/etc
        environment:
          - TZ=Asia/Shanghai
    

    Run:

    docker-compose up -d
    
  4. Pull from Docker Hub (after CI/CD publishes):

    docker pull ppanel/ppanel-server:latest
    docker run --rm -p 8080:8080 ppanel/ppanel-server:latest
    

📖 API Documentation

Explore the full API documentation:

The documentation covers all endpoints, request/response formats, and authentication details.

Project Description Link
PPanel Web Frontend for PPanel GitHub
PPanel User Web User interface for PPanel Preview
PPanel Admin Web Admin interface for PPanel Preview

🌐 Official Website

Visit ppanel.dev for more details.

🏛 Architecture

Architecture Diagram

📁 Directory Structure

.
├── apis/             # API definition files
├── cmd/              # Application entry point
├── doc/              # Documentation
├── etc/              # Configuration files (e.g., ppanel.yaml)
├── generate/         # Code generation tools
├── initialize/       # System initialization
├── internal/         # Internal modules
│   ├── config/       # Configuration parsing
│   ├── handler/      # HTTP handlers
│   ├── middleware/   # HTTP middleware
│   ├── logic/        # Business logic
│   ├── model/        # Data models
│   ├── svc/          # Service layer
│   └── types/        # Type definitions
├── pkg/              # Utility code
├── queue/            # Queue services
├── scheduler/        # Scheduled tasks
├── script/           # Build scripts
├── go.mod            # Go module definition
├── Makefile          # Build automation
└── Dockerfile        # Docker configuration

💻 Development

Format API Files

goctl api format --dir apis/user.api

Add a New API

  1. Create a new API file in apis/.
  2. Import it in apis/ppanel.api.
  3. Regenerate code:
    ./script/generate.sh
    

Build for Multiple Platforms

Use the Makefile to build for various platforms (e.g., Linux, Windows, macOS):

make all  # Builds linux-amd64, darwin-amd64, windows-amd64
make linux-arm64  # Build for specific platform

Supported platforms include:

  • Linux: 386, amd64, arm64, armv5-v7, mips, riscv64, loong64, etc.
  • Windows: 386, amd64, arm64, armv7
  • macOS: amd64, arm64
  • FreeBSD: amd64, arm64

🤝 Contributing

Contributions are welcome! Please follow the Contribution Guidelines for bug fixes, features, or documentation improvements.

Special Thanks

A huge thank you to the following outstanding open-source projects that have provided invaluable support for this project's development! 🚀

Project Description Project Description
Gin
Gin
Gin Stars
High-performance Go Web framework
Gorm
Gorm
Gorm Stars
Powerful Go ORM framework
Asynq
Asynq
Asynq Stars
Asynchronous task queue for Go
Go-Swagger
Go-Swagger
Go-Swagger Stars
Comprehensive Go Swagger toolkit
Go-Zero
Go-Zero
Go-Zero Stars
Go microservices framework (this project's API generator is built on Go-Zero)

🎉 Salute to Open Source: Thank you to the open-source community for making development simpler and more efficient! Please give these projects a to support the open-source movement!

📄 License

This project is licensed under the GPL-3.0 License.

S
Description
No description provided
Readme GPL-3.0 291 MiB
Languages
Go 95.5%
PLpgSQL 2.8%
HTML 1.5%