///<summary>Implements IUserManagemetService.GetOwnersDogs</summary>
        public List <DogForDisplayWithId> GetOwnersDogs(Guid ownersId)
        {
            using (var connection = new SqlConnection(_connectionString))
            {
                var query = "SELECT * FROM Dog WHERE Owner = @Id";

                var dogs = connection.Query <DogFromDB>(query, new { Id = ownersId }).ToList();

                var result = new List <DogForDisplayWithId>();

                foreach (var item in dogs)
                {
                    var dog = new DogForDisplayWithId();
                    dog.Id                 = item.Id;
                    dog.Name               = item.Name;
                    dog.Age                = item.Age;
                    dog.Gender             = item.Gender;
                    dog.Breed              = GetBreedById(connection, item.Breed);
                    dog.Owner              = item.Owner;
                    dog.Specifics          = item.Specifics;
                    dog.ProfilePicturePath = item.ProfilePicturePath;

                    result.Add(dog);
                }

                return(result);
            }
        }
        ///<summary>
        ///Implements IUserManagemetService.GetAllDogs
        ///</summary>
        public List <DogForDisplayWithId> GetAllDogs(int page, Guid currentOwnerId)
        {
            using (var connection = new SqlConnection(_connectionString))
            {
                var query = @"SELECT  * FROM  Dog
                        WHERE (NOT Owner=@Owner)
                        ORDER BY [Name]
                        OFFSET (@Page-1)*4 ROWS
                        FETCH NEXT 4 ROWS ONLY";

                var dogsFromDB = connection.Query <DogFromDB>(query, new { Page = page, Owner = currentOwnerId }).ToList();

                var result = new List <DogForDisplayWithId>();

                foreach (var item in dogsFromDB)
                {
                    var dog = new DogForDisplayWithId();
                    dog.Id                 = item.Id;
                    dog.Name               = item.Name;
                    dog.Age                = item.Age;
                    dog.Gender             = item.Gender;
                    dog.Breed              = GetBreedById(connection, item.Breed);
                    dog.Owner              = item.Owner;
                    dog.Specifics          = item.Specifics;
                    dog.ProfilePicturePath = item.ProfilePicturePath;

                    result.Add(dog);
                }

                return(result);
            }
        }
        /// <summary>
        /// Implements IUserManagemetService.GetLikedDogs
        /// </summary>
        public List <DogForDisplay> GetLikedDogs(int page, Guid currentOwnerId)
        {
            using (var connection = new SqlConnection(_connectionString))
            {
                string query = @"SELECT  Dog_ID2 FROM  LikedDogs
                        WHERE User_ID1=@Owner
                        ORDER BY [User_ID1]
                        OFFSET (@Page-1)*4 ROWS
                        FETCH NEXT 4 ROWS ONLY";

                var likedDogsGuids = connection.Query <Guid>(query, new
                {
                    Page  = page,
                    Owner = currentOwnerId
                }).ToList();

                List <DogForDisplay> likedDogs = new List <DogForDisplay>();

                foreach (var guid in likedDogsGuids)
                {
                    DogForDisplayWithId dogForDisplay = new DogForDisplayWithId();
                    string queryForOneDog             = @"SELECT  * FROM  Dog
                        WHERE Id=@Id";

                    var dog = connection.QueryFirstOrDefault <DogFromDB>(queryForOneDog, new { Id = guid });

                    dogForDisplay.Age                = dog.Age;
                    dogForDisplay.Breed              = GetBreedById(connection, dog.Breed);
                    dogForDisplay.Id                 = dog.Id;
                    dogForDisplay.Gender             = dog.Gender;
                    dogForDisplay.Name               = dog.Name;
                    dogForDisplay.Owner              = dog.Owner;
                    dogForDisplay.ProfilePicturePath = dog.ProfilePicturePath;
                    dogForDisplay.Specifics          = dog.Specifics;

                    likedDogs.Add(dogForDisplay);
                }

                return(likedDogs);
            }
        }
        ///<summary>
        ///Implements IUserManagemetService.FilterDogs
        ///</summary>
        public List <DogForDisplayWithId> FilterDogs(int page, Filters filters, Guid currentOwnerId)
        {
            using (var connection = new SqlConnection(_connectionString))
            {
                string cityId  = string.Empty;
                string breedId = string.Empty;

                if (!string.IsNullOrEmpty(filters.Breed))
                {
                    breedId = GetBreedId(connection, filters.Breed).ToString();
                }

                if (string.IsNullOrEmpty(filters.Gender))
                {
                    filters.Gender = string.Empty;
                }

                if (!string.IsNullOrEmpty(filters.City))
                {
                    cityId = GetCityId(connection, filters.City).ToString();
                }

                if ((filters.MinAge == 0 && filters.MaxAge == 0) || (filters.MinAge != 0 && filters.MaxAge == 0))
                {
                    filters.MaxAge = 30;
                }

                string query = @"SELECT  * FROM  Dog
                        WHERE (Age BETWEEN @MinAge and @MaxAge) AND (Breed LIKE '%' + @Breed ) AND (Gender LIKE '%' + @Gender ) AND (City LIKE '%' + @City) AND (NOT Owner=@Owner)
                        ORDER BY [Name]
                        OFFSET (@Page-1)*4 ROWS
                        FETCH NEXT 4 ROWS ONLY";

                var filteredDogs = connection.Query <DogFromDB>(query, new
                {
                    MinAge = filters.MinAge,
                    MaxAge = filters.MaxAge,
                    Breed  = breedId,
                    Gender = filters.Gender,
                    City   = cityId,
                    Owner  = currentOwnerId,
                    Page   = page
                }).ToList();

                if (filteredDogs.Count == 0)
                {
                    throw new NoEntriesException();
                }

                var result = new List <DogForDisplayWithId>();

                foreach (var item in filteredDogs)
                {
                    var dog = new DogForDisplayWithId();
                    dog.Id                 = item.Id;
                    dog.Name               = item.Name;
                    dog.Age                = item.Age;
                    dog.Gender             = item.Gender;
                    dog.Breed              = GetBreedById(connection, item.Breed);
                    dog.Owner              = item.Owner;
                    dog.Specifics          = item.Specifics;
                    dog.ProfilePicturePath = item.ProfilePicturePath;

                    result.Add(dog);
                }

                return(result);
            }
        }