Files
api-generator/Generator/Services/PublicationService.cs
2025-10-11 13:08:09 +02:00

123 lines
4.0 KiB
C#

using Core;
using Core.Process;
using Core.SpecConfig;
using Generator.Repo;
namespace Generator.Services;
public class PublicationService
{
private readonly PublisherRepo _publisherRepo;
private readonly RepositoryService _repoService;
public PublicationService(
PublisherRepo pubRepo,
RepositoryService repoService)
{
_publisherRepo = pubRepo;
_repoService = repoService;
}
public async Task Publish(GenerationProcess process)
{
foreach (var task in process)
{
switch (task.Language)
{
case Language.Dotnet:
await PublishDotnet(task);
break;
case Language.Java:
await PublishJava(task);
break;
case Language.Javascript:
await PublishJavascript(task);
break;
default:
throw new ArgumentOutOfRangeException();
}
}
}
public async Task PublishDotnet(ProcessTask task)
{
while (task.Tasks.TryDequeue(out var file))
{
await PublishDotnet(file, task.GenerationType, task.PublishType);
}
}
public async Task PublishJava(ProcessTask task)
{
while (task.Tasks.TryDequeue(out var file))
{
await PublishJava(file, task.GenerationType, task.PublishType);
}
}
public async Task PublishJavascript(ProcessTask task)
{
while (task.Tasks.TryDequeue(out var file))
{
await PublishJavascript(file, task.GenerationType, task.PublishType);
}
}
public async Task PublishDotnet(ISpecFile file, GenerationType genType, PublishType pubType)
{
var data = await _repoService.GetVersions(Language.Dotnet, file.NugetPackage);
var package = data.FirstOrDefault(pd => pd.Version == file.Version);
if(pubType == PublishType.Force)
{
if (package != null) await _repoService.DeletePackage(package.Id);
await _publisherRepo.PublishDotnet(genType, file);
return;
}
if(pubType == PublishType.Safe)
{
if (package == null) await _publisherRepo.PublishDotnet(genType, file);
else Console.WriteLine($"The version {file.Version} of package {file.NugetPackage} already exists on the repository");
}
}
public async Task PublishJava(ISpecFile file, GenerationType genType, PublishType pubType)
{
var artifact = $"{file.Name}-api";
var data = await _repoService.GetVersions(Language.Java, artifact);
var package = data.FirstOrDefault(pd => pd.Version == file.Version);
if(pubType == PublishType.Force)
{
if (package != null) await _repoService.DeletePackage(package.Id);
await _publisherRepo.PublishJava(genType, file);
return;
}
if(pubType == PublishType.Safe)
{
if (package == null) await _publisherRepo.PublishJava(genType, file);
else Console.WriteLine($"The version {file.Version} of package {artifact} already exists on the repository");
}
}
public async Task PublishJavascript(ISpecFile file, GenerationType genType, PublishType pubType)
{
var data = await _repoService.GetVersions(Language.Javascript, file.NpmPackage);
var package = data.FirstOrDefault(pd => pd.Version == file.Version);
if(pubType == PublishType.Force)
{
if (package != null) await _repoService.DeletePackage(package.Id);
await _publisherRepo.PublishJavascript(genType, file);
return;
}
if(pubType == PublishType.Safe)
{
if (package == null) await _publisherRepo.PublishJavascript(genType, file);
else Console.WriteLine($"The version {file.Version} of package {file.NpmPackage} already exists on the repository");
}
}
}