public async Task <Transfer?> GetTransfer(GetTransferParameters getTransferParameters) { var(transferToken, files, fields, containerUrl, accessTokenResult) = getTransferParameters; var(region, codename, _) = storageRepository.DecryptTransferToken(transferToken); var transferItem = await kontentRepository.GetKontentItem <TransferItem>(new GetKontentParameters { Codename = codename }); if (transferItem == default) { return(null); } var getContainerParameters = new GetContainerParameters { ContainerName = storageRepository.GetSafeContainerName(codename) }; var container = await storageRepository.GetContainer(getContainerParameters); return((files, fields, containerUrl, accessTokenResult) switch { (false, true, true, _)when accessTokenResult is NoAccessTokenResult => new Transfer { Region = coreContext.Region.Name, Name = transferItem.System.Name, Customer = transferItem.GetInfo().Customer, ContainerUrl = storageRepository.GetPublicContainerUrl(getContainerParameters), Fields = transferItem.GetFields(container.CompletedFields) }, (false, true, true, _)when accessTokenResult is ValidAccessTokenResult => new Transfer { Region = coreContext.Region.Name, Name = transferItem.System.Name, Codename = transferItem.System.Codename, Customer = transferItem.GetInfo().Customer, ContainerUrl = storageRepository.GetAdminContainerUrl(getContainerParameters), Fields = transferItem.GetFields(container.CompletedFields) }, (true, false, false, _)when accessTokenResult is ValidAccessTokenResult => new Transfer { Region = region, Name = transferItem.System.Name, Customer = transferItem.GetInfo().Customer, Files = await storageRepository.GetContainerFiles(new GetContainerParameters { ContainerName = storageRepository.GetSafeContainerName(codename) }) }, _ => throw new ArgumentException($"Combination of files ({files}), fields ({fields}), containerUrl ({containerUrl}), and accessTokenResult ({accessTokenResult?.GetType().Name}) is not valid.") });
private static bool GetValidGetTransferParameters( GetTransferParameters getTransferParameters, IAccessTokenResult accessTokenResult ) { var(_, files, fields, containerUrl, _) = getTransferParameters; return((files, fields, containerUrl, accessTokenResult) switch { (false, true, true, _)when accessTokenResult is NoAccessTokenResult => true, (false, true, true, _)when accessTokenResult is ValidAccessTokenResult => true, (true, false, false, _)when accessTokenResult is ValidAccessTokenResult => true, _ => false });