diff --git a/pkg/store/dentistaStore.go b/pkg/store/dentistaStore.go index 69c61da..366549b 100644 --- a/pkg/store/dentistaStore.go +++ b/pkg/store/dentistaStore.go @@ -11,16 +11,51 @@ type dentistaStore struct { db *sql.DB } -func NewSqlStore(db *sql.DB) DentistaStoreInterface { +func NewDentistaStore(db *sql.DB) DentistaStore { return &dentistaStore{ db: db, } } +// GetAll devuelve todos los dentistas +func (s *dentistaStore) GetAll() ([]domain.Dentista, error) { + var dentistas []domain.Dentista + query := "SELECT id, apellido, nombre, matricula FROM dentistas;" + rows, err := s.db.Query(query) + if err != nil { + return nil, err + } + defer rows.Close() + + for rows.Next() { + var dentista domain.Dentista + err := rows.Scan(&dentista.Id, &dentista.Apellido, &dentista.Nombre, &dentista.Matricula) + if err != nil { + return nil, err + } + dentistas = append(dentistas, dentista) + } + + return dentistas, nil +} + +// Read devuelve un dentista por su id func (s *dentistaStore) Read(id int) (domain.Dentista, error) { var dentista domain.Dentista query := "SELECT id, apellido, nombre, matricula FROM dentistas WHERE id = ?;" - err := s.db.QueryRow(query, id).Scan(&dentista.ID, &dentista.Apellido, &dentista.Nombre, &dentista.Matricula) + err := s.db.QueryRow(query, id).Scan(&dentista.Id, &dentista.Apellido, &dentista.Nombre, &dentista.Matricula) + if err != nil { + return domain.Dentista{}, err + } + + return dentista, nil +} + +// ReadByMatricula devuelve un dentista por su matricula +func (s *dentistaStore) ReadByMatricula(matricula string) (domain.Dentista, error) { + var dentista domain.Dentista + query := "SELECT id, apellido, nombre, matricula FROM dentistas WHERE matricula = ?;" + err := s.db.QueryRow(query, matricula).Scan(&dentista.Id, &dentista.Apellido, &dentista.Nombre, &dentista.Matricula) if err != nil { return domain.Dentista{}, err } @@ -49,33 +84,60 @@ func (s *dentistaStore) Create(dentista domain.Dentista) error { return nil } -// Update actualiza un producto -func (s *dentistaStore) Update(product domain.Dentista) error { +// Update actualiza un dentista +func (s *dentistaStore) Update(dentista domain.Dentista) error { query := "UPDATE dentistas SET apellido = ?, nombre = ?, matricula = ? WHERE id = ?;" stmt, err := s.db.Prepare(query) if err != nil { log.Fatal(err) } - res, err := stmt.Exec(product.Apellido, product.Nombre, product.Matricula, product.ID) + res, err := stmt.Exec(dentista.Apellido, dentista.Nombre, dentista.Matricula, dentista.Id) if err != nil { log.Fatal(err) } - + _, err = res.RowsAffected() if err != nil { return err } - + return nil } -// Delete elimina un producto +// Delete elimina un dentista func (s *dentistaStore) Delete(id int) error { + query := "DELETE FROM dentistas WHERE id = ?;" + stmt, err := s.db.Prepare(query) + if err != nil { + log.Fatal(err) + } + + res, err := stmt.Exec(id) + if err != nil { + log.Fatal(err) + } + + _, err = res.RowsAffected() + if err != nil { + return err + } + return nil } -// Exists verifica si un producto existe -func (s *dentistaStore) Exists(codeValue string) bool { - return true +// Exists verifica si un dentista existe +func (s *dentistaStore) Exists(matricula string) bool { + var exists bool + var id int + + query := "SELECT id FROM dentistas WHERE matricula = ?;" + err := s.db.QueryRow(query, matricula).Scan(&id) + if err != nil { + return false + } + if id > 0 { + exists = true + } + return exists } diff --git a/pkg/store/interfaces.go b/pkg/store/interfaces.go index d60ae02..2b8578c 100644 --- a/pkg/store/interfaces.go +++ b/pkg/store/interfaces.go @@ -2,9 +2,13 @@ package store import "github.com/agomezjuan/desafio-integrador-go-ii/internal/domain" -type DentistaStoreInterface interface { +type DentistaStore interface { + // GetAll devuelve todos los dentistas + GetAll() ([]domain.Dentista, error) // Read devuelve un dentista por su id Read(id int) (domain.Dentista, error) + // ReadByMatricula devuelve un dentista por su matricula + ReadByMatricula(matricula string) (domain.Dentista, error) // Create agrega un nuevo dentista Create(dentista domain.Dentista) error // Update actualiza un dentista @@ -12,5 +16,32 @@ type DentistaStoreInterface interface { // Delete elimina un dentista Delete(id int) error // Exists verifica si un dentista existe - Exists(codeValue string) bool + Exists(matricula string) bool +} + +type PacienteStore interface { + // GetAll devuelve todos los pacientes + GetAll() ([]domain.Paciente, error) + // Read devuelve un paciente por su id + Read(id int) (domain.Paciente, error) + // ReadByDNI devuelve un paciente por su DNI + ReadByDNI(dni string) (domain.Paciente, error) + // Create agrega un nuevo paciente + Create(paciente domain.Paciente) error + // Update actualiza un paciente + Update(paciente domain.Paciente) error + // Delete elimina un paciente + Delete(id int) error + // Exists verifica si un paciente existe + Exists(dni string) bool +} + + +type StoreTurno interface { + Add(turno *domain.TurnoAbstract) (int, error) + Update(turno *domain.TurnoAbstract) error + Delete(id int) error + GetByID(id int) (*domain.Turno, error) + GetAll() ([]*domain.Turno, error) + GetByDNI(dni string) (*domain.TurnoResponse, error) }