Skip to content

Commit 57c5956

Browse files
committed
added front-end forms
1 parent 4052865 commit 57c5956

7 files changed

Lines changed: 493 additions & 205 deletions

File tree

blog.db

0 Bytes
Binary file not shown.

main.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ async def lifespan(_app: FastAPI):
4545
@app.get("/posts", include_in_schema=False, name="posts")
4646
async def home(request: Request, db: Annotated[AsyncSession, Depends(get_db)]):
4747
result = await db.execute(
48-
select(models.Post).options(selectinload(models.Post.author)),
48+
select(models.Post)
49+
.options(selectinload(models.Post.author))
50+
.order_by(models.Post.date_posted.desc())
4951
)
5052
posts = result.scalars().all()
5153
return templates.TemplateResponse(
@@ -93,7 +95,8 @@ async def user_posts_page(
9395
result = await db.execute(
9496
select(models.Post)
9597
.options(selectinload(models.Post.author))
96-
.where(models.Post.user_id == user_id),
98+
.where(models.Post.user_id == user_id)
99+
.order_by(models.Post.date_posted.desc())
97100
)
98101
posts = result.scalars().all()
99102
return templates.TemplateResponse(

routers/posts.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
@router.get("", response_model=list[PostResponse])
1515
async def get_posts(db: Annotated[AsyncSession, Depends(get_db)]):
1616
result = await db.execute(
17-
select(models.Post).options(selectinload(models.Post.author)),
17+
select(models.Post)
18+
.options(selectinload(models.Post.author))
19+
.order_by(models.Post.date_posted.desc())
1820
)
1921
posts = result.scalars().all()
2022
return posts
@@ -27,7 +29,7 @@ async def get_posts(db: Annotated[AsyncSession, Depends(get_db)]):
2729
)
2830
async def create_post(post: PostCreate, db: Annotated[AsyncSession, Depends(get_db)]):
2931
result = await db.execute(
30-
select(models.User).where(models.User.id == post.user_id),
32+
select(models.User).where(models.User.id == post.user_id)
3133
)
3234
user = result.scalars().first()
3335
if not user:

routers/users.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ async def get_user_posts(user_id: int, db: Annotated[AsyncSession, Depends(get_d
7070
result = await db.execute(
7171
select(models.Post)
7272
.options(selectinload(models.Post.author))
73-
.where(models.Post.user_id == user_id),
73+
.where(models.Post.user_id == user_id)
74+
.order_by(models.Post.date_posted.desc())
7475
)
7576
posts = result.scalars().all()
7677
return posts

static/js/utils.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Error message extraction from API responses
2+
export function getErrorMessage(error) {
3+
if (typeof error.detail === "string") {
4+
return error.detail;
5+
} else if (Array.isArray(error.detail)) {
6+
return error.detail.map((err) => err.msg).join(". ");
7+
}
8+
return "An error occurred. Please try again.";
9+
}
10+
11+
// Show a Bootstrap modal by ID
12+
export function showModal(modalId) {
13+
const modal = bootstrap.Modal.getOrCreateInstance(
14+
document.getElementById(modalId),
15+
);
16+
modal.show();
17+
return modal;
18+
}
19+
20+
// Hide a Bootstrap modal by ID
21+
export function hideModal(modalId) {
22+
const modal = bootstrap.Modal.getInstance(document.getElementById(modalId));
23+
if (modal) modal.hide();
24+
}

0 commit comments

Comments
 (0)