package repositoryimpl

import (
	"center-api/internal/biz/do"
	"center-api/internal/biz/repository"
	"center-api/internal/data"
	"center-api/internal/data/ent"
	"center-api/internal/data/ent/activity"
	"context"
)

type ActivityRepoImpl struct {
	Base[ent.Activity, do.ActivityDo, ent.ActivityQuery]
	db *data.Db
}

func NewActivityRepoImpl(db *data.Db) repository.ActivityRepo {
	return &ActivityRepoImpl{db: db}
}

// ToEntity 转换成实体
func (p *ActivityRepoImpl) ToEntity(pp *ent.Activity) *do.ActivityDo {
	return p.Base.ToEntity(pp)
}

// ToEntities 转换成实体
// 支持基本类型的值对象
func (p *ActivityRepoImpl) ToEntities(ps []*ent.Activity) []*do.ActivityDo {
	if ps == nil {
		return nil
	}
	// 使用循环，以免单个转换有特殊处理，要修改两个地方
	entities := make([]*do.ActivityDo, len(ps))
	for k, pp := range ps {
		entities[k] = p.ToEntity(pp)
	}
	return entities
}

func (p *ActivityRepoImpl) GetById(ctx context.Context, id int) *do.ActivityDo {
	row := p.db.GetDb(ctx).Activity.Query().Where(activity.ID(id)).FirstX(ctx)
	return p.ToEntity(row)
}
