-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapi.py
More file actions
221 lines (200 loc) · 8.14 KB
/
Copy pathapi.py
File metadata and controls
221 lines (200 loc) · 8.14 KB
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
from flask import Blueprint, request, jsonify, render_template, flash
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.exc import SQLAlchemyError
api = Blueprint('api', __name__)
db = SQLAlchemy()
# ---- Modelos ----
class Emprendimiento(db.Model):
__tablename__ = 'emprendimientos'
emprendimiento_id = db.Column(db.Integer, primary_key=True)
nombre = db.Column(db.String(100), nullable=False)
instagram = db.Column(db.String(50))
descripcion = db.Column(db.Text)
categoria = db.Column(db.String(50))
direccion = db.Column(db.String(200))
localidad = db.Column(db.String(50))
provincia = db.Column(db.String(50))
contacto = db.Column(db.String(50))
class Usuario(db.Model):
__tablename__ = 'usuarios'
usuarios_id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(100), nullable=False, unique=True)
contraseña = db.Column(db.String(255), nullable=False)
class Consultas(db.Model):
__tablename__ = 'consultas'
consulta_id = db.Column(db.Integer, primary_key=True)
nombre = db.Column(db.String(100), nullable=False)
apellido = db.Column(db.String(100), nullable=False)
email = db.Column(db.String(100), nullable=False)
asunto = db.Column(db.String(50))
mensaje = db.Column(db.Text)
# ---- Rutas de Emprendimientos ----
# Endpoint para agregar emprendimientos
@api.route('/emprendimientos', methods=['POST'])
def agregar_emprendimiento():
data = request.form
try:
nuevo_emprendimiento = Emprendimiento(**data)
db.session.add(nuevo_emprendimiento)
db.session.commit()
flash("Emprendimiento enviado exitosamente")
return render_template('subir_emp.html'), 201
except SQLAlchemyError as e:
db.session.rollback()
return jsonify({'message': 'Error al agregar emprendimiento', 'error': str(e)}), 400
# Endpoint para listar todos los emprendimientos
@api.route('/emprendimientos', methods=['GET'])
def listar_emprendimientos():
emprendimientos = Emprendimiento.query.all()
output = []
for emprendimiento in emprendimientos:
emprendimiento_data = {
'emprendimiento_id': emprendimiento.emprendimiento_id,
'nombre': emprendimiento.nombre,
'instagram': emprendimiento.instagram,
'descripcion': emprendimiento.descripcion,
'categoria': emprendimiento.categoria,
'direccion': emprendimiento.direccion,
'localidad': emprendimiento.localidad,
'provincia': emprendimiento.provincia,
'contacto': emprendimiento.contacto,
}
output.append(emprendimiento_data)
return jsonify({'emprendimientos': output}), 200
# Endpoint para mostrar un emprendimiento específico por su ID
@api.route('/emprendimientos/<int:id>', methods=['GET'])
def mostrar_emprendimiento(id):
emprendimiento = Emprendimiento.query.get(id)
if not emprendimiento:
return jsonify({'message': 'Emprendimiento no encontrado'}), 404
emprendimiento_data = {
'emprendimiento_id': emprendimiento.emprendimiento_id,
'nombre': emprendimiento.nombre,
'instagram': emprendimiento.instagram,
'descripcion': emprendimiento.descripcion,
'categoria': emprendimiento.categoria,
'direccion': emprendimiento.direccion,
'localidad': emprendimiento.localidad,
'provincia': emprendimiento.provincia,
'contacto': emprendimiento.contacto,
}
return jsonify(emprendimiento_data), 200
# Endpoint para actualizar un emprendimiento por su ID
@api.route('/emprendimientos/<int:id>', methods=['PUT'])
def actualizar_emprendimiento(id):
emprendimiento = Emprendimiento.query.get(id)
if not emprendimiento:
return jsonify({'message': 'Emprendimiento no encontrado'}), 404
data = request.json
try:
for key, value in data.items():
setattr(emprendimiento, key, value)
db.session.commit()
return jsonify({'message': 'Emprendimiento actualizado exitosamente'}), 200
except SQLAlchemyError as e:
db.session.rollback()
return jsonify({'message': 'Error al actualizar emprendimiento', 'error': str(e)}), 400
# Endpoint para eliminar un emprendimiento por su ID
@api.route('/emprendimientos/<int:id>', methods=['DELETE'])
def eliminar_emprendimiento(id):
emprendimiento = Emprendimiento.query.get(id)
if not emprendimiento:
return jsonify({'message': 'Emprendimiento no encontrado'}), 404
try:
db.session.delete(emprendimiento)
db.session.commit()
return jsonify({'message': 'Emprendimiento eliminado exitosamente'}), 202
except SQLAlchemyError as e:
db.session.rollback()
return jsonify({'message': 'Error al eliminar emprendimiento', 'error': str(e)}), 400
# ---- Rutas de Usuarios ----
# Endpoint para agregar usuarios
@api.route('/usuarios', methods=['POST'])
def agregar_usuario():
data = request.form
try:
nuevo_usuario = Usuario(**data)
db.session.add(nuevo_usuario)
db.session.commit()
flash("Usuario registrado exitosamente. Inicie sesión.")
return render_template('login.html'), 201
except SQLAlchemyError as e:
db.session.rollback()
flash("El email ya esta registrado. Inicie sesión.")
return render_template('login.html'), 400
# Endpoint para inicio de sesión
@api.route('/login', methods=['POST'])
def iniciar_sesion():
data = request.form
usuario = Usuario.query.filter_by(email=data['email']).first()
if usuario and usuario.contraseña == data['contraseña']:
return render_template('subir_emp.html'), 200
else:
flash("Usuario o contraseña incorrecta.")
return render_template('login.html'), 400
# Endpoint para listar todos los usuarios
@api.route('/usuarios/lista', methods=['GET'])
def listar_usuarios():
usuarios = Usuario.query.all()
output = []
for usuario in usuarios:
usuario_data = {
'usuarios_id': usuario.usuarios_id,
'email': usuario.email
}
output.append(usuario_data)
return jsonify({'usuarios': output}), 200
# Endpoint para mostrar un usuario específico por su ID
@api.route('/usuarios/<int:id>', methods=['GET'])
def mostrar_usuario(id):
usuario = Usuario.query.get(id)
if not usuario:
return jsonify({'message': 'Usuario no encontrado'}), 404
usuario_data = {
'usuarios_id': usuario.usuarios_id,
'email': usuario.email
}
return jsonify(usuario_data), 200
# Endpoint para actualizar un usuario por su ID
@api.route('/usuarios/<int:id>', methods=['PUT'])
def actualizar_usuario(id):
usuario = Usuario.query.get(id)
if not usuario:
return jsonify({'message': 'Usuario no encontrado'}), 404
data = request.json
try:
for key, value in data.items():
setattr(usuario, key, value)
db.session.commit()
return jsonify({'message': 'Usuario actualizado exitosamente'}), 200
except SQLAlchemyError as e:
db.session.rollback()
return jsonify({'message': 'Error al actualizar usuario', 'error': str(e)}), 400
# Endpoint para eliminar un usuario por su ID
@api.route('/usuarios/<int:id>', methods=['DELETE'])
def eliminar_usuario(id):
usuario = Usuario.query.get(id)
if not usuario:
return jsonify({'message': 'Usuario no encontrado'}), 404
try:
db.session.delete(usuario)
db.session.commit()
return jsonify({'message': 'Usuario eliminado exitosamente'}), 202
except SQLAlchemyError as e:
db.session.rollback()
return jsonify({'message': 'Error al eliminar usuario', 'error': str(e)}), 400
# ---- Rutas de Consultas ----
# Endpoint para agregar consultas
@api.route('/consultas', methods=['POST'])
def agregar_consulta():
data = request.form
try:
nueva_consulta = Consultas(**data)
db.session.add(nueva_consulta)
db.session.commit()
flash("Formulario enviado con éxito.")
return render_template('contacto.html'), 201
except SQLAlchemyError as e:
db.session.rollback()
flash("No se pudo enviar el formulario.")
return render_template('contacto.html'), 400