Skip to content

Commit fad612c

Browse files
committed
feature: user profile creation task added & automatic user profile creation added
1 parent 02e511f commit fad612c

File tree

5 files changed

+53
-8
lines changed

5 files changed

+53
-8
lines changed

migrations/versions/b2f432857772_user_profiles.py renamed to migrations/versions/2399e36ed221_user_profiles.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
"""user_profiles
22
3-
Revision ID: b2f432857772
3+
Revision ID: 2399e36ed221
44
Revises: 2e1f47c5da46
5-
Create Date: 2024-10-09 22:39:33.774071
5+
Create Date: 2024-10-09 22:47:22.743476
66
77
"""
88

@@ -12,7 +12,7 @@
1212
from alembic import op
1313
from sqlalchemy.dialects import postgresql
1414

15-
revision: str = "b2f432857772"
15+
revision: str = "2399e36ed221"
1616
down_revision: Union[str, None] = "2e1f47c5da46"
1717
branch_labels: Union[str, Sequence[str], None] = None
1818
depends_on: Union[str, Sequence[str], None] = None
@@ -23,8 +23,18 @@ def upgrade() -> None:
2323
"user_profiles",
2424
sa.Column("uid", sa.UUID(), nullable=False),
2525
sa.Column("user_uid", sa.UUID(), nullable=False),
26-
sa.Column("bio", sa.VARCHAR(), nullable=False),
27-
sa.Column("avatar", sa.VARCHAR(), nullable=False),
26+
sa.Column(
27+
"bio",
28+
sa.VARCHAR(),
29+
server_default="Tell the Bookly community a little about yourself! You can mention your favorite genres, what kinds of books you're currently reading or offering, and whether you're open to lending, borrowing, or selling books. Help others get to know your reading style and what you're looking for!",
30+
nullable=False,
31+
),
32+
sa.Column(
33+
"avatar",
34+
sa.VARCHAR(),
35+
server_default="https://api.dicebear.com/9.x/adventurer-neutral/png?seed=Adrian",
36+
nullable=False,
37+
),
2838
sa.Column("created_at", postgresql.TIMESTAMP(), nullable=False),
2939
sa.Column("updated_at", postgresql.TIMESTAMP(), nullable=False),
3040
sa.ForeignKeyConstraint(

src/auth/routes.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
UserResetPasswordSchema,
1919
)
2020
from .service import PasswordResetLogService, TokenBlackListService, UserService
21+
from .tasks import create_user_profile_task
2122
from .utils import (
2223
decode_url_safe_token,
2324
generate_password_hash,
@@ -117,6 +118,8 @@ async def activate_user(
117118
{"first_name": user.first_name},
118119
)
119120

121+
await create_user_profile_task(user_uid, session)
122+
120123
await token_blacklist_service.blacklist_token(
121124
activation_token, datetime.fromtimestamp(expires_at), session
122125
)

src/auth/service.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
from sqlalchemy import delete, select
44
from sqlmodel.ext.asyncio.session import AsyncSession
55

6+
from src.profile.models import UserProfile
7+
68
from .models import PasswordResetLog, TokenBlacklist, User
79
from .schemas import UserCreateSchema
810
from .utils import generate_password_hash
@@ -58,6 +60,16 @@ async def update_user(
5860

5961
return user
6062

63+
async def create_user_profile(self, user_uid: str, session: AsyncSession) -> None:
64+
user = await session.get(User, user_uid)
65+
profile = UserProfile(
66+
user_uid=user.uid,
67+
avatar=f"https://api.dicebear.com/9.x/adventurer-neutral/png?seed={user.username}",
68+
)
69+
70+
session.add(profile)
71+
await session.commit()
72+
6173

6274
class TokenBlackListService:
6375
async def blacklist_token(

src/auth/tasks.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import asyncio
22

33
import celery
4+
from sqlmodel.ext.asyncio.session import AsyncSession
45

6+
from pkg.celery_app import celery_app
57
from pkg.db import get_session
6-
from src.auth.service import PasswordResetLogService, TokenBlackListService
8+
from src.auth.service import PasswordResetLogService, TokenBlackListService, UserService
79

810

911
@celery.shared_task
@@ -24,3 +26,9 @@ async def async_clear_password_reset_logs():
2426
await password_reset_log_service.clear_password_reset_logs(session)
2527

2628
asyncio.run(async_clear_password_reset_logs())
29+
30+
31+
@celery_app.task
32+
async def create_user_profile_task(user_uid: str, session: AsyncSession):
33+
user_service = UserService()
34+
await user_service.create_user_profile(user_uid, session)

src/profile/models.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,20 @@ class UserProfile(SQLModel, table=True):
1414
user_uid: uuid.UUID = Field(
1515
sa_column=Column(pg.UUID, ForeignKey("users.uid"), nullable=False)
1616
)
17-
bio: str = Field(sa_column=Column(pg.VARCHAR, nullable=False))
18-
avatar: str = Field(sa_column=Column(pg.VARCHAR, nullable=False))
17+
bio: str = Field(
18+
sa_column=Column(
19+
pg.VARCHAR,
20+
nullable=False,
21+
server_default="Tell the Bookly community a little about yourself! You can mention your favorite genres, what kinds of books you're currently reading or offering, and whether you're open to lending, borrowing, or selling books. Help others get to know your reading style and what you're looking for!",
22+
)
23+
)
24+
avatar: str = Field(
25+
sa_column=Column(
26+
pg.VARCHAR,
27+
nullable=False,
28+
server_default="https://api.dicebear.com/9.x/adventurer-neutral/png?seed=Adrian",
29+
)
30+
)
1931
created_at: datetime = Field(
2032
sa_column=Column(pg.TIMESTAMP, nullable=False, default=datetime.now)
2133
)

0 commit comments

Comments
 (0)