From bd05b97b30879262cf721a72324a5b7b3e3002c2 Mon Sep 17 00:00:00 2001 From: ToniGrabulosa Date: Wed, 1 Jun 2022 21:37:09 +0200 Subject: [PATCH] change enrolment for act --- __init__.py | 0 app/alembic/env.py | 3 +- ...a433_initial.py => 640e644d0909_intial.py} | 30 ++++++------- app/app/__init__.py | 1 + app/app/api/api.py | 5 +-- app/app/api/endpoints/acts.py | 29 +++++++++++++ app/app/api/endpoints/enrolments.py | 33 -------------- app/app/api/endpoints/users.py | 4 +- app/app/crud.py | 28 ++++++------ app/app/models.py | 41 ++++-------------- app/app/schemas.py | 25 ++++++----- app/app/sql_app.db | Bin 32768 -> 0 bytes app/sql_app.db | Bin 36864 -> 32768 bytes 13 files changed, 87 insertions(+), 112 deletions(-) delete mode 100644 __init__.py rename app/alembic/versions/{c5c62362a433_initial.py => 640e644d0909_intial.py} (64%) create mode 100644 app/app/api/endpoints/acts.py delete mode 100644 app/app/api/endpoints/enrolments.py delete mode 100644 app/app/sql_app.db diff --git a/__init__.py b/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/app/alembic/env.py b/app/alembic/env.py index 3dc29f3..f761627 100644 --- a/app/alembic/env.py +++ b/app/alembic/env.py @@ -19,7 +19,8 @@ # from myapp import mymodel # target_metadata = mymodel.Base.metadata # target_metadata = None -from db.base import Base +from db.base_class import Base +from app.models import User, Act target_metadata = Base.metadata # other values from the config, defined by the needs of env.py, diff --git a/app/alembic/versions/c5c62362a433_initial.py b/app/alembic/versions/640e644d0909_intial.py similarity index 64% rename from app/alembic/versions/c5c62362a433_initial.py rename to app/alembic/versions/640e644d0909_intial.py index 342ac9a..bb3248b 100644 --- a/app/alembic/versions/c5c62362a433_initial.py +++ b/app/alembic/versions/640e644d0909_intial.py @@ -1,8 +1,8 @@ -"""initial +"""intial -Revision ID: c5c62362a433 +Revision ID: 640e644d0909 Revises: -Create Date: 2022-06-01 18:24:15.320710 +Create Date: 2022-06-01 21:09:02.042056 """ from alembic import op @@ -10,7 +10,7 @@ # revision identifiers, used by Alembic. -revision = 'c5c62362a433' +revision = '640e644d0909' down_revision = None branch_labels = None depends_on = None @@ -20,9 +20,9 @@ def upgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### op.create_table('user', sa.Column('id', sa.Integer(), nullable=False), - sa.Column('username', sa.String(), nullable=True), sa.Column('email', sa.String(), nullable=True), sa.Column('hashed_password', sa.String(), nullable=True), + sa.Column('username', sa.String(), nullable=True), sa.Column('is_active', sa.Boolean(), nullable=True), sa.Column('created_at', sa.DateTime(), nullable=True), sa.Column('updated_at', sa.DateTime(), nullable=True), @@ -30,26 +30,24 @@ def upgrade() -> None: ) op.create_index(op.f('ix_user_email'), 'user', ['email'], unique=True) op.create_index(op.f('ix_user_id'), 'user', ['id'], unique=False) - op.create_index(op.f('ix_user_username'), 'user', ['username'], unique=True) - op.create_table('enrolment', + op.create_table('act', sa.Column('id', sa.Integer(), nullable=False), - sa.Column('start_date', sa.Date(), nullable=True), - sa.Column('end_date', sa.Date(), nullable=True), - sa.Column('auto_renew', sa.Boolean(), nullable=True), + sa.Column('name', sa.String(), nullable=True), + sa.Column('description', sa.String(), nullable=True), + sa.Column('link', sa.String(), nullable=True), sa.Column('created_at', sa.DateTime(), nullable=True), - sa.Column('owner_id', sa.Integer(), nullable=True), - sa.ForeignKeyConstraint(['owner_id'], ['user.id'], ), + sa.Column('user_id', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['user_id'], ['user.id'], ), sa.PrimaryKeyConstraint('id') ) - op.create_index(op.f('ix_enrolment_id'), 'enrolment', ['id'], unique=False) + op.create_index(op.f('ix_act_id'), 'act', ['id'], unique=False) # ### end Alembic commands ### def downgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### - op.drop_index(op.f('ix_enrolment_id'), table_name='enrolment') - op.drop_table('enrolment') - op.drop_index(op.f('ix_user_username'), table_name='user') + op.drop_index(op.f('ix_act_id'), table_name='act') + op.drop_table('act') op.drop_index(op.f('ix_user_id'), table_name='user') op.drop_index(op.f('ix_user_email'), table_name='user') op.drop_table('user') diff --git a/app/app/__init__.py b/app/app/__init__.py index e69de29..d687f51 100644 --- a/app/app/__init__.py +++ b/app/app/__init__.py @@ -0,0 +1 @@ +from . import schemas, crud \ No newline at end of file diff --git a/app/app/api/api.py b/app/app/api/api.py index e3fd0fd..53f343e 100644 --- a/app/app/api/api.py +++ b/app/app/api/api.py @@ -1,8 +1,7 @@ from fastapi import APIRouter -from app.api.endpoints import users -from app.api.endpoints import enrolments +from app.api.endpoints import users, acts api_router = APIRouter() api_router.include_router(users.router, prefix="/users", tags=["users"]) -api_router.include_router(enrolments.router, prefix="/enrolments", tags=["enrolments"]) +api_router.include_router(acts.router, prefix="/acts", tags=["acts"]) diff --git a/app/app/api/endpoints/acts.py b/app/app/api/endpoints/acts.py new file mode 100644 index 0000000..e0b7549 --- /dev/null +++ b/app/app/api/endpoints/acts.py @@ -0,0 +1,29 @@ +from app import crud, schemas +from app.api import deps +from fastapi import APIRouter, Depends, HTTPException +from sqlalchemy.orm import Session + +router = APIRouter() + + +@router.get("/", response_model=list[schemas.Act]) +def read_acts(skip: int = 0, limit: int = 100, db: Session = Depends(deps.get_db)): + acts = crud.get_acts(db, skip=skip, limit=limit) + return acts + + +@router.post("/create", response_model=schemas.Act) +def create_act(act: schemas.ActCreate, db: Session = Depends(deps.get_db)): + db_user = crud.get_user_by_email(db, act.user_email) + if db_user is None: + raise HTTPException(status_code=404, detail="User not found") + act = crud.create_act(db, act, db_user) + return act + + +@router.post("/", response_model=list[schemas.Act]) +def read_acts_by_user(act_query: schemas.ActQuery, db: Session = Depends(deps.get_db)): + db_user = crud.get_user_by_email(db, act_query.email) + if db_user is None: + raise HTTPException(status_code=404, detail="User not found") + return crud.get_acts_by_user(db, db_user) diff --git a/app/app/api/endpoints/enrolments.py b/app/app/api/endpoints/enrolments.py deleted file mode 100644 index 5aeb860..0000000 --- a/app/app/api/endpoints/enrolments.py +++ /dev/null @@ -1,33 +0,0 @@ -from fastapi import APIRouter, Depends, HTTPException -from sqlalchemy.orm import Session - -from app import schemas, crud -from app.api import deps - - -router = APIRouter() - - -@router.get("/", response_model=list[schemas.Enrolment]) -def read_enrolments(skip: int = 0, limit: int = 100, db: Session = Depends(deps.get_db)): - enrolments = crud.get_enrolments(db, skip=skip, limit=limit) - return enrolments - - -@router.post("/", response_model=schemas.Enrolment) -def create_enrolment(enrolment: schemas.EnrolmentCreate, db: Session = Depends(deps.get_db)): - db_user = crud.get_user_by_email(db, enrolment.user_email) or crud.get_user_by_username(db, enrolment.username) - if db_user is None: - raise HTTPException(status_code=404, detail="User not found") - enrolment = crud.create_enrolment(db, enrolment, db_user) - return enrolment - - -@router.post("/", response_model=list[schemas.Enrolment]) -def read_enrolments_by_user(enrolquery: schemas.EnrolmentQuery, db: Session = Depends(deps.get_db)): - if enrolquery.start_date: - return crud.filter_by_date(db, enrolquery.start_date) - db_user = crud.get_user_by_username(db, enrolquery.username) or crud.get_user_by_email(db, enrolquery.email) - if db_user is None: - raise HTTPException(status_code=404, detail="User not found") - return crud.get_enrolments_by_user(db, db_user) \ No newline at end of file diff --git a/app/app/api/endpoints/users.py b/app/app/api/endpoints/users.py index 7aacd6c..69808f8 100644 --- a/app/app/api/endpoints/users.py +++ b/app/app/api/endpoints/users.py @@ -10,9 +10,9 @@ @router.post("/", response_model=schemas.User) def create_user(user: schemas.UserCreate, db: Session = Depends(deps.get_db)): - db_user = crud.get_user_by_email(db, email=user.email) or crud.get_user_by_username(db, user.username) + db_user = crud.get_user_by_email(db, email=user.email) if db_user: - raise HTTPException(status_code=400, detail="Username or Email already registered") + raise HTTPException(status_code=400, detail="Email already registered") return crud.create_user(db=db, user=user) diff --git a/app/app/crud.py b/app/app/crud.py index e9d1737..b840c31 100644 --- a/app/app/crud.py +++ b/app/app/crud.py @@ -24,7 +24,7 @@ def create_user(db: Session, user: schemas.UserCreate): hashed_password = bcrypt.hashpw(user.password.encode('utf-8'), bcrypt.gensalt()) db_user = models.User( email=user.email, - username=user.username, + # username=user.username, # to be uncommented hashed_password=hashed_password, ) db.add(db_user) @@ -33,20 +33,22 @@ def create_user(db: Session, user: schemas.UserCreate): return db_user -def get_enrolments(db: Session, skip: int = 0, limit: int = 100): - return db.query(models.Enrolment).offset(skip).limit(limit).all() +######################### +def get_acts(db: Session, skip: int = 0, limit: int = 100): + return db.query(models.Act).offset(skip).limit(limit).all() -def get_enrolments_by_user(db: Session, user:schemas.User): - return db.query(models.Enrolment).filter(models.Enrolment.owner == user) +def get_acts_by_user(db: Session, user: schemas.User): + return db.query(models.Act).filter(models.Act.owner == user).all() -def create_enrolment(db: Session, enrolment: schemas.Enrolment, user: schemas.User): - db_enrolment = models.Enrolment( - start_date=enrolment.start_date, - end_date=(enrolment.start_date + relativedelta(years=1)), - owner_id=user.id +def create_act(db: Session, act: schemas.ActCreate, user: schemas.User): + db_act = models.Act( + name=act.name, + description=act.description, + link=act.link, + user_id=user.id ) - db.add(db_enrolment) + db.add(db_act) db.commit() - db.refresh(db_enrolment) - return db_enrolment + db.refresh(db_act) + return db_act \ No newline at end of file diff --git a/app/app/models.py b/app/app/models.py index e5c1ba2..ee4114f 100644 --- a/app/app/models.py +++ b/app/app/models.py @@ -9,49 +9,26 @@ class User(Base): __tablename__ = "user" id = Column(Integer, primary_key=True, index=True) - username = Column(String, unique=True, index=True) email = Column(String, unique=True, index=True) hashed_password = Column(String) + username = Column(String) is_active = Column(Boolean, default=True) created_at = Column(DateTime, default=func.now()) updated_at = Column(DateTime, default=func.now()) # User may have many Enrolments - enrolments = relationship("Enrolment", back_populates="owner") + acts = relationship("Act", back_populates="owner") -class Enrolment(Base): - __tablename__ = "enrolment" +class Act(Base): + __tablename__ = "act" id = Column(Integer, primary_key=True, index=True) - start_date = Column(Date) - end_date = Column(Date) - auto_renew = Column(Boolean, default=True) + name = Column(String) + description = Column(String) + link = Column(String) created_at = Column(DateTime, default=func.now()) - owner_id = Column(Integer, ForeignKey("user.id")) + user_id = Column(Integer, ForeignKey("user.id")) - owner = relationship("User", back_populates="enrolments") - - -# class PaymentLog(Base): -# id -# amount -# is_paid -# requested_at -# paid_at - - -# class Event(Base): -# name -# description -# date - - -# class Act(Base): -# ___tablename__ = "acts" - -# name -# description -# link -# created_at \ No newline at end of file + owner = relationship("User", back_populates="acts") diff --git a/app/app/schemas.py b/app/app/schemas.py index b1f62b0..080d1f6 100644 --- a/app/app/schemas.py +++ b/app/app/schemas.py @@ -5,7 +5,7 @@ class UserBase(BaseModel): email: EmailStr - username: str + username: Optional[str] # to be commented class UserCreate(UserBase): @@ -26,25 +26,26 @@ class Config: #################### -class EnrolmentBase(BaseModel): - start_date: date +class ActBase(BaseModel): + name: str -class EnrolmentCreate(EnrolmentBase): - start_date: date - username: Optional[str] - email: Optional[EmailStr] +class ActCreate(ActBase): + name: str + description: str + link: str + user_email: EmailStr -class EnrolmentQuery(BaseModel): - start_date: Optional[date] +class ActQuery(BaseModel): username: Optional[str] email: Optional[EmailStr] -class Enrolment(EnrolmentBase): - auto_renew: bool - end_date: date +class Act(ActBase): + id: int + description: str + link: str owner: User created_at: datetime diff --git a/app/app/sql_app.db b/app/app/sql_app.db deleted file mode 100644 index 8ac67c3725c4fd75f48504593fbd30e9c266b63f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI(u}<4S7zgk>nY%Wr@ITp(efQm`yPqe==l#7lPeXPb#X~=3Yh;m7N;VlI zgy>?Q7kg1^;$*J45Wlo^e%Gl^R^PAJMQg48m>9>#(}kZ4di_WJQe2`y00Izz00bZa z0SG_<0uZ<-0v~EsbKRt0_$UZ3_(e}VCJmEb5GMVYpQSt+$%^?c&#}7>Yq>9-cWhc1 z>$psYvPP-1wOg&4mPy0O^eImVp^UCgPb>pUDdn}*tW?csCOw=?#sitDIz1B)N@;jt zeYNLmrfJe|e(E2M2O;}c#{Ii?v+Wd9(KXS(<#wGN$761%%iM!@`vudre1LClZ|jxq zWfi4Kvr=_*J__UB|0G%H8?W`+_72&ubI2NENLk%>$8%acZdTVQ`dG|!wjIxLx14?U zDGB35hU=E6O4OuqkZrwi=<|U*of}W(z-{dvlx|unE<+iol>MxxGHIK~@<9How{45o zQku-xq`7Tf+R7k#P$q0;6>HpSD+g3YJoS^)FzB86Npc>=LAi-1J-?sw&mn7eI&H^x zrvd9$_H3>g--+={98e$t0SG_<0uX=z1Rwwb2tWV=5V%hQ&y@;US<^lq`6p4j>HDkw zXm}b8{85y~p+6X0=Kl;ZS|Q6DT9U?mbdn!$MPx7e72^*vZo~lv0uX=z1Rwwb2tWV= z5P$##AOL|G5~!$@DvGLVTK@chMT{#v|Ig43##A5x0SG_<0uX=z1Rwwb2teQg3OrI* z=)_6^MN^l@ivqIs|J3+R#D)R^2tWV=5P$##AOHafKmY;|fWS-$EQ;>|mY!(+DDksh zlE(6Hl|6dd1dd4P*=|BJi5P$##AOHafKmY;|fB*y@x`3|c K-vEg9|Nj8uOfA&_ diff --git a/app/sql_app.db b/app/sql_app.db index 8473d67bdd03dbac9712ba427c2924e60bfa0140..01d490e1415483e1e08e4bdc8f8332c7010a521e 100644 GIT binary patch delta 661 zcmZozz|_#dG(lRBi-CcG1BhXOZK95`G#7)O{Y_r}9}Mg~?F{_9{5$zfc%Set;W^CH zzFAO!mnX@JolRU`m@zOjFD11ivm!n*xg#G?#8FU+27&wiM zOY-wF9a1Y2a|?1(^^)^*Rg98U42@K>68!`6d_z;5{37#A((?2IlLLI*QZtLv^gT>7 zECcmDj3Z5bJVV^Q6HP+>N|JN(OHva3jSP&8bPddO4Ga|wEv*bqtPBjW2yuZTh>`yd z1OJ=Nf(DQH<%F4aInkW~ibqENKMeeTfNI|J3j?{#%$%Gck1+8!G4LPcZvuLyjKAKN ziJd`G+0d916z~d$pdbZ>H;|c8Qc_TCrLUi!pPvr#8>(ZBjIB&8Y#AxgZe+&A4R+8s WpgZ}$0bTlvpNo~5k&%fB@Ay delta 493 zcmZo@U}{*vG(lRBgMop86Nq7eeWH%BEC+*Lv?(wD4+akI{|x-R{5$zfc%Set;q~ST z=KjC2v6;I*h=WaBTb?m9GcP5zBC{esHLoZ?CpR^(BtA0*&gOIua&-)GRq*t4ag9(w zQ>EbVrvO)}ppluP*;vZXE-o+6*lbynn3R(WmxMDopyq`*@;dprB6LrV<&)McE=epZ ziBCx^NmXzGTB@VK#hIFyf+~<$T9O}Ml$w`XKKUS@GIM@;-sBKoLonUWD;p8c#wM;S z%2*BaRB3T)Q9OvqOUz9L(d&@dE&QNR#sb