public async Task <ActionResult <InstallerPkg> > Put(InstallerPkg installerPkg) { RCAddResult result = await AddInstallerPackageAsync(installerPkg); switch (result) { case RCAddResult.Success: return(installerPkg); case RCAddResult.Failure: return(new BadRequestResult()); case RCAddResult.KeyAlreadyExists: return(new ConflictResult()); default: return(new BadRequestResult()); } }
private async Task <RCAddResult> AddInstallerPackageAsync(InstallerPkg pkg) { IReliableDictionary <string, InstallerPkg> packagesDictionary = await this._statemanager.GetOrAddAsync <IReliableDictionary <string, InstallerPkg> >("packages"); using (ITransaction tx = _statemanager.CreateTransaction()) { var result = await packagesDictionary.TryGetValueAsync(tx, pkg.Name); if (result.HasValue) { return(RCAddResult.KeyAlreadyExists); } if (!await packagesDictionary.TryAddAsync(tx, pkg.Name, pkg)) { return(RCAddResult.Failure); } await tx.CommitAsync(); } return(RCAddResult.Success); }