feat: ability to add and view blogs for a user

This commit is contained in:
2025-06-24 18:54:48 -04:00
parent 07c0977aa7
commit 7da38ddd8c
26 changed files with 1553 additions and 142 deletions
+48 -8
View File
@@ -1,17 +1,56 @@
from pydantic import BaseModel, EmailStr
from typing import Optional
from pydantic import AwareDatetime, BaseModel, EmailStr
# DB Schemas
class ItemBase(BaseModel):
name: str
description: str | None = None
class BlogBase(BaseModel):
title: str
author_id: int
description: Optional[str] = None
body: str
created_at: AwareDatetime
updated_at: AwareDatetime
published_at: AwareDatetime
# Document meta
word_count: Optional[int] = None
version: Optional[int] = None
read_time: Optional[int] = None
language: Optional[str] = None
tags: Optional[list[str]] = None
class Item(ItemBase):
class BlogCreate(BlogBase):
"""All fields required to create a new blog post."""
pass
class BlogUpdate(BaseModel):
"""All fields are optional for partial updates."""
title: Optional[str] = None
description: Optional[str] = None
body: Optional[str] = None
created_at: Optional[str] = None
updated_at: Optional[str] = None
published_at: Optional[str] = None
word_count: Optional[int] = None
version: Optional[int] = None
read_time: Optional[int] = None
language: Optional[str] = None
tags: Optional[list[str]] = None
view_count: Optional[int] = None
like_count: Optional[int] = None
class Blog(BlogBase):
"""Whats returned in responses."""
id: int
view_count: int
like_count: int
class Config:
from_attributes = True
@@ -41,6 +80,7 @@ class UserOut(UserBase):
class Token(BaseModel):
access_token: str
token_type: str
user_id: int
class TokenData(BaseModel):