public static RIdentity Db_GetOrCreate(this CsspIdentity packet, AtSackChristianService db, out bool created) { created = false; var rUser = ParseRUser(packet, db); var applicationRelease = ParseApplicationRelease(packet, db); string selector = $"{RIdentitysTable.RUserIdCol} = '{rUser.Id}' AND {RIdentitysTable.RApplicationReleaseIdCol} = '{applicationRelease.Id}'"; var identity = db.RIdentitys.Select(selector).FirstOrDefault() ?? db.RIdentitys.DownloadRows($"SELECT {db.RIdentitys.DefaultSqlSelector} FROM {RIdentitysTable.NativeName} WHERE {selector}").FirstOrDefault(); if (identity == null) { created = true; identity = db.RIdentitys.NewRow(); identity.ApplicationRelease = applicationRelease; identity.RUser = rUser; db.RIdentitys.Add(identity); applicationRelease.IdentitysCount++; foreach (var webUser in db.WebUsers.Where(x => x.IsAdmin)) { var accessRole = db.RIdentityAccessRoles.NewRow(); accessRole.WebUser = webUser; accessRole.RIdentity = identity; accessRole.Table.Add(accessRole); } } applicationRelease.Application.LatestRPacket = applicationRelease.LatestRPacket = rUser.LatestRPacket = rUser.RComputer.LatestRPacket = identity.LatestRPacket = DateTime.Now; identity.ReceivedRPackets++; rUser.ReceivedRPackets++; rUser.RComputer.ReceivedRPackets++; applicationRelease.ReceivedRPackets++; applicationRelease.Application.ReceivedRPackets++; return identity; }
/// <summary> /// Loads the complete data bundle of the current row into a target data set. /// <para>A data bundle is defined as a set of all rows inside a database which are connected via relations.</para> /// <para>The currently selected row is the root of the bundle</para> /// </summary> public void Copy_BundledData_Into_DataSet(AtSackChristianService target) { base.Copy_BundledData_Into_DataSet(target); }
private static Application ParseApplication(CsspIdentity packet, AtSackChristianService db) { var application = db.Applications.FindOrLoad(packet.ApplicationId); if (application != null) return application; application = db.Applications.NewRow(); packet.CopyInto(application); db.Applications.Add(application); return application; }
private static ApplicationRelease ParseApplicationRelease(CsspIdentity packet, AtSackChristianService db) { var selector = $"{ApplicationReleasesTable.ApplicationIdCol} = '{packet.ApplicationId}' AND {ApplicationReleasesTable.VersionCol} LIKE '{packet.ApplicationVersion}'"; var localReleases = db.ApplicationReleases.Select(selector); var appRelease = localReleases.Length == 0 ? null : localReleases[0]; if (appRelease != null) return appRelease; var remoteReleases = db.ApplicationReleases.DownloadRows($"SELECT {db.ApplicationReleases.DefaultSqlSelector} FROM {ApplicationReleasesTable.NativeName} WHERE {selector}"); appRelease = remoteReleases.Length == 0 ? null : remoteReleases[0]; if (appRelease != null) return appRelease; appRelease = db.ApplicationReleases.NewRow(); packet.CopyInto(appRelease); appRelease.Application = ParseApplication(packet, db); db.ApplicationReleases.Add(appRelease); return appRelease; }
private static RComputer ParseRComputer(CsspIdentity packet, AtSackChristianService db) { var computer = db.RComputers.FindOrLoad(packet.ComputerId); if (computer != null) return computer; computer = db.RComputers.NewRow(); packet.CopyInto(computer); db.RComputers.Add(computer); return computer; }
private static RUser ParseRUser(CsspIdentity packet, AtSackChristianService db) { var rUser = db.RUsers.FirstOrDefault(user => user.Sid.Equals(packet.UserSid, StringComparison.OrdinalIgnoreCase) && user.ComputerId == packet.ComputerId); if (rUser != null) return rUser; var rows = db.RUsers.DownloadRows($"SELECT {db.RUsers.DefaultSqlSelector} FROM {RUsersTable.NativeName} WHERE UPPER({RUsersTable.SidCol}) LIKE UPPER('{CsDbTableBase.SqlParam(packet.UserSid)}') AND {RUsersTable.ComputerIdCol} = '{packet.ComputerId}'"); if (rows.Length != 0) return rows[0]; rUser = db.RUsers.NewRow(); packet.CopyInto(rUser); rUser.RComputer = ParseRComputer(packet, db); db.RUsers.Add(rUser); return rUser; }