Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
44e9e05
[Updates clase miércoles models]
VicenteAGT Jan 21, 2026
1ebc15d
[updates]
VicenteAGT Jan 21, 2026
78257ce
[Update tablas sin relaciones]
VicenteAGT Jan 21, 2026
a1756cb
upgrade
Sebaperez12 Jan 21, 2026
f143670
[Desarrollo de ENDPOINT Login and register]
SantiagoCorales Jan 22, 2026
d3ffdd6
Merge pull request #1 from 4GeeksAcademy/SantiagoCorales-Login-Regist…
SantiagoCorales Jan 22, 2026
ca1b748
Merge pull request #2 from 4GeeksAcademy/Sebaperez12
Sebaperez12 Jan 22, 2026
d1da35d
tablas relacionadas con claves foráneas.
johnocamposabg-dev Jan 22, 2026
f59d59c
Merge pull request #3 from 4GeeksAcademy/Vicente/John---Models
VicenteAGT Jan 22, 2026
14d336e
upgrade signup
Sebaperez12 Jan 22, 2026
819e51a
adelanto en login
Sebaperez12 Jan 22, 2026
5adb053
ajuste en routes.jsx
Sebaperez12 Jan 22, 2026
0147f73
Merge pull request #4 from 4GeeksAcademy/Sebaperez12---LOGIN--SIGNUP-…
Sebaperez12 Jan 23, 2026
16b7dfa
finalización de la tabla de modelos y ajustes menores en la API
johnocamposabg-dev Jan 24, 2026
b65d549
push a migrations
johnocamposabg-dev Jan 24, 2026
6cd8248
Merge pull request #5 from 4GeeksAcademy/Vicente/John---Models
VicenteAGT Jan 24, 2026
dbc4a42
Merge pull request #6 from 4GeeksAcademy/developer
VicenteAGT Jan 24, 2026
b2e3bac
[Desarrollo de 4 endpoints en relacion estudiante
SantiagoCorales Jan 24, 2026
10b1294
Merge pull request #7 from 4GeeksAcademy/developer
SantiagoCorales Jan 24, 2026
594562e
[Adapte los endpoints de Register y Login con
SantiagoCorales Jan 24, 2026
0153932
[Endpoints de Group desarrollados]
SantiagoCorales Jan 26, 2026
0a618db
creación de endpoints
johnocamposabg-dev Jan 26, 2026
6096ea7
serialización de los modelos de la base de datos para facilitar la co…
johnocamposabg-dev Jan 26, 2026
35b02f9
Merge pull request #8 from 4GeeksAcademy/SantiagoCorales-Login-Regist…
SantiagoCorales Jan 27, 2026
11972d2
Merge pull request #9 from 4GeeksAcademy/SantiagoCorales-GroupEndpoint
SantiagoCorales Jan 27, 2026
caf43d5
Merge pull request #10 from 4GeeksAcademy/SantiagoCorales-Student-End…
SantiagoCorales Jan 27, 2026
2ac7b18
avance
johnocamposabg-dev Jan 27, 2026
78f0332
[updates]
VicenteAGT Jan 27, 2026
6c4f2e5
Merge branch 'developer' into john-endpoints-teacher
johnocamposabg-dev Jan 27, 2026
e9d8fa4
Merge pull request #11 from 4GeeksAcademy/john-endpoints-teacher
johnocamposabg-dev Jan 27, 2026
523f47f
creación del nuevo singupstaff y concexion con la api
johnocamposabg-dev Jan 27, 2026
657d52b
[updates]
VicenteAGT Jan 28, 2026
39b4687
Merge branch 'developer' into Vicente-test
VicenteAGT Jan 28, 2026
0bf2469
Merge pull request #12 from 4GeeksAcademy/Vicente-test
VicenteAGT Jan 28, 2026
3f6a934
[add Reading model in app.py]
VicenteAGT Jan 28, 2026
37bcae9
cors
johnocamposabg-dev Jan 28, 2026
8b67f22
Merge branch 'developer' into john-register-staff
johnocamposabg-dev Jan 28, 2026
a2f9fd2
Merge pull request #13 from 4GeeksAcademy/john-register-staff
johnocamposabg-dev Jan 28, 2026
f8a199b
creacion de vista creat todo form
Sebaperez12 Jan 28, 2026
b800975
[debug endpoint]
VicenteAGT Jan 28, 2026
fbd9112
correcion
Sebaperez12 Jan 28, 2026
12f8812
Merge branch 'developer' into Sebaperez-Submission-Endpoint
VicenteAGT Jan 28, 2026
e234e9d
Merge pull request #14 from 4GeeksAcademy/Sebaperez-Submission-Endpoint
VicenteAGT Jan 28, 2026
cfeaa70
eliminación de doble importación
johnocamposabg-dev Jan 28, 2026
e04bcf7
[en curso]
SantiagoCorales Jan 28, 2026
27e49ba
[API casi finalizada]
SantiagoCorales Jan 29, 2026
9cd2649
[updates by vicenteagt]
VicenteAGT Jan 29, 2026
fbbe72a
[Updates by vicenteagt]
VicenteAGT Jan 30, 2026
a493a22
[updates navbar by vicentea]
VicenteAGT Jan 30, 2026
4ef0078
ajustes
Sebaperez12 Jan 30, 2026
bd72096
Merge pull request #15 from 4GeeksAcademy/sebapere-CreateTodoForm
Sebaperez12 Jan 30, 2026
19e9c65
[fixed Signup by vicente]
VicenteAGT Jan 30, 2026
c385557
[ultimo tramo de la api de google calendar]
SantiagoCorales Jan 31, 2026
2d7ef89
Ignore package-lock.json
johnocamposabg-dev Feb 1, 2026
eb8f140
Merge pull request #16 from 4GeeksAcademy/john-landing-page-and-navbars
johnocamposabg-dev Feb 1, 2026
2d663d1
[Pruebas frontend]
SantiagoCorales Feb 1, 2026
3f0d2cb
[integracion de api al backend finalizada]
SantiagoCorales Feb 2, 2026
a7375fb
[Resultado final api de google calendar]
SantiagoCorales Feb 2, 2026
2188f97
Merge branch 'developer' into SantiagoCorales-API-google-calendar
SantiagoCorales Feb 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -80,3 +80,5 @@ database.database
database.db
diagram.png
__pycache__/
google_credentials/

2 changes: 2 additions & 0 deletions Pipfile
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ typing-extensions = "*"
flask-jwt-extended = "==4.6.0"
wtforms = "==3.1.2"
sqlalchemy = "*"
google-auth-oauthlib = "*"
google-api-python-client = "*"

[requires]
python_version = "3.13"
Expand Down
440 changes: 433 additions & 7 deletions Pipfile.lock

Large diffs are not rendered by default.

37 changes: 37 additions & 0 deletions migrations/versions/9bef3b5ac0da_add_google_token_table.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
"""add google token table

Revision ID: 9bef3b5ac0da
Revises: d3c003d31458
Create Date: 2026-01-30 21:26:15.162628

"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = '9bef3b5ac0da'
down_revision = 'd3c003d31458'
branch_labels = None
depends_on = None


def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('google_token',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('user_id', sa.Integer(), nullable=False),
sa.Column('access_token', sa.String(length=500), nullable=False),
sa.Column('refresh_token', sa.String(length=500), nullable=False),
sa.Column('token_expiry', sa.DateTime(), nullable=False),
sa.Column('created_at', sa.DateTime(), nullable=True),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('user_id')
)
# ### end Alembic commands ###


def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_table('google_token')
# ### end Alembic commands ###
127 changes: 127 additions & 0 deletions migrations/versions/c548e76fcf8f_.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
"""empty message
Revision ID: c548e76fcf8f
Revises: 0763d677d453
Create Date: 2026-01-24 00:01:36.030136
"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = 'c548e76fcf8f'
down_revision = '0763d677d453'
branch_labels = None
depends_on = None


def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
# Create ENUM types
role_enum = sa.Enum('ADMIN', 'TEACHER', 'STUDENT', name='role_enum')
role_enum.create(op.get_bind(), checkfirst=True)

op.create_table('group',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('name', sa.String(length=50), nullable=False),
sa.Column('description', sa.String(
length=255), nullable=False),
sa.Column('admin_id', sa.Integer(), nullable=False),
sa.Column('teacher_id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['admin_id'], ['user.id'], ),
sa.ForeignKeyConstraint(['teacher_id'], ['user.id'], ),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('name')
)
op.create_table('reading',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('title', sa.String(length=100), nullable=False),
sa.Column('content', sa.String(
length=1000), nullable=False),
sa.Column('teacher_id', sa.Integer(), nullable=False),
sa.Column('group_id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['group_id'], ['group.id'], ),
sa.ForeignKeyConstraint(['teacher_id'], ['user.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('student_group',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('user_id', sa.Integer(), nullable=False),
sa.Column('group_id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['group_id'], ['group.id'], ),
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('todo',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('title', sa.String(length=100), nullable=False),
sa.Column('description', sa.String(
length=255), nullable=False),
sa.Column('due_date', sa.Date(), nullable=False),
sa.Column('teacher_id', sa.Integer(), nullable=False),
sa.Column('group_id', sa.Integer(), nullable=False),
sa.Column('student_id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['group_id'], ['group.id'], ),
sa.ForeignKeyConstraint(
['student_id'], ['student_group.id'], ),
sa.ForeignKeyConstraint(['teacher_id'], ['user.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('submission',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('description', sa.String(
length=255), nullable=False),
sa.Column('response_url', sa.String(
length=300), nullable=False),
sa.Column('todo_id', sa.Integer(), nullable=False),
sa.Column('student_id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(
['student_id'], ['student_group.id'], ),
sa.ForeignKeyConstraint(['todo_id'], ['todo.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('status',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('submission_id', sa.Integer(), nullable=False),
sa.Column('state', sa.Enum('PENDING', 'APPROVED',
'REJECTED', name='status_enum'), nullable=False),
sa.Column('feedback', sa.String(
length=255), nullable=False),
sa.Column('teachers_id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(
['submission_id'], ['submission.id'], ),
sa.ForeignKeyConstraint(['teachers_id'], ['user.id'], ),
sa.PrimaryKeyConstraint('id')
)
with op.batch_alter_table('user', schema=None) as batch_op:
batch_op.add_column(
sa.Column('name', sa.String(length=50), nullable=False))
batch_op.add_column(sa.Column('role', sa.Enum(
'ADMIN', 'TEACHER', 'STUDENT', name='role_enum'), nullable=False))

# ### end Alembic commands ###


def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('user', schema=None) as batch_op:
batch_op.drop_column('role')
batch_op.drop_column('name')

op.drop_table('status')
op.drop_table('submission')
op.drop_table('todo')
op.drop_table('student_group')
op.drop_table('reading')
op.drop_table('group')

# Drop ENUM types
role_enum = sa.Enum('ADMIN', 'TEACHER', 'STUDENT', name='role_enum')
role_enum.drop(op.get_bind(), checkfirst=True)

status_enum = sa.Enum('PENDING', 'APPROVED',
'REJECTED', name='status_enum')
status_enum.drop(op.get_bind(), checkfirst=True)
op.drop_table('group')
# ### end Alembic commands ###
38 changes: 38 additions & 0 deletions migrations/versions/d3c003d31458_.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
"""empty message
Revision ID: d3c003d31458
Revises: c548e76fcf8f
Create Date: 2026-01-24 00:17:59.409895
"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = 'd3c003d31458'
down_revision = 'c548e76fcf8f'
branch_labels = None
depends_on = None


def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('status', schema=None) as batch_op:
batch_op.add_column(sa.Column('teacher_id', sa.Integer(), nullable=False))
batch_op.drop_constraint(batch_op.f('status_teachers_id_fkey'), type_='foreignkey')
batch_op.create_foreign_key(None, 'user', ['teacher_id'], ['id'])
batch_op.drop_column('teachers_id')

# ### end Alembic commands ###


def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('status', schema=None) as batch_op:
batch_op.add_column(sa.Column('teachers_id', sa.INTEGER(), autoincrement=False, nullable=False))
batch_op.drop_constraint(None, type_='foreignkey')
batch_op.create_foreign_key(batch_op.f('status_teachers_id_fkey'), 'user', ['teachers_id'], ['id'])
batch_op.drop_column('teacher_id')

# ### end Alembic commands ###
Loading