public async Task <ActionResult <PKMember> > GetMember(string hid) { var member = await _members.GetByHid(hid); if (member == null) { return(NotFound("Member not found.")); } return(Ok(member)); }
public async Task <PKMember> PeekMember() { var input = PeekArgument(); // Member references can have one or two forms, depending on // whether you're in a system or not: // - A member hid // - A textual name of a member *in your own system* // First, try member HID parsing: if (await _members.GetByHid(input) is PKMember memberByHid) { return(memberByHid); } // Then, if we have a system, try finding by member name in system if (_senderSystem != null && await _members.GetByName(_senderSystem, input) is PKMember memberByName) { return(memberByName); } // We didn't find anything, so we return null. return(null); }
public async Task <ImportResult> ImportSystem(DataFileSystem data, PKSystem system, ulong accountId) { // TODO: make atomic, somehow - we'd need to obtain one IDbConnection and reuse it // which probably means refactoring SystemStore.Save and friends etc var result = new ImportResult { AddedNames = new List <string>(), ModifiedNames = new List <string>() }; // If we don't already have a system to save to, create one if (system == null) { system = await _systems.Create(data.Name); } // Apply system info system.Name = data.Name; if (data.Description != null) { system.Description = data.Description; } if (data.Tag != null) { system.Tag = data.Tag; } if (data.AvatarUrl != null) { system.AvatarUrl = data.AvatarUrl; } if (data.TimeZone != null) { system.UiTz = data.TimeZone ?? "UTC"; } await _systems.Save(system); // Make sure to link the sender account, too await _systems.Link(system, accountId); // Apply members // TODO: parallelize? foreach (var dataMember in data.Members) { // If member's given an ID, we try to look up the member with the given ID PKMember member = null; if (dataMember.Id != null) { member = await _members.GetByHid(dataMember.Id); // ...but if it's a different system's member, we just make a new one anyway if (member != null && member.System != system.Id) { member = null; } } // Try to look up by name, too if (member == null) { member = await _members.GetByName(system, dataMember.Name); } // And if all else fails (eg. fresh import from Tupperbox, etc) we just make a member lol if (member == null) { member = await _members.Create(system, dataMember.Name); result.AddedNames.Add(dataMember.Name); } else { result.ModifiedNames.Add(dataMember.Name); } // Apply member info member.Name = dataMember.Name; if (dataMember.Description != null) { member.Description = dataMember.Description; } if (dataMember.Color != null) { member.Color = dataMember.Color; } if (dataMember.AvatarUrl != null) { member.AvatarUrl = dataMember.AvatarUrl; } if (dataMember.Prefix != null || dataMember.Suffix != null) { member.Prefix = dataMember.Prefix; member.Suffix = dataMember.Suffix; } if (dataMember.Birthday != null) { var birthdayParse = Formats.DateExportFormat.Parse(dataMember.Birthday); member.Birthday = birthdayParse.Success ? (LocalDate?)birthdayParse.Value : null; } await _members.Save(member); } _logger.Information("Imported system {System}", system.Id); // TODO: import switches, too? result.System = system; return(result); }