Skip to content

Commit

Permalink
Se suben modificaciones de servicio y repositorio de paciente
Browse files Browse the repository at this point in the history
  • Loading branch information
danielacald committed Mar 28, 2024
1 parent 5e901d0 commit 072eec5
Show file tree
Hide file tree
Showing 2 changed files with 152 additions and 0 deletions.
143 changes: 143 additions & 0 deletions pkg/store/pacienteStore.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
package store

import (
"database/sql"
"log"

"github.com/agomezjuan/desafio-integrador-go-ii/internal/domain"
)

type pacienteStore struct {
db *sql.DB
}

func NewPacienteStore(db *sql.DB) PacienteStore {
return &pacienteStore{
db: db,
}
}

// GetAll devuelve todos los pacientes
func (s *pacienteStore) GetAll() ([]domain.Paciente, error) {
var pacientes []domain.Paciente
query := "SELECT * FROM pacientes;"
rows, err := s.db.Query(query)
if err != nil {
log.Fatal(err)
}
defer rows.Close()

for rows.Next() {
var paciente domain.Paciente
err := rows.Scan(&paciente.Id, &paciente.Apellido, &paciente.Nombre, &paciente.Domicilio, &paciente.DNI, &paciente.FechaAlta)
if err != nil {
log.Fatal(err)
}
pacientes = append(pacientes, paciente)
}

return pacientes, nil
}

// Read devuelve un paciente por su id
func (s *pacienteStore) Read(id int) (domain.Paciente, error) {
var paciente domain.Paciente
query := "SELECT id, apellido, nombre, dni FROM pacientes WHERE id = ?;"
err := s.db.QueryRow(query, id).Scan(&paciente.Id, &paciente.Apellido, &paciente.Nombre, &paciente.DNI, &paciente.FechaAlta, &paciente.Domicilio)
if err != nil {
return domain.Paciente{}, err
}

return paciente, nil
}

// ReadByDNI devuelve un paciente por su dni
func (s *pacienteStore) ReadByDNI(dni string) (domain.Paciente, error) {
var paciente domain.Paciente
query := "SELECT id, apellido, nombre, dni, fecha_alta, domicilio FROM pacientes WHERE dni = ?;"
err := s.db.QueryRow(query, dni).Scan(&paciente.Id, &paciente.Apellido, &paciente.Nombre, &paciente.DNI, &paciente.FechaAlta, &paciente.Domicilio)
if err != nil {
return domain.Paciente{}, err
}

return paciente, nil
}

// Create agrega un nuevo paciente
func (s *pacienteStore) Create(paciente domain.Paciente) error {
query := "INSERT INTO pacientes (apellido, nombre, dni, domicilio, fecha_alta) VALUES (?, ?, ?, ?, ?);"
stmt, err := s.db.Prepare(query)
if err != nil {
log.Fatal(err)
}

res, err := stmt.Exec(paciente.Apellido, paciente.Nombre, paciente.DNI, paciente.Domicilio, paciente.FechaAlta)
if err != nil {
log.Fatal(err)
}

_, err = res.RowsAffected()
if err != nil {
return err
}

return nil
}

// Update actualiza un paciente
func (s *pacienteStore) Update(paciente domain.Paciente) error {
query := "UPDATE pacientes SET apellido = ?, nombre = ?, dni = ? WHERE id = ?;"
stmt, err := s.db.Prepare(query)
if err != nil {
log.Fatal(err)
}

res, err := stmt.Exec(paciente.Apellido, paciente.Nombre, paciente.DNI, paciente.Id)
if err != nil {
log.Fatal(err)
}

_, err = res.RowsAffected()
if err != nil {
return err
}

return nil
}

// Delete elimina un paciente
func (s *pacienteStore) Delete(id int) error {
query := "DELETE FROM pacientes 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 paciente existe
func (s *pacienteStore) Exists(dni string) bool {
var exists bool
var id int
query := "SELECT id FROM pacientes WHERE dni = ?;"
row := s.db.QueryRow(query, dni)
err := row.Scan(&id)
if err != nil {
return false
}
if id > 0 {
exists = true
}
return exists
}
9 changes: 9 additions & 0 deletions pkg/web/response.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,12 @@ func Failure(ctx *gin.Context, status int, err error) {
Message: err.Error(),
})
}

// Not Found escribe una respuesta fallida en caso de no encontrar Datos
func NotFound(ctx *gin.Context) {
ctx.JSON(http.StatusNotFound, errorResponse{
Message: "Sin registros",
Status: http.StatusNotFound,
Code: http.StatusText(http.StatusNotFound),
})
}

0 comments on commit 072eec5

Please sign in to comment.