Skip to content

Commit dfd3811

Browse files
committed
rate_limits and tiers endpoints, posts and user model updated, rate_limit schema updated
1 parent b721d92 commit dfd3811

File tree

5 files changed

+54
-42
lines changed

5 files changed

+54
-42
lines changed

src/app/api/v1/rate_limits.py

Lines changed: 39 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,19 @@
1818

1919
router = fastapi.APIRouter(tags=["rate_limits"])
2020

21-
@router.post("/tier/{tier_id}/rate_limit", dependencies=[Depends(get_current_superuser)], status_code=201)
21+
@router.post("/tier/{name}/rate_limit", dependencies=[Depends(get_current_superuser)], status_code=201)
2222
async def write_rate_limit(
2323
request: Request,
24-
tier_id: int,
24+
name: str,
2525
rate_limit: RateLimitCreate,
2626
db: Annotated[AsyncSession, Depends(async_get_db)]
2727
):
28-
db_tier = await crud_tiers.exists(db=db, id=tier_id)
28+
db_tier = await crud_tiers.get(db=db, name=name)
2929
if not db_tier:
3030
raise HTTPException(status_code=404, detail="Tier not found")
3131

3232
rate_limit_internal_dict = rate_limit.model_dump()
33-
rate_limit_internal_dict["tier_id"] = tier_id
33+
rate_limit_internal_dict["tier_id"] = db_tier["id"]
3434

3535
db_rate_limit = await crud_rate_limits.exists(db=db, name=rate_limit_internal_dict["name"])
3636
if db_rate_limit:
@@ -40,15 +40,15 @@ async def write_rate_limit(
4040
return await crud_rate_limits.create(db=db, object=rate_limit_internal)
4141

4242

43-
@router.get("/tier/{tier_id}/rate_limits", response_model=PaginatedListResponse[RateLimitRead])
43+
@router.get("/tier/{name}/rate_limits", response_model=PaginatedListResponse[RateLimitRead])
4444
async def read_rate_limits(
4545
request: Request,
46-
tier_id: int,
46+
name: str,
4747
db: Annotated[AsyncSession, Depends(async_get_db)],
4848
page: int = 1,
4949
items_per_page: int = 10
5050
):
51-
db_tier = await crud_tiers.exists(db=db, id=tier_id)
51+
db_tier = await crud_tiers.get(db=db, name=name)
5252
if not db_tier:
5353
raise HTTPException(status_code=404, detail="Tier not found")
5454

@@ -57,7 +57,7 @@ async def read_rate_limits(
5757
offset=compute_offset(page, items_per_page),
5858
limit=items_per_page,
5959
schema_to_select=RateLimitRead,
60-
tier_id=tier_id
60+
tier_id=db_tier["id"]
6161
)
6262

6363
return paginated_response(
@@ -67,58 +67,73 @@ async def read_rate_limits(
6767
)
6868

6969

70-
@router.get("/tier/{tier_id}/rate_limit/{id}", response_model=RateLimitRead)
70+
@router.get("/tier/{tier_name}/rate_limit/{id}", response_model=RateLimitRead)
7171
async def read_rate_limit(
7272
request: Request,
73-
tier_id: int,
74-
id: int,
73+
tier_name: str,
74+
id: int,
7575
db: Annotated[AsyncSession, Depends(async_get_db)]
7676
):
77-
db_tier = await crud_tiers.exists(db=db, id=tier_id)
77+
db_tier = await crud_tiers.get(db=db, name=tier_name)
7878
if not db_tier:
7979
raise HTTPException(status_code=404, detail="Tier not found")
8080

81-
db_rate_limit = await crud_rate_limits.get(db=db, schema_to_select=RateLimitRead, id=id)
81+
db_rate_limit = await crud_rate_limits.get(
82+
db=db,
83+
schema_to_select=RateLimitRead,
84+
tier_id=db_tier["id"],
85+
id=id
86+
)
8287
if db_rate_limit is None:
8388
raise HTTPException(status_code=404, detail="Rate Limit not found")
8489

8590
return db_rate_limit
8691

8792

88-
@router.patch("/tier/{tier_id}/rate_limit/{id}", dependencies=[Depends(get_current_superuser)])
93+
@router.patch("/tier/{tier_name}/rate_limit/{path}", dependencies=[Depends(get_current_superuser)])
8994
async def patch_rate_limit(
9095
request: Request,
91-
tier_id: int,
96+
tier_name: str,
9297
id: int,
9398
values: RateLimitUpdate,
9499
db: Annotated[AsyncSession, Depends(async_get_db)]
95100
):
96-
db_tier = await crud_tiers.exists(db=db, id=tier_id)
101+
db_tier = await crud_tiers.get(db=db, name=tier_name)
97102
if not db_tier:
98103
raise HTTPException(status_code=404, detail="Tier not found")
99104

100-
db_rate_limit = await crud_rate_limits.get(db=db, schema_to_select=RateLimitRead, id=id)
105+
db_rate_limit = await crud_rate_limits.get(
106+
db=db,
107+
schema_to_select=RateLimitRead,
108+
tier_id=db_tier["id"],
109+
id=id
110+
)
101111
if db_rate_limit is None:
102112
raise HTTPException(status_code=404, detail="Rate Limit not found")
103113

104-
await crud_rate_limits.update(db=db, object=values, id=id)
114+
await crud_rate_limits.update(db=db, object=values, id=db_rate_limit["id"])
105115
return {"message": "Rate Limit updated"}
106116

107117

108-
@router.delete("/tier/{tier_id}/rate_limit/{id}", dependencies=[Depends(get_current_superuser)])
118+
@router.delete("/tier/{tier_name}/rate_limit/{path}", dependencies=[Depends(get_current_superuser)])
109119
async def erase_rate_limit(
110120
request: Request,
111-
tier_id: int,
112-
id: int,
121+
tier_name: str,
122+
id: int,
113123
db: Annotated[AsyncSession, Depends(async_get_db)]
114124
):
115-
db_tier = await crud_tiers.exists(db=db, id=tier_id)
125+
db_tier = await crud_tiers.get(db=db, name=tier_name)
116126
if not db_tier:
117127
raise HTTPException(status_code=404, detail="Tier not found")
118128

119-
db_rate_limit = await crud_rate_limits.get(db=db, schema_to_select=RateLimitRead, id=id)
129+
db_rate_limit = await crud_rate_limits.get(
130+
db=db,
131+
schema_to_select=RateLimitRead,
132+
tier_id=db_tier["id"],
133+
id=id
134+
)
120135
if db_rate_limit is None:
121136
raise HTTPException(status_code=404, detail="Rate Limit not found")
122137

123-
await crud_rate_limits.delete(db=db, db_row=db_rate_limit, id=id)
138+
await crud_rate_limits.delete(db=db, db_row=db_rate_limit, id=db_rate_limit["id"])
124139
return {"message": "Rate Limit deleted"}

src/app/api/v1/tiers.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -53,43 +53,43 @@ async def read_tiers(
5353
)
5454

5555

56-
@router.get("/tier/{id}", response_model=TierRead)
56+
@router.get("/tier/{name}", response_model=TierRead)
5757
async def read_tier(
5858
request: Request,
59-
id: int,
59+
name: str,
6060
db: Annotated[AsyncSession, Depends(async_get_db)]
6161
):
62-
db_tier = await crud_tiers.get(db=db, schema_to_select=TierRead, id=id)
62+
db_tier = await crud_tiers.get(db=db, schema_to_select=TierRead, name=name)
6363
if db_tier is None:
6464
raise HTTPException(status_code=404, detail="Tier not found")
6565

6666
return db_tier
6767

6868

69-
@router.patch("/tier/{id}", dependencies=[Depends(get_current_superuser)])
69+
@router.patch("/tier/{name}", dependencies=[Depends(get_current_superuser)])
7070
async def patch_tier(
7171
request: Request,
7272
values: TierUpdate,
73-
id: int,
73+
name: str,
7474
db: Annotated[AsyncSession, Depends(async_get_db)]
7575
):
76-
db_tier = await crud_tiers.get(db=db, schema_to_select=TierRead, id=id)
76+
db_tier = await crud_tiers.get(db=db, schema_to_select=TierRead, name=name)
7777
if db_tier is None:
7878
raise HTTPException(status_code=404, detail="Tier not found")
7979

80-
await crud_tiers.update(db=db, object=values, id=id)
80+
await crud_tiers.update(db=db, object=values, name=name)
8181
return {"message": "Tier updated"}
8282

8383

84-
@router.delete("/tier/{id}", dependencies=[Depends(get_current_superuser)])
84+
@router.delete("/tier/{name}", dependencies=[Depends(get_current_superuser)])
8585
async def erase_tier(
8686
request: Request,
87-
id: int,
87+
name: str,
8888
db: Annotated[AsyncSession, Depends(async_get_db)]
8989
):
90-
db_tier = await crud_tiers.get(db=db, schema_to_select=TierRead, id=id)
90+
db_tier = await crud_tiers.get(db=db, schema_to_select=TierRead, name=name)
9191
if db_tier is None:
9292
raise HTTPException(status_code=404, detail="Tier not found")
9393

94-
await crud_tiers.delete(db=db, db_row=db_tier, id=id)
94+
await crud_tiers.delete(db=db, db_row=db_tier, name=name)
9595
return {"message": "Tier deleted"}

src/app/models/post.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ class Post(Base):
2020
)
2121
media_url: Mapped[str | None] = mapped_column(String, default=None)
2222

23-
user: Mapped["User"] = relationship(back_populates="posts", lazy="selectin", init=False)
24-
2523
created_at: Mapped[datetime] = mapped_column(
2624
DateTime, default_factory=datetime.utcnow
2725
)

src/app/models/user.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,3 @@ class User(Base):
3535

3636
tier_id: Mapped[int | None] = mapped_column(ForeignKey("tier.id"), index=True, default=None)
3737

38-
posts: Mapped[List[Post]] = relationship(back_populates="user", cascade="all, delete", lazy="selectin", default_factory=list)
39-
#tier: Mapped[Tier | None] = relationship(back_populates="users", lazy="selectin", default=None)

src/app/schemas/rate_limit.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
class RateLimitBase(BaseModel):
99
path: Annotated[
1010
str,
11-
Field(examples=["/users"])
11+
Field(examples=["users"])
1212
]
1313
limit: Annotated[
1414
int,
@@ -26,13 +26,14 @@ class RateLimit(TimestampModel, RateLimitBase):
2626
str | None,
2727
Field(
2828
default=None,
29-
examples=["/users:5:60"]
29+
examples=["users:5:60"]
3030
)
3131
]
3232

3333

3434
class RateLimitRead(RateLimitBase):
3535
id: int
36+
tier_id: int
3637
name: str
3738

3839

@@ -43,7 +44,7 @@ class RateLimitCreate(RateLimitBase):
4344
str | None,
4445
Field(
4546
default=None,
46-
examples=["/users:5:60"]
47+
examples=["api_v1_users:5:60"]
4748
)
4849
]
4950

0 commit comments

Comments
 (0)