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 8ac67c3..0000000 Binary files a/app/app/sql_app.db and /dev/null differ diff --git a/app/sql_app.db b/app/sql_app.db index 8473d67..01d490e 100644 Binary files a/app/sql_app.db and b/app/sql_app.db differ