// Path: src/main/java/com/unb/tracker/model/Course.java
// @Entity // This tells Hibernate to make a table out of this class
// public class Course {
//     @Id
//     @GeneratedValue(strategy = GenerationType.AUTO)
//     private Long id;
//     private Date startDate;
//     private String name;
//     private String section;
//     private Integer rows;
//     private Integer cols;
// 
//     @OneToMany(cascade = CascadeType.ALL, mappedBy = "course", fetch = FetchType.EAGER)
//     @JsonManagedReference
//     private List<Seat> seats;
// 
//     @ManyToOne(fetch = FetchType.EAGER)
//     private User instructor;
// 
//     @Transient
//     private Long courseGridReuseID;
// 
//     public User getInstructor() {
//         return instructor;
//     }
// 
//     public void setInstructor(User instructor) {
//         this.instructor = instructor;
//     }
// 
//     public String getSection() {
//         return section;
//     }
// 
//     public void setSection(String section) {
//         this.section = section;
//     }
// 
//     public Integer getRows() {
//         return rows;
//     }
// 
//     public void setRows(Integer rows) {
//         this.rows = rows;
//     }
// 
//     public Integer getCols() {
//         return cols;
//     }
// 
//     public void setCols(Integer cols) {
//         this.cols = cols;
//     }
// 
//     public List<Seat> getSeats() {
//         return seats;
//     }
// 
//     public void setSeats(List<Seat> seats) {
//         this.seats = seats;
//     }
// 
//     public Long getId() {
//         return id;
//     }
// 
//     public void setId(Long id) {
//         this.id = id;
//     }
// 
//     public Date getStartDate() {
//         return startDate;
//     }
// 
//     public void setStartDate(Date startDate) {
//         this.startDate = startDate;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     @Transient
//     public Long getCourseGridReuseID() {
//         return courseGridReuseID;
//     }
// 
//     @Transient
//     public void setCourseGridReuseID(Long courseGridReuseID) {
//         this.courseGridReuseID = courseGridReuseID;
//     }
// 
//     public void removeSeats(List<Seat> seatsToRemove) {
//         seats.removeAll(seatsToRemove);
//         for(Seat s : seatsToRemove) {
//             s.setCourse(null);
//         }
//     }
// 
//     public List<Seat> getOutOfBoundsSeats(int rows, int cols) {
//         List<Seat> seatsToRemove = new ArrayList<>();
//         if(seats != null) {
//             for(Seat s : seats) {
//                 if(s.getRow() >= rows || s.getCol() >= cols) {
//                     seatsToRemove.add(s);
//                 }
//             }
//         }
//         return seatsToRemove;
//     }
// }
// 
// Path: src/main/java/com/unb/tracker/repository/CourseRepository.java
// public interface CourseRepository extends CrudRepository<Course, Long> {
//     public List<Course> findByInstructorUsernameAndNameAndSection(String username, String name, String section);
// 
//     public List<Course> findByInstructorUsernameAndName(String username, String name);
// 
//     @Query(value = "SELECT * FROM course WHERE course.name LIKE CONCAT('%',:pname,'%') OR course.section LIKE CONCAT('%',:pname,'%') LIMIT 10", nativeQuery = true)
//     public List<Course> findByPartialName(@Param("pname")String partialName);
// 
// }


import com.unb.tracker.model.Course;
import com.unb.tracker.repository.CourseRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
package com.unb.tracker.service;



@Service
public class CourseServiceImpl implements CourseService {
    @Autowired
    private CourseRepository courseRepository;

    @Override
// Path: src/main/java/com/unb/tracker/model/Course.java
// @Entity // This tells Hibernate to make a table out of this class
// public class Course {
//     @Id
//     @GeneratedValue(strategy = GenerationType.AUTO)
//     private Long id;
//     private Date startDate;
//     private String name;
//     private String section;
//     private Integer rows;
//     private Integer cols;
// 
//     @OneToMany(cascade = CascadeType.ALL, mappedBy = "course", fetch = FetchType.EAGER)
//     @JsonManagedReference
//     private List<Seat> seats;
// 
//     @ManyToOne(fetch = FetchType.EAGER)
//     private User instructor;
// 
//     @Transient
//     private Long courseGridReuseID;
// 
//     public User getInstructor() {
//         return instructor;
//     }
// 
//     public void setInstructor(User instructor) {
//         this.instructor = instructor;
//     }
// 
//     public String getSection() {
//         return section;
//     }
// 
//     public void setSection(String section) {
//         this.section = section;
//     }
// 
//     public Integer getRows() {
//         return rows;
//     }
// 
//     public void setRows(Integer rows) {
//         this.rows = rows;
//     }
// 
//     public Integer getCols() {
//         return cols;
//     }
// 
//     public void setCols(Integer cols) {
//         this.cols = cols;
//     }
// 
//     public List<Seat> getSeats() {
//         return seats;
//     }
// 
//     public void setSeats(List<Seat> seats) {
//         this.seats = seats;
//     }
// 
//     public Long getId() {
//         return id;
//     }
// 
//     public void setId(Long id) {
//         this.id = id;
//     }
// 
//     public Date getStartDate() {
//         return startDate;
//     }
// 
//     public void setStartDate(Date startDate) {
//         this.startDate = startDate;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     @Transient
//     public Long getCourseGridReuseID() {
//         return courseGridReuseID;
//     }
// 
//     @Transient
//     public void setCourseGridReuseID(Long courseGridReuseID) {
//         this.courseGridReuseID = courseGridReuseID;
//     }
// 
//     public void removeSeats(List<Seat> seatsToRemove) {
//         seats.removeAll(seatsToRemove);
//         for(Seat s : seatsToRemove) {
//             s.setCourse(null);
//         }
//     }
// 
//     public List<Seat> getOutOfBoundsSeats(int rows, int cols) {
//         List<Seat> seatsToRemove = new ArrayList<>();
//         if(seats != null) {
//             for(Seat s : seats) {
//                 if(s.getRow() >= rows || s.getCol() >= cols) {
//                     seatsToRemove.add(s);
//                 }
//             }
//         }
//         return seatsToRemove;
//     }
// }
// 
// Path: src/main/java/com/unb/tracker/repository/CourseRepository.java
// public interface CourseRepository extends CrudRepository<Course, Long> {
//     public List<Course> findByInstructorUsernameAndNameAndSection(String username, String name, String section);
// 
//     public List<Course> findByInstructorUsernameAndName(String username, String name);
// 
//     @Query(value = "SELECT * FROM course WHERE course.name LIKE CONCAT('%',:pname,'%') OR course.section LIKE CONCAT('%',:pname,'%') LIMIT 10", nativeQuery = true)
//     public List<Course> findByPartialName(@Param("pname")String partialName);
// 
// }


// Path: src/main/java/com/unb/tracker/service/CourseServiceImpl.java
import com.unb.tracker.model.Course;
import com.unb.tracker.repository.CourseRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

package com.unb.tracker.service;



@Service
public class CourseServiceImpl implements CourseService {
    @Autowired
    private CourseRepository courseRepository;

    @Override
    public void save(Course course) {