diff --git a/Controllers/RvfController.cs b/Controllers/RvfController.cs index d71fe35..18d37c7 100644 --- a/Controllers/RvfController.cs +++ b/Controllers/RvfController.cs @@ -51,20 +51,36 @@ namespace rockfishCore.Controllers string LicenseKey = null; //check for a key for this dbid, first check licensed then check trial - var PurchasedLicense = await ct.License.Where(z => z.DbId == FetchRequestDbId && z.Fetched == false).FirstOrDefaultAsync(); + + + + + //NO! this is a bug, it causes older keys that weren't fetched to be sent over most recent keys that were fetched :( + //var PurchasedLicense = await ct.License.Where(z => z.DbId == FetchRequestDbId && z.Fetched == false).FirstOrDefaultAsync(); + + //Get the most recent licensed key for this dbid regardless if fetched or not, most recent is most recent and supersedes any other keys + var PurchasedLicense = await ct.License.OrderByDescending(z => z.Id).Where(z => z.DbId == FetchRequestDbId).FirstOrDefaultAsync(); if (PurchasedLicense != null) { - LicenseKey = PurchasedLicense.Key; - PurchasedLicense.Fetched = true; - PurchasedLicense.DtFetched = DateUtil.NowAsEpoch(); - await ct.SaveChangesAsync(); + //Found a recent purchased key, if not fetched then can be sent + if (!PurchasedLicense.Fetched) + { + LicenseKey = PurchasedLicense.Key; + PurchasedLicense.Fetched = true; + PurchasedLicense.DtFetched = DateUtil.NowAsEpoch(); + await ct.SaveChangesAsync(); + } } else { - //is there an Approved UnFetched trial request for this DB ID? - var req = await ct.TrialRequest.Where(z => z.DbId == FetchRequestDbId && z.DtFetched == null && z.Status == TrialRequest.TrialRequestStatus.Approved).FirstOrDefaultAsync(); - if (req == null) + //is there an Approved UnFetched trial request for this DB ID? + //var req = await ct.TrialRequest.Where(z => z.DbId == FetchRequestDbId && z.DtFetched == null && z.Status == TrialRequest.TrialRequestStatus.Approved).FirstOrDefaultAsync(); + + //only get most recent one if more than one + var req = await ct.TrialRequest.OrderByDescending(z => z.Id).Where(z => z.DbId == FetchRequestDbId && z.Status == TrialRequest.TrialRequestStatus.Approved).FirstOrDefaultAsync(); + if (req == null || req.DtFetched != null) { + //none found or at least the most recent one found has already been fetched return NotFound(); } LicenseKey = req.Key;