技能标识:teamgram-rpc-development
Complete guide for developing RPC services in Teamgram Server (v2.0.0). Use when creating new RPC methods, implementing business logic, or extending Teamgram functionality. Covers TL schema, DAO/Core/Server layers, error handling, performance optimization, security, testing, observability, and production best practices.
在Teamgram Server中开发RPC服务的完整指南。
📚 十次版本迭代优化 (v1.0.0 → v2.0.0)
本技能经过十次迭代完善,涵盖从基础开发到生产部署的完整知识体系。
| 版本 | 主题 | 文档 |
|---|---|---|
| v1.0.0 | 基础开发 | 本指南 |
| v1.1.0 |
新手指南: 从 开发工作流 开始
生产优化: 查看 v1.2.0性能优化 和 v1.3.0安全
问题排查: 参考 v1.1.0错误处理 和 v1.5.0可观测性
Teamgram使用gRPC进行服务间通信,使用MTProto进行客户端-服务器通信。本指南涵盖两者。
tl
// 文件: specs/mtproto.tl
// 请求/响应类型
premium.getStatus#d0b5e0f2 user_id:long = PremiumStatus;
premium.purchase#8f8c0e1c userid:long planid:int payment_method:string = Bool;
// 对象类型
premiumStatus#9a4f3e2d userid:long status:int expiresat:long = PremiumStatus;
命名规范:
bash
sql
-- 文件: data/schema/premium.sql
CREATE TABLE user_premium (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
status TINYINT DEFAULT 0 COMMENT 0=无, 1=基础, 2=高级,
plan_id INT DEFAULT 0,
expires_at BIGINT DEFAULT 0,
createdat TIMESTAMP DEFAULT CURRENTTIMESTAMP,
updatedat TIMESTAMP DEFAULT CURRENTTIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY ukuserid (user_id),
INDEX idxexpires (expiresat)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE premium_transactions (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
plan_id INT NOT NULL,
amount DECIMAL(10,2) NOT NULL,
currency VARCHAR(3) DEFAULT USD,
payment_method VARCHAR(50),
status TINYINT DEFAULT 0 COMMENT 0=待处理, 1=成功, 2=失败,
transaction_id VARCHAR(255),
createdat TIMESTAMP DEFAULT CURRENTTIMESTAMP,
INDEX idxuserid (user_id),
INDEX idxcreatedat (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
go
// 文件: app/service/biz/internal/dao/premium_dao.go
package dao
import (
context
database/sql
time
github.com/teamgram/teamgram-server/app/service/biz/internal/model
github.com/zeromicro/go-zero/core/stores/sqlx
)
type PremiumDAO struct {
db sqlx.SqlConn
}
func NewPremiumDAO(db sqlx.SqlConn) *PremiumDAO {
return &PremiumDAO{db: db}
}
// GetPremiumStatus 获取用户会员状态
func (d PremiumDAO) GetPremiumStatus(ctx context.Context, userID int64) (model.UserPremium, error) {
var m model.UserPremium
query := SELECT * FROM userpremium WHERE userid = ?
err := d.db.QueryRowCtx(ctx, &m, query, userID)
if err == sqlx.ErrNotFound {
// 返回默认状态(非会员)
return &model.UserPremium{UserID: userID, Status: 0}, nil
}
return &m, err
}
// CreateOrUpdatePremium 创建或更新会员状态
func (d *PremiumDAO) CreateOrUpdatePremium(ctx context.Context, userID int64, status int32, planID int, expiresAt int64) error {
query :=
INSERT INTO userpremium (userid, status, planid, expiresat)
VALUES (?, ?, ?, ?)
ON DUPLICATE KEY UPDATE
status = VALUES(status),
planid = VALUES(planid),
expiresat = VALUES(expiresat)
_, err := d.db.ExecCtx(ctx, query, userID, status, planID, expiresAt)
return err
}
// CreateTransaction 创建交易记录
func (d PremiumDAO) CreateTransaction(ctx context.Context, txn model.PremiumTransaction) (int64, error) {
query :=
INSERT INTO premium_transactions
(userid, planid, amount, currency, paymentmethod, status, transactionid)
VALUES (?, ?, ?, ?, ?, ?, ?)
result, err := d.db.ExecCtx(ctx, query,
txn.UserID, txn.PlanID, txn.Amount, txn.Currency,
txn.PaymentMethod, txn.Status, txn.TransactionID,
)
if err != nil {
return 0, err
}
return result.LastInsertId()
}
// UpdateTransactionStatus 更新交易状态
func (d *PremiumDAO) UpdateTransactionStatus(ctx context.Context, txnID int64, status int32) error {
query := UPDATE premium_transactions SET status = ? WHERE id = ?
_, err := d.db.ExecCtx(ctx, query, status, txnID)
return err
}
go
// 文件: app/service/biz/internal/core/premium_core.go
package core
import (
context
errors
time
github.com/teamgram/teamgram-server/app/service/biz/internal/dao
github.com/teamgram/teamgram-server/app/service/biz/internal/model
github.com/teamgram/teamgram-server/app/service/biz/internal/svc
)
var (
ErrInvalidPlan = errors.New(无效的高级会员套餐)
ErrPaymentFailed = errors.New(支付处理失败)
)
type PremiumCore struct {
svcCtx *svc.ServiceContext
dao *dao.Premium
以下为平台配置的接入选项,并非逐项实测通过。能否安装取决于客户端支持、技能来源和运行环境:
帮我安装 SkillHub 和 teamgram-rpc-development-1776081314 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 teamgram-rpc-development-1776081314 技能
skillhub install teamgram-rpc-development-1776081314
文件大小: 20.75 KB | 发布时间: 2026-4-15 14:37