private static async Task <UpdatePackage?> FindNearestUpdatePackage(int projectId, SemVersion version, IUpdatePackageRepository repository) { // select all packages with the same binary version var relevantVersions = await repository.GetAllBySpecs(new ProjectSpec(projectId), new HasSameBinaryVersionSpec(version)); if (relevantVersions.Any()) { // find the last package that is below our version var previousPackage = relevantVersions.OrderBy(x => x.OrderNumber) .TakeWhile(x => x.VersionInfo.SemVersion < version).LastOrDefault(); if (previousPackage != null) { return(previousPackage); } // as the lowest update package with the same binary version comes after our version, // we know that we need to select the highest update package with a binary version below } // it is the highest update package below the binary version (as no packages with this binary version exist) return(await repository.GetLatestBySpecs(new ProjectSpec(projectId), new HasLowerBinaryVersionSpec(version))); }
public CreateUpdatePackageUseCase(IProjectRepository projectRepository, IUpdatePackageRepository updatePackageRepository, IAddUpdatePackageFilesAction addFilesAction) { _projectRepository = projectRepository; _updatePackageRepository = updatePackageRepository; _addFilesAction = addFilesAction; }
public PatchUpdatePackageUseCase(IUpdatePackageRepository updatePackageRepository, IAddUpdatePackageFilesAction addFilesAction) { _updatePackageRepository = updatePackageRepository; _addFilesAction = addFilesAction; }
public async Task <ActionResult> PatchUpdatePackage(JsonPatchDocument <UpdatePackageDto> patchDocument, int projectId, string version, [FromQuery] string?password, [FromServices] IPatchUpdatePackageUseCase useCase, [FromServices] IUpdatePackageRepository repo, [FromServices] IMapper mapper) { // find update package var updatePackage = await repo.GetFirstOrDefaultBySpecs(new ProjectSpec(projectId), new VersionSpec(version), new IncludeAllSpec()); if (updatePackage == null) { return(ResourceNotFoundError.UpdatePackageNotFound(projectId, version).ToActionResult()); } // apply patch to dto copy var updatePackageDto = mapper.Map <UpdatePackageDto>(updatePackage); patchDocument.ApplyTo(updatePackageDto); // validate new state var validator = new UpdatePackageValidator(); var result = validator.Validate(updatePackageDto); if (!result.IsValid) { return(result.ToActionResult()); } var updateInfo = GetInfo(updatePackageDto); await useCase.Handle(new PatchUpdatePackageRequest(projectId, updatePackage.VersionInfo.SemVersion, updateInfo, password)); if (useCase.HasError) { return(useCase.ToActionResult()); } return(Ok()); }
public SearchUpdateUseCase(IUpdatePackageRepository repository) { _repository = repository; }