70 lines
2.0 KiB
Go
70 lines
2.0 KiB
Go
package services
|
||
|
||
import (
|
||
"context"
|
||
"fmt"
|
||
"tyapi-server/internal/domains/api/entities"
|
||
repo "tyapi-server/internal/domains/api/repositories"
|
||
|
||
"gorm.io/gorm"
|
||
)
|
||
|
||
// ApiCallAggregateService 聚合服务,管理ApiCall生命周期
|
||
type ApiCallAggregateService interface {
|
||
CreateApiCall(accessId, requestParams, clientIp string) (*entities.ApiCall, error)
|
||
LoadApiCall(ctx context.Context, id string) (*entities.ApiCall, error)
|
||
SaveApiCall(ctx context.Context, call *entities.ApiCall) error
|
||
}
|
||
|
||
type ApiCallAggregateServiceImpl struct {
|
||
apiUserRepo repo.ApiUserRepository
|
||
apiCallRepo repo.ApiCallRepository
|
||
}
|
||
|
||
func NewApiCallAggregateService(apiUserRepo repo.ApiUserRepository, apiCallRepo repo.ApiCallRepository) ApiCallAggregateService {
|
||
return &ApiCallAggregateServiceImpl{
|
||
apiUserRepo: apiUserRepo,
|
||
apiCallRepo: apiCallRepo,
|
||
}
|
||
}
|
||
|
||
// NewApiCall 创建ApiCall
|
||
func (s *ApiCallAggregateServiceImpl) CreateApiCall(accessId, requestParams, clientIp string) (*entities.ApiCall, error) {
|
||
return entities.NewApiCall(accessId, requestParams, clientIp)
|
||
}
|
||
|
||
// GetApiCallById 查询ApiCall
|
||
func (s *ApiCallAggregateServiceImpl) LoadApiCall(ctx context.Context, id string) (*entities.ApiCall, error) {
|
||
return s.apiCallRepo.FindById(ctx, id)
|
||
}
|
||
|
||
// SaveApiCall 保存ApiCall
|
||
func (s *ApiCallAggregateServiceImpl) SaveApiCall(ctx context.Context, call *entities.ApiCall) error {
|
||
// 先尝试查找现有记录
|
||
existingCall, err := s.apiCallRepo.FindById(ctx, call.ID)
|
||
if err != nil {
|
||
if err == gorm.ErrRecordNotFound {
|
||
// 记录不存在,执行创建
|
||
err = s.apiCallRepo.Create(ctx, call)
|
||
if err != nil {
|
||
return fmt.Errorf("创建ApiCall失败: %w", err)
|
||
}
|
||
return nil
|
||
}
|
||
// 其他错误
|
||
return fmt.Errorf("查询ApiCall失败: %w", err)
|
||
}
|
||
|
||
// 记录存在,执行更新
|
||
if existingCall != nil {
|
||
err = s.apiCallRepo.Update(ctx, call)
|
||
if err != nil {
|
||
return fmt.Errorf("更新ApiCall失败: %w", err)
|
||
}
|
||
return nil
|
||
}
|
||
|
||
// 理论上不会到达这里,但为了安全起见
|
||
return s.apiCallRepo.Create(ctx, call)
|
||
}
|