Skip to content

Commit fbcb550

Browse files
Remove deleted attributes in the database models and actually delete the records instead
1 parent b603e73 commit fbcb550

File tree

6 files changed

+21
-25
lines changed

6 files changed

+21
-25
lines changed

routers/authentication.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,6 @@ class UserRead(BaseModel):
114114
organization_id: Optional[int]
115115
created_at: datetime
116116
updated_at: datetime
117-
deleted: bool
118117

119118

120119
# -- Routes --

routers/organization.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ class OrganizationRead(BaseModel):
2727
name: str
2828
created_at: datetime
2929
updated_at: datetime
30-
deleted: bool
3130

3231

3332
class OrganizationUpdate(BaseModel):
@@ -113,9 +112,7 @@ def delete_organization(
113112
if not db_org:
114113
raise HTTPException(status_code=404, detail="Organization not found")
115114

116-
db_org.deleted = True
117-
db_org.updated_at = datetime.utcnow()
118-
session.add(db_org)
115+
session.delete(db_org)
119116
session.commit()
120117

121118
return RedirectResponse(url="/organizations", status_code=303)

routers/role.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ class RoleRead(BaseModel):
3131
name: str
3232
created_at: datetime
3333
updated_at: datetime
34-
deleted: bool
3534
permissions: List[ValidPermissions]
3635

3736

@@ -74,7 +73,7 @@ def create_role(
7473
@router.get("/{role_id}", response_model=RoleRead)
7574
def read_role(role_id: int, session: Session = Depends(get_session)):
7675
db_role: Role | None = session.get(Role, role_id)
77-
if not db_role or not db_role.id or db_role.deleted:
76+
if not db_role or not db_role.id:
7877
raise HTTPException(status_code=404, detail="Role not found")
7978

8079
permissions = [
@@ -88,7 +87,6 @@ def read_role(role_id: int, session: Session = Depends(get_session)):
8887
name=db_role.name,
8988
created_at=db_role.created_at,
9089
updated_at=db_role.updated_at,
91-
deleted=db_role.deleted,
9290
permissions=permissions
9391
)
9492

@@ -99,7 +97,7 @@ def update_role(
9997
session: Session = Depends(get_session)
10098
) -> RedirectResponse:
10199
db_role: Role | None = session.get(Role, role.id)
102-
if not db_role or not db_role.id or db_role.deleted:
100+
if not db_role or not db_role.id:
103101
raise HTTPException(status_code=404, detail="Role not found")
104102
role_data = role.model_dump(exclude_unset=True)
105103
for key, value in role_data.items():
@@ -131,8 +129,6 @@ def delete_role(
131129
db_role = session.get(Role, role_id)
132130
if not db_role:
133131
raise HTTPException(status_code=404, detail="Role not found")
134-
db_role.deleted = True
135-
db_role.updated_at = utc_time()
136-
session.add(db_role)
132+
session.delete(db_role)
137133
session.commit()
138134
return RedirectResponse(url="/roles", status_code=303)

routers/user.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,9 @@ async def delete_account(
7474
if not verify_password(confirm_delete_password, current_user.hashed_password):
7575
raise HTTPException(status_code=400, detail="Password is incorrect")
7676

77-
# Mark the user as deleted
78-
current_user.deleted = True
79-
session.commit()
80-
#Logs Out
81-
router.get("/logout", response_class=RedirectResponse)
82-
# Deletes user
77+
# Delete the user
8378
session.delete(current_user)
84-
return RedirectResponse(url="/", status_code=303)
79+
session.commit()
80+
81+
# Log out the user
82+
return RedirectResponse(url="/logout", status_code=303)

tests/test_user.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import pytest
2+
from fastapi.testclient import TestClient
3+
from sqlmodel import Session, select
4+
5+
from main import app
6+
from utils.models import User

utils/models.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ class Organization(SQLModel, table=True):
2929
name: str
3030
created_at: datetime = Field(default_factory=utc_time)
3131
updated_at: datetime = Field(default_factory=utc_time)
32-
deleted: bool = Field(default=False)
3332

3433
users: List["User"] = Relationship(back_populates="organization")
3534

@@ -41,7 +40,6 @@ class Role(SQLModel, table=True):
4140
default=None, foreign_key="organization.id")
4241
created_at: datetime = Field(default_factory=utc_time)
4342
updated_at: datetime = Field(default_factory=utc_time)
44-
deleted: bool = Field(default=False)
4543

4644
users: List["User"] = Relationship(back_populates="role")
4745
role_permission_links: List["RolePermissionLink"] = Relationship(
@@ -54,7 +52,6 @@ class Permission(SQLModel, table=True):
5452
sa_column=Column(SQLAlchemyEnum(ValidPermissions, create_type=False)))
5553
created_at: datetime = Field(default_factory=utc_time)
5654
updated_at: datetime = Field(default_factory=utc_time)
57-
deleted: bool = Field(default=False)
5855

5956
role_permission_links: List["RolePermissionLink"] = Relationship(
6057
back_populates="permission")
@@ -83,7 +80,9 @@ class PasswordResetToken(SQLModel, table=True):
8380
used: bool = Field(default=False)
8481

8582
user: Optional["User"] = Relationship(
86-
back_populates="password_reset_tokens")
83+
back_populates="password_reset_tokens",
84+
sa_relationship_kwargs={"cascade": "all, delete-orphan"}
85+
)
8786

8887

8988
class User(SQLModel, table=True):
@@ -97,13 +96,14 @@ class User(SQLModel, table=True):
9796
role_id: Optional[int] = Field(default=None, foreign_key="role.id")
9897
created_at: datetime = Field(default_factory=utc_time)
9998
updated_at: datetime = Field(default_factory=utc_time)
100-
deleted: bool = Field(default=False)
10199

102100
organization: Optional["Organization"] = Relationship(
103101
back_populates="users")
104102
role: Optional["Role"] = Relationship(back_populates="users")
105103
password_reset_tokens: List["PasswordResetToken"] = Relationship(
106-
back_populates="user")
104+
back_populates="user",
105+
sa_relationship_kwargs={"cascade": "all, delete-orphan"}
106+
)
107107

108108

109109
class UserOrganizationLink(SQLModel, table=True):

0 commit comments

Comments
 (0)