func()

in controllers/repository/chain/create_repository.go [25:64]


func (c *CreateRepository) ServeRequest(ctx context.Context, repository *nexusApi.NexusRepository) error {
	log := ctrl.LoggerFrom(ctx)
	log.Info("Start creating repository")

	repoData, err := nexus.GetRepoData(&repository.Spec)
	if err != nil {
		return fmt.Errorf("failed to get repository data: %w", err)
	}

	log = log.WithValues("type", repoData.Type, "format", repoData.Format, "name", repoData.Name)

	log.Info("Getting repository")

	_, err = c.nexusRepositoryApiClient.Get(ctx, repoData.Name, repoData.Format, repoData.Type)
	if err != nil {
		if errors.Is(err, nexus.ErrNotFound) {
			log.Info("Repository doesn't exist, creating new one")

			if err = c.nexusRepositoryApiClient.Create(ctx, repoData.Format, repoData.Type, repoData.Data); err != nil {
				return fmt.Errorf("failed to create repository: %w", err)
			}

			log.Info("Repository has been created")

			return nil
		}

		return fmt.Errorf("failed to get repository: %w", err)
	}

	log.Info("Updating repository")

	if err = c.nexusRepositoryApiClient.Update(ctx, repoData.Name, repoData.Format, repoData.Type, repoData.Data); err != nil {
		return fmt.Errorf("failed to update repository: %w", err)
	}

	log.Info("Repository has been updated")

	return nil
}