2026-04-25 13:21:39 +08:00

59 lines
1.4 KiB
Go

package mysql
import (
"context"
"database/sql"
"strings"
_ "github.com/go-sql-driver/mysql"
"hyapp/pkg/xerr"
activitydomain "hyapp/services/activity-service/internal/domain/activity"
)
// Repository 是 activity-service 的 MySQL 存储入口。
type Repository struct {
db *sql.DB
}
// Open 创建 MySQL 连接池并做启动 ping。
func Open(ctx context.Context, dsn string) (*Repository, error) {
if strings.TrimSpace(dsn) == "" {
return nil, xerr.New(xerr.InvalidArgument, "mysql_dsn is required")
}
db, err := sql.Open("mysql", dsn)
if err != nil {
return nil, err
}
if err := db.PingContext(ctx); err != nil {
_ = db.Close()
return nil, err
}
return &Repository{db: db}, nil
}
// Close 释放 MySQL 连接池。
func (r *Repository) Close() error {
if r == nil || r.db == nil {
return nil
}
return r.db.Close()
}
// Ping 验证 MySQL 当前可用。
func (r *Repository) Ping(ctx context.Context) error {
if r == nil || r.db == nil {
return xerr.New(xerr.Unavailable, "mysql repository is not configured")
}
return r.db.PingContext(ctx)
}
// GetActivity 后续可读取活动配置表;首版底座不实现具体规则存储。
func (r *Repository) GetActivity(context.Context, string) (activitydomain.Activity, error) {
return activitydomain.Activity{}, xerr.New(xerr.Unavailable, "mysql activity repository is not implemented")
}