public async Task <EmployeeDetailsDto> GetDetailsByIdAsync(long employeeId)
        {
            string             cacheKey        = EmployeeCacheKeys.GetDetailsKey(employeeId);
            EmployeeDetailsDto employeeDetails = await _distributedCache.GetAsync <EmployeeDetailsDto>(cacheKey);

            if (employeeDetails == null)
            {
                Expression <Func <Employee, EmployeeDetailsDto> > selectExp = e => new EmployeeDetailsDto
                {
                    EmployeeId        = e.Id,
                    EmployeeName      = e.Name,
                    DepartmentId      = e.DepartmentId,
                    DepartmentName    = e.Department.Name,
                    DateOfBirth       = e.DateOfBirth,
                    Email             = e.Email,
                    PhoneNumber       = e.PhoneNumber,
                    IsActive          = e.IsActive,
                    CreatedAtUtc      = e.CreatedAtUtc,
                    LastModifiedAtUtc = e.LastModifiedAtUtc
                };

                employeeDetails = await _repository.GetByIdAsync(employeeId, selectExp);

                await _distributedCache.SetAsync <EmployeeDetailsDto>(cacheKey, employeeDetails);
            }

            return(employeeDetails);
        }
        public async Task <Employee> GetByIdAsync(long employeeId)
        {
            string   cacheKey = EmployeeCacheKeys.GetKey(employeeId);
            Employee employee = await _distributedCache.GetAsync <Employee>(cacheKey);

            if (employee == null)
            {
                employee = await _repository.GetByIdAsync <Employee>(employeeId);

                await _distributedCache.SetAsync <Employee>(cacheKey, employee);
            }

            return(employee);
        }