Files
tyapi-server/internal/domains/api/services/api_call_aggregate_service.go
2025-07-28 01:46:39 +08:00

70 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
}