-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmaterias.go
143 lines (124 loc) · 2.65 KB
/
materias.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package main
import (
"database/sql"
"errors"
"fmt"
)
type Materia struct {
IdMateria int
Descrip string
CantidadAlumnos int
}
func CrearMateria(m Materia) error {
if m.Descrip == "" {
return errors.New("error: descrip no puede ser nulo")
}
q := `INSERT INTO materias(descrip, cantidad_alumnos)
VALUES ($1,$2)`
db := GetConnection()
defer db.Close()
//Preparando datos nulos
cantidadNull := sql.NullInt32{}
if m.CantidadAlumnos == 0 {
cantidadNull.Valid = false
} else {
cantidadNull.Valid = true
cantidadNull.Int32 = int32(m.CantidadAlumnos)
}
//Preparando sentencia
stmt, err := db.Prepare(q)
if err != nil {
return err
}
r, err := stmt.Exec(&m.Descrip, &cantidadNull)
if err != nil {
return err
}
i, _ := r.RowsAffected()
if i != 1 {
return errors.New("error: mas de una fila afectada")
}
fmt.Println("Materia creada correctamente!")
return nil
}
func LeerMaterias() ([]Materia, error) {
q := `SELECT * FROM materias`
db := GetConnection()
defer db.Close()
cantidadNull := sql.NullInt32{}
stmt, err := db.Query(q)
if err != nil {
return nil, err
}
defer stmt.Close()
var materias []Materia
for stmt.Next() {
m := Materia{}
err := stmt.Scan(&m.IdMateria, &m.Descrip, &cantidadNull)
if err != nil {
return nil, err
}
m.CantidadAlumnos = int(cantidadNull.Int32)
materias = append(materias, m)
}
return materias, nil
}
func BorrarMateria(id int) error {
q := `DELETE FROM materias WHERE id_materia = $1`
db := GetConnection()
defer db.Close()
stmt, err := db.Prepare(q)
if err != nil {
return err
}
rows, err := stmt.Exec(id)
if err != nil {
return err
}
i, _ := rows.RowsAffected()
if i != 1 {
return errors.New("error: más de una fila modificada")
}
fmt.Println("Borrado correctamente")
return nil
}
func ActualizarMateria(e Materia) error {
var q string
q = `UPDATE materias
SET descrip = $1, cantidad_alumnos = $3
WHERE id_materia = $2`
db := GetConnection()
defer db.Close()
if e.CantidadAlumnos == 0 {
q = `UPDATE materias
SET descrip = $1
WHERE id_materia = $2`
}
stmt, err := db.Prepare(q)
if err != nil {
return err
}
if e.CantidadAlumnos == 0 {
rows, err := stmt.Exec(e.Descrip, e.IdMateria)
if err != nil {
return err
}
i, _ := rows.RowsAffected()
if i != 1 {
fmt.Println(i)
return errors.New("error: más de una fila modificada")
}
} else {
rows, err := stmt.Exec(e.Descrip, e.IdMateria, e.CantidadAlumnos)
if err != nil {
return err
}
i, _ := rows.RowsAffected()
if i != 1 {
fmt.Println(i)
return errors.New("error: más de una fila modificada")
}
}
fmt.Println("Actualizado correctamente")
return nil
}