public async Task <bool> TryUnboxWaifus(ulong userid, List <Waifu> waifus, uint boxCost) { return(await _soraTransactor.TryDoInTransactionAsync(async context => { var user = await context.Users.FindAsync(userid).ConfigureAwait(false); if (user == null) { return false; } // check if enough money if (user.Coins < boxCost) { return false; } // Remove money user.Coins -= boxCost; // Give waifus foreach (var waifu in waifus) { var userWaifu = user.UserWaifus.FirstOrDefault(x => x.WaifuId == waifu.Id); if (userWaifu != null) { userWaifu.Count++; continue; } // otherwise we have to add it userWaifu = new UserWaifu(userid, waifu.Id, 1); user.UserWaifus.Add(userWaifu); } await context.SaveChangesAsync().ConfigureAwait(false); return true; }).ConfigureAwait(false)); }
private bool RemoveWaifuFromUser(User userdb, UserWaifu waifu) { userdb.UserWaifus.Remove(waifu); if (waifu.WaifuId != userdb.FavoriteWaifu) { return(false); } userdb.FavoriteWaifu = -1; return(true); }