2023-12-21 06:28:53 +00:00
|
|
|
package app
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"gitea.dwysokinski.me/twhelp/corev3/internal/domain"
|
|
|
|
)
|
|
|
|
|
|
|
|
type DataSyncService struct {
|
2024-01-03 08:59:24 +00:00
|
|
|
versionSvc *VersionService
|
|
|
|
serverSvc *ServerService
|
|
|
|
serverPub ServerPublisher
|
|
|
|
ennoblementPub EnnoblementPublisher
|
2023-12-21 06:28:53 +00:00
|
|
|
}
|
|
|
|
|
2024-01-03 08:59:24 +00:00
|
|
|
func NewDataSyncService(
|
|
|
|
versionSvc *VersionService,
|
|
|
|
serverSvc *ServerService,
|
|
|
|
serverPub ServerPublisher,
|
|
|
|
ennoblementPub EnnoblementPublisher,
|
|
|
|
) *DataSyncService {
|
|
|
|
return &DataSyncService{
|
|
|
|
versionSvc: versionSvc,
|
|
|
|
serverSvc: serverSvc,
|
|
|
|
serverPub: serverPub,
|
|
|
|
ennoblementPub: ennoblementPub,
|
|
|
|
}
|
2023-12-21 06:28:53 +00:00
|
|
|
}
|
|
|
|
|
2024-01-14 11:57:32 +00:00
|
|
|
func (svc *DataSyncService) Sync(ctx context.Context) error {
|
2023-12-21 06:28:53 +00:00
|
|
|
versions, err := svc.versionSvc.List(ctx, domain.NewListVersionsParams())
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
payloads := make([]domain.SyncServersCmdPayload, 0, len(versions))
|
|
|
|
|
|
|
|
for _, v := range versions {
|
|
|
|
p, payloadErr := domain.NewSyncServersCmdPayload(v.Code(), v.URL())
|
|
|
|
if payloadErr != nil {
|
2023-12-30 08:38:32 +00:00
|
|
|
return fmt.Errorf("%s: couldn't construct domain.SyncServersCmdPayload: %w", v.Code(), payloadErr)
|
2023-12-21 06:28:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
payloads = append(payloads, p)
|
|
|
|
}
|
|
|
|
|
2023-12-30 08:38:32 +00:00
|
|
|
return svc.serverPub.CmdSync(ctx, payloads...)
|
2023-12-21 06:28:53 +00:00
|
|
|
}
|
|
|
|
|
2024-01-14 11:57:32 +00:00
|
|
|
func (svc *DataSyncService) SyncEnnoblements(ctx context.Context) error {
|
2024-01-03 08:59:24 +00:00
|
|
|
versions, err := svc.versionSvc.List(ctx, domain.NewListVersionsParams())
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, v := range versions {
|
2024-01-14 11:57:32 +00:00
|
|
|
if err = svc.syncEnnoblementsForVersion(ctx, v); err != nil {
|
2024-01-03 08:59:24 +00:00
|
|
|
return fmt.Errorf("%s: %w", v.Code(), err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2024-01-14 11:57:32 +00:00
|
|
|
func (svc *DataSyncService) syncEnnoblementsForVersion(ctx context.Context, v domain.Version) error {
|
2024-01-03 08:59:24 +00:00
|
|
|
servers, err := svc.serverSvc.ListAllOpen(ctx, v.Code())
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
payloads := make([]domain.SyncEnnoblementsCmdPayload, 0, len(servers))
|
|
|
|
|
|
|
|
for _, s := range servers {
|
|
|
|
p, payloadErr := domain.NewSyncEnnoblementsCmdPayload(s.Key(), s.URL(), s.VersionCode())
|
|
|
|
if payloadErr != nil {
|
|
|
|
return fmt.Errorf("%s: couldn't construct domain.SyncEnnoblementsCmdPayload: %w", s.Key(), payloadErr)
|
|
|
|
}
|
|
|
|
|
|
|
|
payloads = append(payloads, p)
|
|
|
|
}
|
|
|
|
|
|
|
|
return svc.ennoblementPub.CmdSync(ctx, payloads...)
|
2023-12-21 06:28:53 +00:00
|
|
|
}
|