diff --git a/openapi/user/README.md b/openapi/user/README.md index c1f1632f..6251c989 100644 --- a/openapi/user/README.md +++ b/openapi/user/README.md @@ -78,16 +78,16 @@ This module provides comprehensive user management APIs including authentication | DELETE | `/user/api-keys/:key_id` | Required | Delete API key | | POST | `/user/api-keys/:key_id/regenerate` | Required | Regenerate API key | -### Balance & Credits +### Credits & Top-up | Method | Endpoint | Auth | Description | | ------ | ------------------------------- | -------- | -------------------------- | -| GET | `/user/balance` | Required | Get user balance info | -| GET | `/user/balance/history` | Required | Get balance change history | -| GET | `/user/balance/topup` | Required | Get topup records | -| POST | `/user/balance/topup` | Required | Create topup order | -| GET | `/user/balance/topup/:order_id` | Required | Get topup order status | -| POST | `/user/balance/topup/card-code` | Required | Redeem card code | +| GET | `/user/credits` | Required | Get user credits info | +| GET | `/user/credits/history` | Required | Get credits change history | +| GET | `/user/credits/topup` | Required | Get topup records | +| POST | `/user/credits/topup` | Required | Create topup order | +| GET | `/user/credits/topup/:order_id` | Required | Get topup order status | +| POST | `/user/credits/topup/card-code` | Required | Redeem card code | ### Subscription Management @@ -105,33 +105,61 @@ This module provides comprehensive user management APIs including authentication ### Billing & Invoices -| Method | Endpoint | Auth | Description | -| ------ | ----------------------- | -------- | --------------------------- | -| PUT | `/user/billing/history` | Required | Update user billing history | +| Method | Endpoint | Auth | Description | +| ------ | ------------------------ | -------- | ------------------------ | +| GET | `/user/billing/history` | Required | Get user billing history | +| GET | `/user/billing/invoices` | Required | Get user invoices list | ### Referral & Invitations -| Method | Endpoint | Auth | Description | -| ------ | -------------------------- | -------- | --------------------------- | -| GET | `/user/invite/code` | Required | Get user invite code | -| GET | `/user/invite/statistics` | Required | Get user invite statistics | -| GET | `/user/invite/history` | Required | Get user invite history | -| GET | `/user/invite/commissions` | Required | Get user invite commissions | +| Method | Endpoint | Auth | Description | +| ------ | ---------------------------- | -------- | ----------------------------- | +| GET | `/user/referral/code` | Required | Get user referral code | +| GET | `/user/referral/statistics` | Required | Get user referral statistics | +| GET | `/user/referral/history` | Required | Get user referral history | +| GET | `/user/referral/commissions` | Required | Get user referral commissions | ### Team Management -| Method | Endpoint | Auth | Description | -| ------ | ----------------------------------------- | -------- | ---------------------------- | -| GET | `/user/teams` | Required | Get user teams | -| POST | `/user/teams` | Required | Create user team | -| GET | `/user/teams/:team_id` | Required | Get user team details | -| PUT | `/user/teams/:team_id` | Required | Update user team | -| DELETE | `/user/teams/:team_id` | Required | Delete user team | -| GET | `/user/teams/:team_id/members` | Required | Get user team members | -| GET | `/user/teams/:team_id/members/:member_id` | Required | Get user team member details | -| POST | `/user/teams/:team_id/members/:type` | Required | Create user team member | -| PUT | `/user/teams/:team_id/members/:member_id` | Required | Update user team member | -| DELETE | `/user/teams/:team_id/members/:member_id` | Required | Remove user team member | +#### Team CRUD + +| Method | Endpoint | Auth | Description | +| ------ | ---------------------- | -------- | --------------------- | +| GET | `/user/teams` | Required | Get user teams | +| POST | `/user/teams` | Required | Create user team | +| GET | `/user/teams/:team_id` | Required | Get user team details | +| PUT | `/user/teams/:team_id` | Required | Update user team | +| DELETE | `/user/teams/:team_id` | Required | Delete user team | + +#### Member Management + +| Method | Endpoint | Auth | Description | +| ------ | ----------------------------------------- | -------- | --------------------------------- | +| GET | `/user/teams/:team_id/members` | Required | Get user team members | +| GET | `/user/teams/:team_id/members/:member_id` | Required | Get user team member details | +| POST | `/user/teams/:team_id/members/direct` | Required | Add member directly (bots/system) | +| PUT | `/user/teams/:team_id/members/:member_id` | Required | Update user team member | +| DELETE | `/user/teams/:team_id/members/:member_id` | Required | Remove user team member | + +#### Team Invitations + +| Method | Endpoint | Auth | Description | +| ------ | -------------------------------------------------------- | -------- | ---------------------- | +| POST | `/user/teams/:team_id/invitations` | Required | Send team invitation | +| GET | `/user/teams/:team_id/invitations` | Required | Get team invitations | +| GET | `/user/teams/:team_id/invitations/:invitation_id` | Required | Get invitation details | +| PUT | `/user/teams/:team_id/invitations/:invitation_id/resend` | Required | Resend invitation | +| DELETE | `/user/teams/:team_id/invitations/:invitation_id` | Required | Cancel invitation | + +### Invitation Response (Cross-module) + +_Universal invitation response endpoints that handle invitations from any module (teams, organizations, etc.)_ + +| Method | Endpoint | Auth | Description | +| ------ | ---------------------------------- | -------- | ---------------------------- | +| GET | `/user/invitations/:token` | Public | Get invitation info by token | +| POST | `/user/invitations/:token/accept` | Required | Accept invitation | +| POST | `/user/invitations/:token/decline` | Public | Decline invitation | ### User Preferences @@ -170,3 +198,17 @@ This module provides comprehensive user management APIs including authentication - Rate limiting may apply to sensitive operations (password reset, verification codes) - This module is designed to eventually replace the `signin` module - OAuth callbacks support both GET (Google, GitHub) and POST (Apple, WeChat) methods + +## Architecture + +### Modular Design + +- **Team Management**: Handles team CRUD, member management, and invitation sending +- **Invitation Response**: Universal cross-module invitation handling (accept/decline) +- **Dual Member Addition**: Supports both direct addition (bots/system) and invitation flow (users) + +### Invitation Flow + +1. **Send Invitation**: `POST /user/teams/:team_id/invitations` +2. **Manage Invitations**: View, resend, or cancel via team-specific endpoints +3. **Respond to Invitation**: Universal endpoints handle acceptance/decline regardless of source module diff --git a/openapi/user/user.go b/openapi/user/user.go index 40c60d0f..fb2e31e4 100644 --- a/openapi/user/user.go +++ b/openapi/user/user.go @@ -22,13 +22,14 @@ func Attach(group *gin.RouterGroup, oauth types.OAuth) { attachAccount(group, oauth) // Account settings attachThirdParty(group, oauth) // Third party login attachMFA(group, oauth) // MFA settings - attachBalance(group, oauth) // User balance management + attachCredits(group, oauth) // User credits management attachSubscription(group, oauth) // User subscription management attachAPIKeys(group, oauth) // User API keys management attachUsage(group, oauth) // User usage management attachBilling(group, oauth) // User billing management - attachInvite(group, oauth) // User invite management + attachReferral(group, oauth) // User referral management attachTeam(group, oauth) // User team management + attachInvitations(group, oauth) // Invitation response management attachPrivacy(group, oauth) // User privacy management // User Management @@ -39,6 +40,8 @@ func Attach(group *gin.RouterGroup, oauth types.OAuth) { func attachTeam(group *gin.RouterGroup, oauth types.OAuth) { team := group.Group("/teams") team.Use(oauth.Guard) + + // Team CRUD team.GET("/", placeholder) // Get user teams team.GET("/:team_id", placeholder) // Get user team details team.POST("/", placeholder) // Create user team @@ -48,9 +51,24 @@ func attachTeam(group *gin.RouterGroup, oauth types.OAuth) { // Member Management team.GET("/:team_id/members", placeholder) // Get user team members team.GET("/:team_id/members/:member_id", placeholder) // Get user team member details - team.POST("/:team_id/members/:type", placeholder) // Create user team member + team.POST("/:team_id/members/direct", placeholder) // Add member directly (for bots/system) team.PUT("/:team_id/members/:member_id", placeholder) // Update user team member team.DELETE("/:team_id/members/:member_id", placeholder) // Remove user team member + + // Member Invitation Management + team.POST("/:team_id/invitations", placeholder) // Send team invitation + team.GET("/:team_id/invitations", placeholder) // Get team invitations + team.GET("/:team_id/invitations/:invitation_id", placeholder) // Get invitation details + team.PUT("/:team_id/invitations/:invitation_id/resend", placeholder) // Resend invitation + team.DELETE("/:team_id/invitations/:invitation_id", placeholder) // Cancel invitation +} + +// Invitation Response Management (Cross-module invitation handling) +func attachInvitations(group *gin.RouterGroup, oauth types.OAuth) { + // Public endpoints for invitation recipients + group.GET("/invitations/:token", placeholder) // Get invitation info by token (public) + group.POST("/invitations/:token/accept", oauth.Guard, placeholder) // Accept invitation (requires login) + group.POST("/invitations/:token/decline", placeholder) // Decline invitation (public) } // User Privacy @@ -76,30 +94,31 @@ func attachPreferences(group *gin.RouterGroup, oauth types.OAuth) { func attachBilling(group *gin.RouterGroup, oauth types.OAuth) { billing := group.Group("/billing") billing.Use(oauth.Guard) - billing.PUT("/history", placeholder) // Update user billing history + billing.GET("/history", placeholder) // Get user billing history + billing.GET("/invoices", placeholder) // Get user invoices list } -// Invite Management -func attachInvite(group *gin.RouterGroup, oauth types.OAuth) { - invite := group.Group("/invite") - invite.Use(oauth.Guard) +// Referral Management +func attachReferral(group *gin.RouterGroup, oauth types.OAuth) { + referral := group.Group("/referral") + referral.Use(oauth.Guard) - invite.GET("/code", placeholder) // Get user invite code - invite.GET("/statistics", placeholder) // Get user invite statistics - invite.GET("/history", placeholder) // Get user invite history - invite.GET("/commissions", placeholder) // Get user invite commissions + referral.GET("/code", placeholder) // Get user referral code + referral.GET("/statistics", placeholder) // Get user referral statistics + referral.GET("/history", placeholder) // Get user referral history + referral.GET("/commissions", placeholder) // Get user referral commissions } -// User Balance Management -func attachBalance(group *gin.RouterGroup, oauth types.OAuth) { - balance := group.Group("/balance") - balance.Use(oauth.Guard) +// User Credits Management +func attachCredits(group *gin.RouterGroup, oauth types.OAuth) { + credits := group.Group("/credits") + credits.Use(oauth.Guard) - balance.GET("/", placeholder) // Get user balance info - balance.GET("/history", placeholder) // Get balance change history + credits.GET("/", placeholder) // Get user credits info + credits.GET("/history", placeholder) // Get credits change history // Top-up Management - topup := balance.Group("/topup") + topup := credits.Group("/topup") topup.GET("/", placeholder) // Get topup records topup.POST("/", placeholder) // Create topup order topup.GET("/:order_id", placeholder) // Get topup order status