Пример #1
0
        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)));
        }
Пример #2
0
 public CreateUpdatePackageUseCase(IProjectRepository projectRepository, IUpdatePackageRepository updatePackageRepository,
                                   IAddUpdatePackageFilesAction addFilesAction)
 {
     _projectRepository       = projectRepository;
     _updatePackageRepository = updatePackageRepository;
     _addFilesAction          = addFilesAction;
 }
Пример #3
0
 public PatchUpdatePackageUseCase(IUpdatePackageRepository updatePackageRepository, IAddUpdatePackageFilesAction addFilesAction)
 {
     _updatePackageRepository = updatePackageRepository;
     _addFilesAction          = addFilesAction;
 }
Пример #4
0
        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());
        }
Пример #5
0
 public SearchUpdateUseCase(IUpdatePackageRepository repository)
 {
     _repository = repository;
 }