public async Task <FishingClubDto> GetFishingClubAsync()
        {
            var club = await _context.FishingClubs
                       .Include(c => c.Address)
                       .AsNoTracking()
                       .FirstOrDefaultAsync();

            if (club == null)
            {
                return(null);
            }

            var clubDto = new FishingClubDto()
            {
                Address       = club.Address,
                Name          = club.Name,
                Website       = club.Website,
                PictureUrl    = club.PictureUrl,
                FishingClubId = club.Id,
                ExternRuleUrl = club.ExternRuleUrl,
                Rules         = new List <Rules>(),
                FishSpecies   = new List <FishSpecies>()
            };
            var ruleDoc = new XmlDocument();

            ruleDoc.LoadXml(club.Rules);
            var rules = ruleDoc.SelectNodes("Regeln/Regel");

            if (rules != null)
            {
                foreach (XmlNode rule in rules)
                {
                    clubDto.Rules.Add(new Rules()
                    {
                        Rule = rule.InnerText
                    });
                }
            }

            var fishSpecieDoc = new XmlDocument();

            fishSpecieDoc.LoadXml(club.FishSpecies);
            var species = fishSpecieDoc.SelectNodes("FischArten/Fisch");

            if (species != null)
            {
                foreach (XmlNode specie in species)
                {
                    clubDto.FishSpecies.Add(new FishSpecies()
                    {
                        FishSpecie        = specie.SelectSingleNode("Name")?.InnerText,
                        MinimumSize       = specie.SelectSingleNode("Schonmass")?.InnerText,
                        ClosedSeasonStart = specie.SelectSingleNode("SchonZeitVon")?.InnerText,
                        ClosedSeasonEnd   = specie.SelectSingleNode("SchonZeitBis")?.InnerText
                    });
                }
            }
            return(clubDto);
        }
        public async Task <ActionResult <FishingClubDto> > Post(FishingClubDto fishingClubDto)
        {
            var checkInsert = await _fishingClubRepository.InsertAsync(fishingClubDto);

            if (checkInsert == null)
            {
                return(BadRequest("Fehler beim hinzufügen"));
            }
            return(Ok(checkInsert));
        }
        public async Task <FishingClubDto> InsertAsync(FishingClubDto fishingClubDto)
        {
            var newClub = new FishingClub()
            {
                Name          = fishingClubDto.Name,
                Website       = fishingClubDto.Website,
                PictureUrl    = fishingClubDto.PictureUrl,
                ExternRuleUrl = fishingClubDto.ExternRuleUrl,
                CreatedAt     = DateTime.Now,
                Address       = fishingClubDto.Address,
                Rules         = null,
                FishSpecies   = null,
            };

            if (fishingClubDto.Rules != null)
            {
                var ruleXml = new XDocument();
                var rule    = new XElement("Regeln");
                ruleXml.Add(rule);
                foreach (var item in fishingClubDto.Rules)
                {
                    rule.Add(new XElement("Regel", item.Rule));
                }

                newClub.Rules = ruleXml.ToString();
            }

            if (fishingClubDto.FishSpecies != null)
            {
                var fishSpecieXml = new XDocument();
                var fishSpecie    = new XElement("FischArten");
                fishSpecieXml.Add(fishSpecie);
                foreach (var item in fishingClubDto.FishSpecies)
                {
                    var fish = new XElement("Fisch");
                    fish.Add(new XElement("Name", item.FishSpecie));
                    fish.Add(new XElement("Schonmass", item.MinimumSize));
                    fish.Add(new XElement("SchonZeitVon", item.ClosedSeasonStart));
                    fish.Add(new XElement("SchonZeitBis", item.ClosedSeasonEnd));
                    fishSpecie.Add(fish);
                }

                newClub.FishSpecies = fishSpecieXml.ToString();
            }

            await _context.FishingClubs.AddAsync(newClub);

            var checkInsert = await Complete();

            if (checkInsert)
            {
                fishingClubDto.FishingClubId = newClub.Id;
            }
            return(checkInsert ? fishingClubDto : null);
        }
        public async Task <FishingClubDto> UpdateAsync(FishingClubDto fishingClubDto)
        {
            var club = await _context.FishingClubs
                       .Include(c => c.Address)
                       .FirstOrDefaultAsync(c => c.Id == fishingClubDto.FishingClubId);

            if (club == null)
            {
                return(null);
            }
            club.Address.City            = fishingClubDto.Address.City;
            club.Address.Phone           = fishingClubDto.Address.Phone;
            club.Address.Street          = fishingClubDto.Address.Street;
            club.Address.Title           = fishingClubDto.Address.Title;
            club.Address.Zip             = fishingClubDto.Address.Zip;
            club.Address.AddressAddition = fishingClubDto.Address.AddressAddition;
            club.Name          = fishingClubDto.Name;
            club.Website       = fishingClubDto.Website;
            club.PictureUrl    = fishingClubDto.PictureUrl;
            club.ExternRuleUrl = fishingClubDto.ExternRuleUrl;

            var ruleXml = new XDocument();
            var rule    = new XElement("Regeln");

            ruleXml.Add(rule);
            foreach (var item in fishingClubDto.Rules)
            {
                rule.Add(new XElement("Regel", item.Rule));
            }

            club.Rules = ruleXml.ToString();

            var fishSpecieXml = new XDocument();
            var fishSpecie    = new XElement("FischArten");

            fishSpecieXml.Add(fishSpecie);
            foreach (var item in fishingClubDto.FishSpecies)
            {
                var fish = new XElement("Fisch");
                fish.Add(new XElement("Name", item.FishSpecie));
                fish.Add(new XElement("Schonmass", item.MinimumSize));
                fish.Add(new XElement("SchonZeitVon", item.ClosedSeasonStart));
                fish.Add(new XElement("SchonZeitBis", item.ClosedSeasonEnd));
                fishSpecie.Add(fish);
            }

            club.FishSpecies = fishSpecieXml.ToString();

            var checkUpdate = await Complete();

            return(checkUpdate ? fishingClubDto : null);
        }
        public async Task <ActionResult <FishingClubDto> > Put(int id, FishingClubDto fishingClubDto)
        {
            if (id <= 0)
            {
                return(BadRequest("ID Fehler"));
            }
            var checkUpdate = await _fishingClubRepository.UpdateAsync(fishingClubDto);

            if (checkUpdate == null)
            {
                return(BadRequest("Fehler beim aktualisieren"));
            }
            return(Ok(checkUpdate));
        }