Spaces:
Sleeping
Sleeping
Upload 23 files
Browse files- .gitignore +1 -0
- Dockerfile +15 -0
- __pycache__/app.cpython-311.pyc +0 -0
- app.py +37 -0
- database/__init__.py +1 -0
- database/__pycache__/__init__.cpython-311.pyc +0 -0
- database/__pycache__/conexion.cpython-311.pyc +0 -0
- database/__pycache__/database.cpython-311.pyc +0 -0
- database/academia - copia.db +0 -0
- database/academia.db +0 -0
- database/database.py +13 -0
- estructura_de_BD.sql +52 -0
- generar_tablas.py +16 -0
- insertar_datos.sql +138 -0
- library/__pycache__/librerias.cpython-311.pyc +0 -0
- library/librerias.py +21 -0
- models/__pycache__/schema.cpython-311.pyc +0 -0
- models/schema.py +137 -0
- requirements.txt +2 -0
- routers/__pycache__/api.cpython-311.pyc +0 -0
- routers/__pycache__/routers.cpython-311.pyc +0 -0
- routers/api.py +194 -0
- routers/routers.py +1 -0
.gitignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
__pycache__/
|
Dockerfile
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Usa una imagen base de Python
|
| 2 |
+
FROM python:3.9
|
| 3 |
+
# Establece el directorio de trabajo
|
| 4 |
+
WORKDIR /code
|
| 5 |
+
|
| 6 |
+
# Copia los archivos necesarios al contenedor
|
| 7 |
+
COPY ./requirements.txt /code/requirements.txt
|
| 8 |
+
RUN pip install --no-cache-dir -r /code/requirements.txt
|
| 9 |
+
|
| 10 |
+
COPY . .
|
| 11 |
+
|
| 12 |
+
RUN chmod -R 777 /code
|
| 13 |
+
|
| 14 |
+
# Comando para ejecutar la aplicaci贸n
|
| 15 |
+
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
|
__pycache__/app.cpython-311.pyc
ADDED
|
Binary file (1.61 kB). View file
|
|
|
app.py
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# uvicorn app:app --host localhost --port 7860 --reload
|
| 2 |
+
from library.librerias import *
|
| 3 |
+
from routers.routers import *
|
| 4 |
+
|
| 5 |
+
app = FastAPI(
|
| 6 |
+
title="API de la Academia Stephen Hawking",
|
| 7 |
+
description="Esta es la API de la academia Stephen Hawking, dedicada a la preparaci贸n preuniversitaria. Aqu铆 se pueden realizar operaciones CRUD para gestionar estudiantes, profesores, cursos y m谩s.",
|
| 8 |
+
version="1.0.0",
|
| 9 |
+
openapi_url="/stephen-hawking-openapi.json",
|
| 10 |
+
docs_url="/stephen-hawking-docs",
|
| 11 |
+
redoc_url="/stephen-hawking-redoc",
|
| 12 |
+
contact={
|
| 13 |
+
"name": "Academia Stephen Hawking",
|
| 14 |
+
"url": "https://www.academiashawking.com",
|
| 15 |
+
"email": "contacto@academiashawking.com",
|
| 16 |
+
},
|
| 17 |
+
license_info={"name": "MIT", "url": "https://opensource.org/licenses/MIT"},
|
| 18 |
+
)
|
| 19 |
+
# CORS
|
| 20 |
+
app.add_middleware(
|
| 21 |
+
CORSMiddleware,
|
| 22 |
+
allow_origins=["*"],
|
| 23 |
+
allow_credentials=True,
|
| 24 |
+
allow_methods=["*"],
|
| 25 |
+
allow_headers=["*"],
|
| 26 |
+
)
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
# saludo
|
| 30 |
+
@app.get("/", summary="Saludo", description="Saludo de la API")
|
| 31 |
+
def read_root():
|
| 32 |
+
return {"message": "Bienvenido a la API de la academia Stephen Hawking"}
|
| 33 |
+
|
| 34 |
+
|
| 35 |
+
# Routers
|
| 36 |
+
|
| 37 |
+
app.router.include_router(api.router)
|
database/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
from .database import SessionLocal, engine, Base
|
database/__pycache__/__init__.cpython-311.pyc
ADDED
|
Binary file (268 Bytes). View file
|
|
|
database/__pycache__/conexion.cpython-311.pyc
ADDED
|
Binary file (2.81 kB). View file
|
|
|
database/__pycache__/database.cpython-311.pyc
ADDED
|
Binary file (671 Bytes). View file
|
|
|
database/academia - copia.db
ADDED
|
Binary file (28.7 kB). View file
|
|
|
database/academia.db
ADDED
|
Binary file (28.7 kB). View file
|
|
|
database/database.py
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from sqlalchemy import create_engine
|
| 2 |
+
from sqlalchemy.orm import sessionmaker
|
| 3 |
+
from sqlalchemy.ext.declarative import declarative_base
|
| 4 |
+
|
| 5 |
+
# Configurar la conexi贸n a la base de datos SQLite
|
| 6 |
+
DATABASE_URL = "sqlite:///database/academia.db"
|
| 7 |
+
engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False})
|
| 8 |
+
|
| 9 |
+
# Crear una sesi贸n local para interactuar con la base de datos
|
| 10 |
+
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
| 11 |
+
|
| 12 |
+
# Base para definir las clases de SQLAlchemy
|
| 13 |
+
Base = declarative_base()
|
estructura_de_BD.sql
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
-- Tablas no relacionadas
|
| 2 |
+
CREATE TABLE Becas (
|
| 3 |
+
ID_Beca INTEGER PRIMARY KEY,
|
| 4 |
+
Nombre_Beca TEXT NOT NULL,
|
| 5 |
+
Descripcion TEXT,
|
| 6 |
+
Monto REAL
|
| 7 |
+
);
|
| 8 |
+
|
| 9 |
+
CREATE TABLE Estudiantes (
|
| 10 |
+
ID_Estudiante INTEGER PRIMARY KEY,
|
| 11 |
+
Nombre TEXT NOT NULL,
|
| 12 |
+
Apellido TEXT NOT NULL,
|
| 13 |
+
Fecha_Nacimiento DATE,
|
| 14 |
+
Direccion TEXT,
|
| 15 |
+
Telefono TEXT
|
| 16 |
+
);
|
| 17 |
+
|
| 18 |
+
CREATE TABLE Profesores (
|
| 19 |
+
ID_Profesor INTEGER PRIMARY KEY,
|
| 20 |
+
Nombre TEXT NOT NULL,
|
| 21 |
+
Apellido TEXT NOT NULL,
|
| 22 |
+
Especialidad TEXT,
|
| 23 |
+
Telefono TEXT
|
| 24 |
+
);
|
| 25 |
+
|
| 26 |
+
-- Tablas relacionadas
|
| 27 |
+
CREATE TABLE Cursos (
|
| 28 |
+
ID_Curso INTEGER PRIMARY KEY,
|
| 29 |
+
Nombre_Curso TEXT NOT NULL,
|
| 30 |
+
Duracion TEXT,
|
| 31 |
+
ID_Profesor INTEGER,
|
| 32 |
+
FOREIGN KEY (ID_Profesor) REFERENCES Profesores(ID_Profesor)
|
| 33 |
+
);
|
| 34 |
+
|
| 35 |
+
CREATE TABLE Horarios (
|
| 36 |
+
ID_Horario INTEGER PRIMARY KEY,
|
| 37 |
+
ID_Curso INTEGER,
|
| 38 |
+
Dia TEXT,
|
| 39 |
+
Hora_Inicio TIME,
|
| 40 |
+
Hora_Fin TIME,
|
| 41 |
+
FOREIGN KEY (ID_Curso) REFERENCES Cursos(ID_Curso)
|
| 42 |
+
);
|
| 43 |
+
|
| 44 |
+
CREATE TABLE Evaluaciones (
|
| 45 |
+
ID_Evaluacion INTEGER PRIMARY KEY,
|
| 46 |
+
ID_Estudiante INTEGER,
|
| 47 |
+
ID_Curso INTEGER,
|
| 48 |
+
Fecha DATE,
|
| 49 |
+
Calificacion INTEGER,
|
| 50 |
+
FOREIGN KEY (ID_Estudiante) REFERENCES Estudiantes(ID_Estudiante),
|
| 51 |
+
FOREIGN KEY (ID_Curso) REFERENCES Cursos(ID_Curso)
|
| 52 |
+
);
|
generar_tablas.py
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Ejecutar la creaci贸n de las tablas en la base de datos con el archivo base.sql
|
| 2 |
+
|
| 3 |
+
import sqlite3
|
| 4 |
+
|
| 5 |
+
# Conexi贸n a la base de datos
|
| 6 |
+
conexion = sqlite3.connect("academia.db")
|
| 7 |
+
cursor = conexion.cursor()
|
| 8 |
+
|
| 9 |
+
# Ejecutar el archivo base.sql
|
| 10 |
+
with open("base.sql") as archivo:
|
| 11 |
+
cursor.executescript(archivo.read())
|
| 12 |
+
|
| 13 |
+
# Cerrar la conexi贸n
|
| 14 |
+
conexion.close()
|
| 15 |
+
|
| 16 |
+
print("Tablas creadas")
|
insertar_datos.sql
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
-- Insertar datos en la tabla 'Becas'
|
| 2 |
+
INSERT INTO Becas (ID_Beca, Nombre_Beca, Descripcion, Monto) VALUES
|
| 3 |
+
(1, 'Beca Conacyt', 'Beca para estudios de posgrado', 15000),
|
| 4 |
+
(2, 'Beca Fulbright', 'Beca para estudios en Estados Unidos', 20000),
|
| 5 |
+
(3, 'Beca Senescyt', 'Beca para estudios en Ecuador', 8000),
|
| 6 |
+
(4, 'Beca Pronabec', 'Beca nacional para pregrado', 5000),
|
| 7 |
+
(5, 'Beca DAAD', 'Beca para estudios en Alemania', 25000),
|
| 8 |
+
(6, 'Beca Chevening', 'Beca para estudios en Reino Unido', 30000),
|
| 9 |
+
(7, 'Beca Santander', 'Beca para intercambios internacionales', 10000),
|
| 10 |
+
(8, 'Beca Erasmus+', 'Beca para estudios en Europa', 12000),
|
| 11 |
+
(9, 'Beca Gates', 'Beca completa para Cambridge', 35000),
|
| 12 |
+
(10, 'Beca Sor Juana In茅s de la Cruz', 'Beca para mujeres en ciencia', 9500),
|
| 13 |
+
(11, 'Beca Einstein', 'Beca para f铆sica te贸rica', 11000),
|
| 14 |
+
(12, 'Beca Hawking', 'Beca para investigaci贸n espacial', 15000),
|
| 15 |
+
(13, 'Beca Marie Curie', 'Beca para investigaci贸n en qu铆mica', 20000),
|
| 16 |
+
(14, 'Beca Tesla', 'Beca para innovaci贸n tecnol贸gica', 18000),
|
| 17 |
+
(15, 'Beca Picasso', 'Beca para artes visuales', 12000),
|
| 18 |
+
(16, 'Beca Mozart', 'Beca para m煤sica cl谩sica', 7000),
|
| 19 |
+
(17, 'Beca Cervantes', 'Beca para estudios literarios', 9500),
|
| 20 |
+
(18, 'Beca Confucio', 'Beca para estudios en China', 11000),
|
| 21 |
+
(19, 'Beca Borges', 'Beca para literatura fant谩stica', 8000),
|
| 22 |
+
(20, 'Beca Darwin', 'Beca para biolog铆a evolutiva', 14000);
|
| 23 |
+
|
| 24 |
+
-- Insertar datos en la tabla 'Estudiantes'
|
| 25 |
+
INSERT INTO Estudiantes (ID_Estudiante, Nombre, Apellido, Fecha_Nacimiento, Direccion, Telefono) VALUES
|
| 26 |
+
(1, 'Juan', 'P茅rez', '1990-05-14', 'Av. Siempre Viva 123', '555-1234'),
|
| 27 |
+
(2, 'Ana', 'Garc铆a', '1992-07-18', 'Calle Falsa 456', '555-5678'),
|
| 28 |
+
(3, 'Luis', 'Morales', '1993-09-22', 'Av. Principal 789', '555-8765'),
|
| 29 |
+
(4, 'Luc铆a', 'Fern谩ndez', '1989-11-30', 'Calle Nueva 101', '555-4567'),
|
| 30 |
+
(5, 'Mar铆a', 'V谩squez', '1991-03-15', 'Av. Las Palmas 234', '555-3456'),
|
| 31 |
+
(6, 'Carlos', 'Jim茅nez', '1994-12-24', 'Calle Vieja 567', '555-2345'),
|
| 32 |
+
(7, 'Sof铆a', 'L贸pez', '1988-08-09', 'Av. Libertad 890', '555-6789'),
|
| 33 |
+
(8, 'Diego', 'Mart铆nez', '1995-06-04', 'Calle Sol 321', '555-7890'),
|
| 34 |
+
(9, 'Ana', 'Ruiz', '1992-01-17', 'Av. Luna 654', '555-8901'),
|
| 35 |
+
(10, 'Oscar', 'D铆az', '1990-04-25', 'Calle Estrella 987', '555-9012'),
|
| 36 |
+
(11, 'M贸nica', 'Campos', '1993-02-13', 'Av. R铆o 345', '555-0123'),
|
| 37 |
+
(12, 'Roberto', 'S谩nchez', '1991-07-19', 'Calle Lago 678', '555-1235'),
|
| 38 |
+
(13, 'Sandra', 'Molina', '1989-08-31', 'Av. Bosque 789', '555-2346'),
|
| 39 |
+
(14, 'David', 'Ortiz', '1992-10-20', 'Calle Jard铆n 890', '555-3457'),
|
| 40 |
+
(15, 'Carmen', 'Navarro', '1990-09-10', 'Av. Monta帽a 123', '555-4568'),
|
| 41 |
+
(16, 'Fernando', 'Gonz谩lez', '1994-12-15', 'Calle Oc茅ano 234', '555-5679'),
|
| 42 |
+
(17, 'Gloria', 'Vega', '1991-03-03', 'Av. Desierto 345', '555-6780'),
|
| 43 |
+
(18, 'H茅ctor', '脕lvarez', '1993-05-29', 'Calle Isla 456', '555-7891'),
|
| 44 |
+
(19, 'Susana', 'Ben铆tez', '1988-11-11', 'Av. Volc谩n 567', '555-8902'),
|
| 45 |
+
(20, 'Ricardo', 'Montoya', '1995-01-02', 'Calle Bosque 678', '555-9013');
|
| 46 |
+
|
| 47 |
+
-- Insertar datos en la tabla 'Profesores'
|
| 48 |
+
INSERT INTO Profesores (ID_Profesor, Nombre, Apellido, Especialidad, Telefono) VALUES
|
| 49 |
+
(1, 'Carlos', 'Santana', 'Matem谩ticas', '555-9876'),
|
| 50 |
+
(2, 'Laura', 'Gomez', 'Literatura', '555-6543'),
|
| 51 |
+
(3, 'Jos茅', 'Mart铆nez', 'F铆sica', '555-3210'),
|
| 52 |
+
(4, 'Carmen', 'L贸pez', 'Historia', '555-4321'),
|
| 53 |
+
(5, 'Lucas', 'Fern谩ndez', 'Qu铆mica', '555-5432'),
|
| 54 |
+
(6, 'Marta', 'Garc铆a', 'Biolog铆a', '555-6542'),
|
| 55 |
+
(7, 'Ana', 'Ruiz', 'Inform谩tica', '555-7653'),
|
| 56 |
+
(8, 'David', 'Morales', 'Educaci贸n f铆sica', '555-8764'),
|
| 57 |
+
(9, 'Sof铆a', 'Alvarez', 'Arte', '555-9875'),
|
| 58 |
+
(10, 'Luis', 'G贸mez', 'M煤sica', '555-0987'),
|
| 59 |
+
(11, 'M贸nica', 'Campos', 'Psicolog铆a', '555-1098'),
|
| 60 |
+
(12, 'Roberto', 'S谩nchez', 'Sociolog铆a', '555-2109'),
|
| 61 |
+
(13, 'Sandra', 'Molina', 'Filosof铆a', '555-3219'),
|
| 62 |
+
(14, 'David', 'Ortiz', 'Ingenier铆a', '555-4328'),
|
| 63 |
+
(15, 'Carmen', 'Navarro', 'Arquitectura', '555-5437'),
|
| 64 |
+
(16, 'Fernando', 'Gonz谩lez', 'Derecho', '555-6546'),
|
| 65 |
+
(17, 'Gloria', 'Vega', 'Medicina', '555-7657'),
|
| 66 |
+
(18, 'H茅ctor', '脕lvarez', 'Enfermer铆a', '555-8768'),
|
| 67 |
+
(19, 'Susana', 'Ben铆tez', 'Nutrici贸n', '555-9879'),
|
| 68 |
+
(20, 'Ricardo', 'Montoya', 'Odontolog铆a', '555-0980');
|
| 69 |
+
|
| 70 |
+
-- Contin煤a con las tablas relacionadas en el siguiente mensaje
|
| 71 |
+
-- Insertar datos en la tabla 'Cursos'
|
| 72 |
+
INSERT INTO Cursos (ID_Curso, Nombre_Curso, Duracion, ID_Profesor) VALUES
|
| 73 |
+
(1, 'C谩lculo', 'Semestral', 1),
|
| 74 |
+
(2, 'Literatura Moderna', 'Anual', 2),
|
| 75 |
+
(3, 'Mec谩nica Cl谩sica', 'Semestral', 3),
|
| 76 |
+
(4, 'Historia Universal', 'Anual', 4),
|
| 77 |
+
(5, 'Qu铆mica Org谩nica', 'Semestral', 5),
|
| 78 |
+
(6, 'Biolog铆a Molecular', 'Anual', 6),
|
| 79 |
+
(7, 'Programaci贸n Avanzada', 'Semestral', 7),
|
| 80 |
+
(8, 'Educaci贸n F铆sica', 'Anual', 8),
|
| 81 |
+
(9, 'T茅cnicas de Pintura', 'Semestral', 9),
|
| 82 |
+
(10, 'Teor铆a Musical', 'Anual', 10),
|
| 83 |
+
(11, 'Psicolog铆a del Aprendizaje', 'Semestral', 11),
|
| 84 |
+
(12, 'Sociolog铆a Urbana', 'Anual', 12),
|
| 85 |
+
(13, '脡tica y Filosof铆a', 'Semestral', 13),
|
| 86 |
+
(14, 'Ingenier铆a de Sistemas', 'Anual', 14),
|
| 87 |
+
(15, 'Dise帽o Arquitect贸nico', 'Semestral', 15),
|
| 88 |
+
(16, 'Derecho Internacional', 'Anual', 16),
|
| 89 |
+
(17, 'Medicina General', 'Semestral', 17),
|
| 90 |
+
(18, 'Cuidados de Enfermer铆a', 'Anual', 18),
|
| 91 |
+
(19, 'Diet茅tica y Nutrici贸n', 'Semestral', 19),
|
| 92 |
+
(20, 'Odontolog铆a Preventiva', 'Anual', 20);
|
| 93 |
+
|
| 94 |
+
-- Insertar datos en la tabla 'Horarios'
|
| 95 |
+
INSERT INTO Horarios (ID_Horario, ID_Curso, Dia, Hora_Inicio, Hora_Fin) VALUES
|
| 96 |
+
(1, 1, 'Lunes', '08:00', '10:00'),
|
| 97 |
+
(2, 1, 'Mi茅rcoles', '08:00', '10:00'),
|
| 98 |
+
(3, 2, 'Martes', '10:00', '12:00'),
|
| 99 |
+
(4, 2, 'Jueves', '10:00', '12:00'),
|
| 100 |
+
(5, 3, 'Lunes', '10:00', '12:00'),
|
| 101 |
+
(6, 3, 'Mi茅rcoles', '10:00', '12:00'),
|
| 102 |
+
(7, 4, 'Martes', '08:00', '10:00'),
|
| 103 |
+
(8, 4, 'Jueves', '08:00', '10:00'),
|
| 104 |
+
(9, 5, 'Lunes', '12:00', '14:00'),
|
| 105 |
+
(10, 5, 'Mi茅rcoles', '12:00', '14:00'),
|
| 106 |
+
(11, 6, 'Martes', '12:00', '14:00'),
|
| 107 |
+
(12, 6, 'Jueves', '12:00', '14:00'),
|
| 108 |
+
(13, 7, 'Lunes', '14:00', '16:00'),
|
| 109 |
+
(14, 7, 'Mi茅rcoles', '14:00', '16:00'),
|
| 110 |
+
(15, 8, 'Martes', '14:00', '16:00'),
|
| 111 |
+
(16, 8, 'Jueves', '14:00', '16:00'),
|
| 112 |
+
(17, 9, 'Lunes', '16:00', '18:00'),
|
| 113 |
+
(18, 9, 'Mi茅rcoles', '16:00', '18:00'),
|
| 114 |
+
(19, 10, 'Martes', '16:00', '18:00'),
|
| 115 |
+
(20, 10, 'Jueves', '16:00', '18:00');
|
| 116 |
+
|
| 117 |
+
-- Insertar datos en la tabla 'Evaluaciones'
|
| 118 |
+
INSERT INTO Evaluaciones (ID_Evaluacion, ID_Estudiante, ID_Curso, Fecha, Calificacion) VALUES
|
| 119 |
+
(1, 1, 1, '2023-06-15', 85),
|
| 120 |
+
(2, 2, 2, '2023-06-16', 90),
|
| 121 |
+
(3, 3, 3, '2023-06-17', 88),
|
| 122 |
+
(4, 4, 4, '2023-06-18', 95),
|
| 123 |
+
(5, 5, 5, '2023-06-19', 80),
|
| 124 |
+
(6, 6, 6, '2023-06-20', 70),
|
| 125 |
+
(7, 7, 7, '2023-06-21', 85),
|
| 126 |
+
(8, 8, 8, '2023-06-22', 90),
|
| 127 |
+
(9, 9, 9, '2023-06-23', 95),
|
| 128 |
+
(10, 10, 10, '2023-06-24', 85),
|
| 129 |
+
(11, 11, 11, '2023-06-25', 92),
|
| 130 |
+
(12, 12, 12, '2023-06-26', 87),
|
| 131 |
+
(13, 13, 13, '2023-06-27', 93),
|
| 132 |
+
(14, 14, 14, '2023-06-28', 89),
|
| 133 |
+
(15, 15, 15, '2023-06-29', 94),
|
| 134 |
+
(16, 16, 16, '2023-06-30', 78),
|
| 135 |
+
(17, 17, 17, '2023-07-01', 88),
|
| 136 |
+
(18, 18, 18, '2023-07-02', 90),
|
| 137 |
+
(19, 19, 19, '2023-07-03', 86),
|
| 138 |
+
(20, 20, 20, '2023-07-04', 91);
|
library/__pycache__/librerias.cpython-311.pyc
ADDED
|
Binary file (893 Bytes). View file
|
|
|
library/librerias.py
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# librerias propias del lenguaje
|
| 2 |
+
from datetime import datetime
|
| 3 |
+
from datetime import date
|
| 4 |
+
import os
|
| 5 |
+
|
| 6 |
+
# librerias para la API
|
| 7 |
+
from pydantic import BaseModel
|
| 8 |
+
from fastapi import FastAPI, HTTPException
|
| 9 |
+
from fastapi.middleware.cors import CORSMiddleware
|
| 10 |
+
from fastapi.responses import FileResponse
|
| 11 |
+
from fastapi import APIRouter, Depends, status
|
| 12 |
+
import uvicorn
|
| 13 |
+
|
| 14 |
+
# importar librerias para la conexion a la base de datos
|
| 15 |
+
from queue import Queue
|
| 16 |
+
import sqlite3
|
| 17 |
+
import threading
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
# clase para la conexion a la base de datos
|
| 21 |
+
from database.database import SessionLocal, engine
|
models/__pycache__/schema.cpython-311.pyc
ADDED
|
Binary file (8.02 kB). View file
|
|
|
models/schema.py
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from pydantic import BaseModel
|
| 2 |
+
from typing import Optional
|
| 3 |
+
from datetime import date, time
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
class BecasBase(BaseModel):
|
| 7 |
+
Nombre_Beca: str
|
| 8 |
+
Descripci贸n: str
|
| 9 |
+
Monto: float
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
class BecasCreate(BecasBase):
|
| 13 |
+
pass
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
class Becas(BecasBase):
|
| 17 |
+
ID_Beca: int
|
| 18 |
+
|
| 19 |
+
class Config:
|
| 20 |
+
from_attributes = True
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
class SearchBecas(BaseModel):
|
| 24 |
+
nombre_beca: str = ""
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
class EstudiantesBase(BaseModel):
|
| 28 |
+
Nombre: str
|
| 29 |
+
Apellido: str
|
| 30 |
+
Fecha_Nacimiento: Optional[date] = None
|
| 31 |
+
Direcci贸n: Optional[str] = None
|
| 32 |
+
Tel茅fono: Optional[str] = None
|
| 33 |
+
|
| 34 |
+
|
| 35 |
+
class EstudiantesCreate(EstudiantesBase):
|
| 36 |
+
pass
|
| 37 |
+
|
| 38 |
+
|
| 39 |
+
class Estudiantes(EstudiantesBase):
|
| 40 |
+
ID_Estudiante: int
|
| 41 |
+
|
| 42 |
+
class Config:
|
| 43 |
+
from_attributes = True
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
class SearchEstudiantes(BaseModel):
|
| 47 |
+
nombre: str = ""
|
| 48 |
+
apellido: str = ""
|
| 49 |
+
|
| 50 |
+
|
| 51 |
+
class ProfesoresBase(BaseModel):
|
| 52 |
+
Nombre: str
|
| 53 |
+
Apellido: str
|
| 54 |
+
Especialidad: str
|
| 55 |
+
Tel茅fono: Optional[str] = None
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
class ProfesoresCreate(ProfesoresBase):
|
| 59 |
+
pass
|
| 60 |
+
|
| 61 |
+
|
| 62 |
+
class Profesores(ProfesoresBase):
|
| 63 |
+
ID_Profesor: int
|
| 64 |
+
|
| 65 |
+
class Config:
|
| 66 |
+
from_attributes = True
|
| 67 |
+
|
| 68 |
+
|
| 69 |
+
class SearchProfesores(BaseModel):
|
| 70 |
+
nombre: str = ""
|
| 71 |
+
apellido: str = ""
|
| 72 |
+
|
| 73 |
+
|
| 74 |
+
class CursosBase(BaseModel):
|
| 75 |
+
Nombre_Curso: str
|
| 76 |
+
Duraci贸n: str
|
| 77 |
+
ID_Profesor: Optional[int] = None
|
| 78 |
+
|
| 79 |
+
|
| 80 |
+
class CursosCreate(CursosBase):
|
| 81 |
+
pass
|
| 82 |
+
|
| 83 |
+
|
| 84 |
+
class Cursos(CursosBase):
|
| 85 |
+
ID_Curso: int
|
| 86 |
+
|
| 87 |
+
class Config:
|
| 88 |
+
from_attributes = True
|
| 89 |
+
|
| 90 |
+
|
| 91 |
+
class SearchCursos(BaseModel):
|
| 92 |
+
nombre_curso: str = ""
|
| 93 |
+
|
| 94 |
+
|
| 95 |
+
class HorariosBase(BaseModel):
|
| 96 |
+
ID_Curso: int
|
| 97 |
+
D铆a: str
|
| 98 |
+
Hora_Inicio: time
|
| 99 |
+
Hora_Fin: time
|
| 100 |
+
|
| 101 |
+
|
| 102 |
+
class HorariosCreate(HorariosBase):
|
| 103 |
+
pass
|
| 104 |
+
|
| 105 |
+
|
| 106 |
+
class Horarios(HorariosBase):
|
| 107 |
+
ID_Horario: int
|
| 108 |
+
|
| 109 |
+
class Config:
|
| 110 |
+
from_attributes = True
|
| 111 |
+
|
| 112 |
+
|
| 113 |
+
class SearchHorarios(BaseModel):
|
| 114 |
+
dia: str = ""
|
| 115 |
+
|
| 116 |
+
|
| 117 |
+
class EvaluacionesBase(BaseModel):
|
| 118 |
+
ID_Estudiante: int
|
| 119 |
+
ID_Curso: int
|
| 120 |
+
Fecha: date
|
| 121 |
+
Calificaci贸n: int
|
| 122 |
+
|
| 123 |
+
|
| 124 |
+
class EvaluacionesCreate(EvaluacionesBase):
|
| 125 |
+
pass
|
| 126 |
+
|
| 127 |
+
|
| 128 |
+
class Evaluaciones(EvaluacionesBase):
|
| 129 |
+
ID_Evaluaci贸n: int
|
| 130 |
+
|
| 131 |
+
class Config:
|
| 132 |
+
from_attributes = True
|
| 133 |
+
|
| 134 |
+
|
| 135 |
+
class SearchEvaluaciones(BaseModel):
|
| 136 |
+
id_estudiante: int = 0
|
| 137 |
+
id_curso: int = 0
|
requirements.txt
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
fastapi
|
| 2 |
+
uvicorn
|
routers/__pycache__/api.cpython-311.pyc
ADDED
|
Binary file (12.6 kB). View file
|
|
|
routers/__pycache__/routers.cpython-311.pyc
ADDED
|
Binary file (212 Bytes). View file
|
|
|
routers/api.py
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from fastapi import APIRouter, Depends, HTTPException
|
| 2 |
+
from typing import List
|
| 3 |
+
from sqlalchemy.orm import Session
|
| 4 |
+
from models.schema import (
|
| 5 |
+
Becas,
|
| 6 |
+
BecasCreate,
|
| 7 |
+
SearchBecas,
|
| 8 |
+
Estudiantes,
|
| 9 |
+
EstudiantesCreate,
|
| 10 |
+
SearchEstudiantes,
|
| 11 |
+
Profesores,
|
| 12 |
+
ProfesoresCreate,
|
| 13 |
+
SearchProfesores,
|
| 14 |
+
Cursos,
|
| 15 |
+
CursosCreate,
|
| 16 |
+
SearchCursos,
|
| 17 |
+
Horarios,
|
| 18 |
+
HorariosCreate,
|
| 19 |
+
SearchHorarios,
|
| 20 |
+
Evaluaciones,
|
| 21 |
+
EvaluacionesCreate,
|
| 22 |
+
SearchEvaluaciones,
|
| 23 |
+
)
|
| 24 |
+
from database.database import Base, SessionLocal, engine
|
| 25 |
+
from models.schema import (
|
| 26 |
+
Becas as DBBecas,
|
| 27 |
+
Estudiantes as DBEstudiantes,
|
| 28 |
+
Profesores as DBProfesores,
|
| 29 |
+
Cursos as DBCursos,
|
| 30 |
+
Horarios as DBHorarios,
|
| 31 |
+
Evaluaciones as DBEvaluaciones,
|
| 32 |
+
)
|
| 33 |
+
|
| 34 |
+
router = APIRouter(
|
| 35 |
+
prefix="/api",
|
| 36 |
+
tags=["Academia_Stephen_Hawking_API"],
|
| 37 |
+
responses={404: {"description": "No encontrado"}},
|
| 38 |
+
)
|
| 39 |
+
|
| 40 |
+
# Inicializar la base de datos
|
| 41 |
+
Base.metadata.create_all(bind=engine)
|
| 42 |
+
|
| 43 |
+
|
| 44 |
+
# Funci贸n auxiliar para obtener una sesi贸n de la base de datos
|
| 45 |
+
def get_db():
|
| 46 |
+
db = SessionLocal()
|
| 47 |
+
try:
|
| 48 |
+
yield db
|
| 49 |
+
finally:
|
| 50 |
+
db.close()
|
| 51 |
+
|
| 52 |
+
|
| 53 |
+
# Becas
|
| 54 |
+
@router.get("/becas/", response_model=List[Becas])
|
| 55 |
+
def get_becas(db: Session = Depends(get_db)):
|
| 56 |
+
return db.query(DBBecas).all()
|
| 57 |
+
|
| 58 |
+
|
| 59 |
+
@router.post("/becas/", response_model=Becas)
|
| 60 |
+
def create_beca(beca: BecasCreate, db: Session = Depends(get_db)):
|
| 61 |
+
db_beca = DBBecas(**beca.dict())
|
| 62 |
+
db.add(db_beca)
|
| 63 |
+
db.commit()
|
| 64 |
+
db.refresh(db_beca)
|
| 65 |
+
return db_beca
|
| 66 |
+
|
| 67 |
+
|
| 68 |
+
@router.get("/becas/search/", response_model=List[Becas])
|
| 69 |
+
def search_becas(beca: SearchBecas, db: Session = Depends(get_db)):
|
| 70 |
+
query = db.query(DBBecas)
|
| 71 |
+
if beca.nombre_beca:
|
| 72 |
+
query = query.filter(DBBecas.Nombre_Beca.contains(beca.nombre_beca))
|
| 73 |
+
return query.all()
|
| 74 |
+
|
| 75 |
+
|
| 76 |
+
# Estudiantes
|
| 77 |
+
@router.get("/estudiantes/", response_model=List[Estudiantes])
|
| 78 |
+
def get_estudiantes(db: Session = Depends(get_db)):
|
| 79 |
+
return db.query(DBEstudiantes).all()
|
| 80 |
+
|
| 81 |
+
|
| 82 |
+
@router.post("/estudiantes/", response_model=Estudiantes)
|
| 83 |
+
def create_estudiante(estudiante: EstudiantesCreate, db: Session = Depends(get_db)):
|
| 84 |
+
db_estudiante = DBEstudiantes(**estudiante.dict())
|
| 85 |
+
db.add(db_estudiante)
|
| 86 |
+
db.commit()
|
| 87 |
+
db.refresh(db_estudiante)
|
| 88 |
+
return db_estudiante
|
| 89 |
+
|
| 90 |
+
|
| 91 |
+
@router.get("/estudiantes/search/", response_model=List[Estudiantes])
|
| 92 |
+
def search_estudiantes(estudiante: SearchEstudiantes, db: Session = Depends(get_db)):
|
| 93 |
+
query = db.query(DBEstudiantes)
|
| 94 |
+
if estudiante.nombre:
|
| 95 |
+
query = query.filter(DBEstudiantes.Nombre.contains(estudiante.nombre))
|
| 96 |
+
if estudiante.apellido:
|
| 97 |
+
query = query.filter(DBEstudiantes.Apellido.contains(estudiante.apellido))
|
| 98 |
+
return query.all()
|
| 99 |
+
|
| 100 |
+
|
| 101 |
+
# Profesores
|
| 102 |
+
@router.get("/profesores/", response_model=List[Profesores])
|
| 103 |
+
def get_profesores(db: Session = Depends(get_db)):
|
| 104 |
+
return db.query(DBProfesores).all()
|
| 105 |
+
|
| 106 |
+
|
| 107 |
+
@router.post("/profesores/", response_model=Profesores)
|
| 108 |
+
def create_profesor(profesor: ProfesoresCreate, db: Session = Depends(get_db)):
|
| 109 |
+
db_profesor = DBProfesores(**profesor.dict())
|
| 110 |
+
db.add(db_profesor)
|
| 111 |
+
db.commit()
|
| 112 |
+
db.refresh(db_profesor)
|
| 113 |
+
return db_profesor
|
| 114 |
+
|
| 115 |
+
|
| 116 |
+
@router.get("/profesores/search/", response_model=List[Profesores])
|
| 117 |
+
def search_profesores(profesor: SearchProfesores, db: Session = Depends(get_db)):
|
| 118 |
+
query = db.query(DBProfesores)
|
| 119 |
+
if profesor.nombre:
|
| 120 |
+
query = query.filter(DBProfesores.Nombre.contains(profesor.nombre))
|
| 121 |
+
if profesor.apellido:
|
| 122 |
+
query = query.filter(DBProfesores.Apellido.contains(profesor.apellido))
|
| 123 |
+
return query.all()
|
| 124 |
+
|
| 125 |
+
|
| 126 |
+
# Cursos
|
| 127 |
+
@router.get("/cursos/", response_model=List[Cursos])
|
| 128 |
+
def get_cursos(db: Session = Depends(get_db)):
|
| 129 |
+
return db.query(DBCursos).all()
|
| 130 |
+
|
| 131 |
+
|
| 132 |
+
@router.post("/cursos/", response_model=Cursos)
|
| 133 |
+
def create_curso(curso: CursosCreate, db: Session = Depends(get_db)):
|
| 134 |
+
db_curso = DBCursos(**curso.dict())
|
| 135 |
+
db.add(db_curso)
|
| 136 |
+
db.commit()
|
| 137 |
+
db.refresh(db_curso)
|
| 138 |
+
return db_curso
|
| 139 |
+
|
| 140 |
+
|
| 141 |
+
@router.get("/cursos/search/", response_model=List[Cursos])
|
| 142 |
+
def search_cursos(curso: SearchCursos, db: Session = Depends(get_db)):
|
| 143 |
+
query = db.query(DBCursos)
|
| 144 |
+
if curso.nombre_curso:
|
| 145 |
+
query = query.filter(DBCursos.Nombre_Curso.contains(curso.nombre_curso))
|
| 146 |
+
return query.all()
|
| 147 |
+
|
| 148 |
+
|
| 149 |
+
# Horarios
|
| 150 |
+
@router.get("/horarios/", response_model=List[Horarios])
|
| 151 |
+
def get_horarios(db: Session = Depends(get_db)):
|
| 152 |
+
return db.query(DBHorarios).all()
|
| 153 |
+
|
| 154 |
+
|
| 155 |
+
@router.post("/horarios/", response_model=Horarios)
|
| 156 |
+
def create_horario(horario: HorariosCreate, db: Session = Depends(get_db)):
|
| 157 |
+
db_horario = DBHorarios(**horario.dict())
|
| 158 |
+
db.add(db_horario)
|
| 159 |
+
db.commit()
|
| 160 |
+
db.refresh(db_horario)
|
| 161 |
+
return db_horario
|
| 162 |
+
|
| 163 |
+
|
| 164 |
+
@router.get("/horarios/search/", response_model=List[Horarios])
|
| 165 |
+
def search_horarios(horario: SearchHorarios, db: Session = Depends(get_db)):
|
| 166 |
+
query = db.query(DBHorarios)
|
| 167 |
+
if horario.dia:
|
| 168 |
+
query = query.filter(DBHorarios.D铆a.contains(horario.dia))
|
| 169 |
+
return query.all()
|
| 170 |
+
|
| 171 |
+
|
| 172 |
+
# Evaluaciones
|
| 173 |
+
@router.get("/evaluaciones/", response_model=List[Evaluaciones])
|
| 174 |
+
def get_evaluaciones(db: Session = Depends(get_db)):
|
| 175 |
+
return db.query(DBEvaluaciones).all()
|
| 176 |
+
|
| 177 |
+
|
| 178 |
+
@router.post("/evaluaciones/", response_model=Evaluaciones)
|
| 179 |
+
def create_evaluacion(evaluacion: EvaluacionesCreate, db: Session = Depends(get_db)):
|
| 180 |
+
db_evaluacion = DBEvaluaciones(**evaluacion.dict())
|
| 181 |
+
db.add(db_evaluacion)
|
| 182 |
+
db.commit()
|
| 183 |
+
db.refresh(db_evaluacion)
|
| 184 |
+
return db_evaluacion
|
| 185 |
+
|
| 186 |
+
|
| 187 |
+
@router.get("/evaluaciones/search/", response_model=List[Evaluaciones])
|
| 188 |
+
def search_evaluaciones(evaluacion: SearchEvaluaciones, db: Session = Depends(get_db)):
|
| 189 |
+
query = db.query(DBEvaluaciones)
|
| 190 |
+
if evaluacion.id_estudiante:
|
| 191 |
+
query = query.filter(DBEvaluaciones.ID_Estudiante == evaluacion.id_estudiante)
|
| 192 |
+
if evaluacion.id_curso:
|
| 193 |
+
query = query.filter(DBEvaluaciones.ID_Curso == evaluacion.id_curso)
|
| 194 |
+
return query.all()
|
routers/routers.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
from routers import api
|