public async Task <JObject> ExportSystem(PKSystem system) { await using var conn = await _db.Obtain(); var o = new JObject(); o.Add("version", 2); o.Merge(system.ToJson(LookupContext.ByOwner)); var config = await _repo.GetSystemConfig(system.Id); o.Add("config", config.ToJson()); o.Add("accounts", new JArray((await _repo.GetSystemAccounts(system.Id)).ToList())); o.Add("members", new JArray((await _repo.GetSystemMembers(system.Id).ToListAsync()).Select(m => m.ToJson(LookupContext.ByOwner)))); var groups = await _repo.GetSystemGroups(system.Id).ToListAsync(); var j_groups = groups.Select(x => x.ToJson(LookupContext.ByOwner, needsMembersArray: true)).ToList(); if (groups.Count > 0) { var q = await _repo.GetGroupMemberInfo(groups.Select(x => x.Id)); foreach (var row in q) { ((JArray)j_groups.Find(x => x.Value <string>("id") == row.Group)["members"]).Add(row.Member); } } o.Add("groups", new JArray(j_groups)); var switches = new JArray(); var switchList = await _repo.GetPeriodFronters(conn, system.Id, null, Instant.FromDateTimeUtc(DateTime.MinValue.ToUniversalTime()), SystemClock.Instance.GetCurrentInstant()); foreach (var sw in switchList) { var s = new JObject(); s.Add("timestamp", sw.TimespanStart.FormatExport()); s.Add("members", new JArray(sw.Members.Select(m => m.Hid))); switches.Add(s); } o.Add("switches", switches); return(o); }
public JObject ToJson(LookupContext ctx, APIVersion v) { var o = new JObject(); o.Add("timestamp", Instant.FromUnixTimeMilliseconds((long)(Message.Mid >> 22) + 1420070400000).ToString()); o.Add("id", Message.Mid.ToString()); o.Add("original", Message.OriginalMid.ToString()); o.Add("sender", Message.Sender.ToString()); o.Add("channel", Message.Channel.ToString()); o.Add("guild", Message.Guild?.ToString()); o.Add("system", System?.ToJson(ctx, v)); o.Add("member", Member?.ToJson(ctx, v: v)); return(o); }