spark-server/internal/module/square/model/repo.go
2026-09-22 17:07:26 +08:00

51 lines
974 B
Go

package model
import (
"context"
"errors"
mysqldriver "github.com/go-sql-driver/mysql"
"gorm.io/gorm"
"spark-server/internal/module/square/entity"
"spark-server/internal/pkg/errs"
)
// Repo is MySQL persistence for square.
type Repo struct {
gdb *gorm.DB
}
func NewRepo(gdb *gorm.DB) *Repo {
return &Repo{gdb: gdb}
}
func (m *Repo) session(ctx context.Context) (*gorm.DB, error) {
if m == nil || m.gdb == nil {
return nil, errs.ErrAvailable
}
return m.gdb.WithContext(ctx), nil
}
func mapDBErr(err error) error {
if err == nil {
return nil
}
if errors.Is(err, gorm.ErrRecordNotFound) {
return errs.ErrNotFound
}
var me *mysqldriver.MySQLError
if errors.As(err, &me) && me.Number == 1062 {
return errs.ErrDuplicate
}
return errs.ErrInner.WithError("square-mysql", err)
}
func collectPosts(rows []Post) []*entity.Post {
out := make([]*entity.Post, 0, len(rows))
for i := range rows {
out = append(out, rows[i].Entity())
}
return out
}