Пример #1
0
        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));
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }