Files
gb28181/internal/core/event/event.go
T
2026-03-27 20:55:54 +08:00

104 lines
3.1 KiB
Go
Executable File

// Code generated by godddx, DO AVOID EDIT.
package event
import (
"context"
"log/slog"
"github.com/ixugo/goddd/pkg/orm"
"github.com/ixugo/goddd/pkg/reason"
"github.com/ixugo/goddd/pkg/web"
"github.com/jinzhu/copier"
"gorm.io/gorm"
)
// EventStorer Instantiation interface
type EventStorer interface {
Find(context.Context, *[]*Event, orm.Pager, ...orm.QueryOption) (int64, error)
Get(context.Context, *Event, ...orm.QueryOption) error
Add(context.Context, *Event) error
Edit(context.Context, *Event, func(*Event), ...orm.QueryOption) error
Del(context.Context, *Event, ...orm.QueryOption) error
Count(context.Context, ...orm.QueryOption) (int64, error)
Session(context.Context, ...func(*gorm.DB) error) error
EditWithSession(*gorm.DB, *Event, func(b *Event) error, ...orm.QueryOption) error
}
// FindEvents 分页查询事件列表,支持按 CID 和时间范围筛选
func (c Core) FindEvents(ctx context.Context, in *FindEventInput) ([]*Event, int64, error) {
query := orm.NewQuery(4).OrderBy("started_at DESC")
if in.CID != "" {
query.Where("cid = ?", in.CID)
}
if in.DID != "" {
query.Where("did = ?", in.DID)
}
if in.Label != "" {
query.Where("label = ?", in.Label)
}
if in.StartMs > 0 && in.EndMs > 0 {
query.Where("started_at >= ? AND started_at <= ?", in.StartAt(), in.EndAt())
}
items := make([]*Event, 0, in.Limit())
total, err := c.store.Event().Find(ctx, &items, in, query.Encode()...)
if err != nil {
return nil, 0, reason.ErrDB.Withf(`Find in[%+v] err[%s]`, in, err.Error())
}
for _, item := range items {
if ctx, ok := ctx.(web.Context); ok {
item.ImagePath = ctx.BaseURLJoin("/events/image/", item.ImagePath)
}
}
return items, total, nil
}
// GetEvent 根据 ID 查询单个事件
func (c Core) GetEvent(ctx context.Context, id int64) (*Event, error) {
out := Event{ID: id}
if err := c.store.Event().Get(ctx, &out, orm.Where("id=?", id)); err != nil {
if orm.IsErrRecordNotFound(err) {
return nil, reason.ErrNotFound.Withf(`Get id[%v] err[%s]`, id, err.Error())
}
return nil, reason.ErrDB.Withf(`Get id[%v] err[%s]`, id, err.Error())
}
return &out, nil
}
// AddEvent 新增事件记录
func (c Core) AddEvent(ctx context.Context, in *AddEventInput) (*Event, error) {
var out Event
if err := copier.Copy(&out, in); err != nil {
slog.ErrorContext(ctx, "Copy", "err", err)
}
if err := c.store.Event().Add(ctx, &out); err != nil {
return nil, reason.ErrDB.Withf(`Add err[%s]`, err.Error())
}
return &out, nil
}
// EditEvent 更新事件信息
func (c Core) EditEvent(ctx context.Context, in *EditEventInput, id int64) (*Event, error) {
var out Event
if err := c.store.Event().Edit(ctx, &out, func(b *Event) {
if !in.EndedAt.IsZero() {
b.EndedAt = in.EndedAt
}
}, orm.Where("id=?", id)); err != nil {
return nil, reason.ErrDB.Withf(`Edit id[%v] err[%s]`, id, err.Error())
}
return &out, nil
}
// DelEvent 删除事件
func (c Core) DelEvent(ctx context.Context, id int64) (*Event, error) {
var out Event
if err := c.store.Event().Del(ctx, &out, orm.Where("id=?", id)); err != nil {
return nil, reason.ErrDB.Withf(`Del id[%v] err[%s]`, id, err.Error())
}
return &out, nil
}