package com.example.demo.data;

import com.example.demo.model.Employee;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;

import java.math.BigDecimal;
import java.util.List;

public interface EmployeesRepository extends JpaRepository<Employee, Integer> {
    List<Employee> findByLastName(String lastName);

    List<Employee> findByJob_JobId(String jobId);
    // ponieważ dostęp do pola z obiektu wyglądałby tak: emp.getJob().getJobId();

    List<Employee> findByDepartment_Location_City(String city);
    // ponieważ dostęp do pola z obiektu wyglądałby tak: emp.getDepartment().getLocation().getCity();

    @Query("SELECT emp FROM Employee emp WHERE emp.salary BETWEEN :min AND :max ORDER BY emp.salary")
    List<Employee> findBySalary(BigDecimal min, BigDecimal max);
    // W tym przypadku podaję własne zapytanie (w języku JPQL)

    @Query(nativeQuery=true,
            value="SELECT first_name || ' ' || last_name"
                    + " FROM employees"
                    + " WHERE extract(year FROM hire_date) = :year"
                    + " ORDER BY last_name")
    List<String> namesByYear(int year);
    // Tutaj przykład zapytania w czystym SQL, tak, jak obsługuje konkretna baza (tu PostgreSQL)


}
