JairoDanielMT commited on
Commit
920d4d1
verified
1 Parent(s): 7a630bd

Upload 23 files

Browse files
.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