private async Task InsertNewDevice(DeviceNameModel device, DeviceType dbDeviceType, OsVersion dbOsVersion, AppVersion dbAppVersion, Language dbLanguage) { Device dvc = new Device(); // Insert to table first then get ID if not exists dvc.DeviceTypeID = dbDeviceType.DeviceTypeID; dvc.OsVersionID = dbOsVersion.VersionID; dvc.AppVersionID = dbAppVersion.VersionID; dvc.DeviceToken = device.DeviceToken; dvc.IsActive = true; dvc.DateLogin = DateTime.Now; dvc.DateLastLogin = DateTime.Now; dvc.PersonID = device.PersonID; dvc.DeviceOsID = device.DeviceOsID; dvc.DeviceLanguageID = dbLanguage.LanguageID; db.Device.Add(dvc); await db.SaveChangesAsync(); }
public async Task <object> PostDevice(DeviceNameModel device) { dynamic cResponse = new ExpandoObject(); try { if (!ModelState.IsValid) { cResponse.Result = "-1"; cResponse.Description = ModelState; return(JsonConvert.DeserializeObject(JsonConvert.SerializeObject(cResponse))); } // get DeviceType and create new if not exist DeviceType dbDeviceType = await db.DeviceType.Where(x => x.Name == device.DeviceTypeName).SingleOrDefaultAsync(); if (dbDeviceType == null) { dbDeviceType = new DeviceType(); dbDeviceType.Name = device.DeviceTypeName; db.DeviceType.Add(dbDeviceType); await db.SaveChangesAsync(); } // get OsVersion and create new if not exist OsVersion dbOsVersion = await db.OsVersion.Where(x => x.Name == device.OsVersionName).SingleOrDefaultAsync(); if (dbOsVersion == null) { dbOsVersion = new OsVersion(); dbOsVersion.Name = device.OsVersionName; db.OsVersion.Add(dbOsVersion); await db.SaveChangesAsync(); } // get OsVersion and create new if not exist AppVersion dbAppVersion = await db.AppVersion.Where(x => x.Name == device.AppVersionName).SingleOrDefaultAsync(); if (dbAppVersion == null) { dbAppVersion = new AppVersion(); dbAppVersion.Name = device.AppVersionName; string[] dateTime = device.AppVersionDatePublish.Split('-'); int year = Convert.ToInt16(dateTime[0]); int month = Convert.ToInt16(dateTime[1]); int day = Convert.ToInt16(dateTime[2]); DateTime dt = new DateTime(year, month, day); dbAppVersion.DatePublish = dt; db.AppVersion.Add(dbAppVersion); await db.SaveChangesAsync(); } Language dbLanguage = await db.Language.Where(x => x.Name == device.DeviceLanguageName).SingleOrDefaultAsync(); if (dbLanguage == null) { dbLanguage = new Language(); dbLanguage.Name = device.DeviceLanguageName; db.Language.Add(dbLanguage); } Device isFoundDevice = await db.Device.Where(x => x.DeviceToken == device.DeviceToken && x.IsActive == true && x.DeviceTypeID == dbDeviceType.DeviceTypeID).SingleOrDefaultAsync(); if (isFoundDevice != null) { bool isChanged = false; if (isFoundDevice.OsVersionID != dbOsVersion.VersionID) { isChanged = true; } if (isFoundDevice.AppVersionID != dbAppVersion.VersionID) { isChanged = true; } if (isFoundDevice.DeviceOsID != device.DeviceOsID) { isChanged = true; } if (isFoundDevice.DeviceLanguageID != dbLanguage.LanguageID) { isChanged = true; } if (isFoundDevice.PersonID != device.PersonID) { isChanged = true; } if (isChanged) { isFoundDevice.IsActive = false; await db.SaveChangesAsync(); await InsertNewDevice(device, dbDeviceType, dbOsVersion, dbAppVersion, dbLanguage); } else { isFoundDevice.DateLastLogin = DateTime.Now; await db.SaveChangesAsync(); } cResponse.Result = "0"; cResponse.Description = "Device Updated"; return(JsonConvert.DeserializeObject(JsonConvert.SerializeObject(cResponse))); } else { await InsertNewDevice(device, dbDeviceType, dbOsVersion, dbAppVersion, dbLanguage); cResponse.Result = "0"; cResponse.Description = "Device added to database"; return(JsonConvert.DeserializeObject(JsonConvert.SerializeObject(cResponse))); } } catch { cResponse.Result = "-1"; cResponse.Description = "Exception, your request could not be executed"; return(JsonConvert.DeserializeObject(JsonConvert.SerializeObject(cResponse))); } }