Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
Empty file removed __init__.py
Empty file.
3 changes: 2 additions & 1 deletion app/alembic/env.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
"""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
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = 'c5c62362a433'
revision = '640e644d0909'
down_revision = None
branch_labels = None
depends_on = None
Expand All @@ -20,36 +20,34 @@ 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),
sa.PrimaryKeyConstraint('id')
)
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')
Expand Down
1 change: 1 addition & 0 deletions app/app/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import schemas, crud
5 changes: 2 additions & 3 deletions app/app/api/api.py
Original file line number Diff line number Diff line change
@@ -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"])
29 changes: 29 additions & 0 deletions app/app/api/endpoints/acts.py
Original file line number Diff line number Diff line change
@@ -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)
33 changes: 0 additions & 33 deletions app/app/api/endpoints/enrolments.py

This file was deleted.

4 changes: 2 additions & 2 deletions app/app/api/endpoints/users.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)


Expand Down
28 changes: 15 additions & 13 deletions app/app/crud.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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
41 changes: 9 additions & 32 deletions app/app/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
owner = relationship("User", back_populates="acts")
25 changes: 13 additions & 12 deletions app/app/schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

class UserBase(BaseModel):
email: EmailStr
username: str
username: Optional[str] # to be commented


class UserCreate(UserBase):
Expand All @@ -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

Expand Down
Binary file removed app/app/sql_app.db
Binary file not shown.
Binary file modified app/sql_app.db
Binary file not shown.