41 lines
876 B
Go
41 lines
876 B
Go
package app
|
|
|
|
import (
|
|
"context"
|
|
|
|
"gitea.dwysokinski.me/twhelp/corev3/internal/domain"
|
|
)
|
|
|
|
type TribeChangeRepository interface {
|
|
// Create persists tribe changes in a store (e.g. Postgres).
|
|
// Duplicates are ignored.
|
|
Create(ctx context.Context, params ...domain.CreateTribeChangeParams) error
|
|
}
|
|
|
|
type TribeChangeService struct {
|
|
repo TribeChangeRepository
|
|
}
|
|
|
|
func NewTribeChangeService(repo TribeChangeRepository) *TribeChangeService {
|
|
return &TribeChangeService{repo: repo}
|
|
}
|
|
|
|
const (
|
|
tribeChangeChunkSize = 500
|
|
)
|
|
|
|
func (svc *TribeChangeService) Create(ctx context.Context, params ...domain.CreateTribeChangeParams) error {
|
|
for i := 0; i < len(params); i += tribeChangeChunkSize {
|
|
end := i + tribeChangeChunkSize
|
|
if end > len(params) {
|
|
end = len(params)
|
|
}
|
|
|
|
if err := svc.repo.Create(ctx, params[i:end]...); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|