diff --git a/backend/.env.example b/backend/.env.example index 54abed1..1581b25 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -11,11 +11,11 @@ CH_JWT_SECRET=change-me-in-production CH_JWT_EXPIRY_HOURS=72 # Tencent COS -CH_COS_SECRET_ID= -CH_COS_SECRET_KEY= -CH_COS_REGION=ap-hongkong -CH_COS_BUCKET= -CH_COS_BASE_URL= +CH_COS_SECRET_ID=AKIDUxR3TfeWDbqFQQDn9INJ1U8annY7TbWN +CH_COS_SECRET_KEY=jJitIUTFyf5WvDPXiigS2PaaMtCJSQCn +CH_COS_REGION=ap-guangzhou +CH_COS_BUCKET=hku-icb-1311994147 +CH_COS_BASE_URL=https://hku-icb-1311994147.cos.ap-guangzhou.myqcloud.com # SMTP Email CH_SMTP_HOST= @@ -23,7 +23,7 @@ CH_SMTP_PORT=465 CH_SMTP_USER= CH_SMTP_PASSWORD= CH_SMTP_FROM_EMAIL= -CH_SMTP_FROM_NAME=ClassHub +CH_SMTP_FROM_NAME=HKU ICB # Frontend URL CH_FRONTEND_URL=http://localhost:3000 diff --git a/backend/app/config.py b/backend/app/config.py index c4e8995..dca2318 100644 --- a/backend/app/config.py +++ b/backend/app/config.py @@ -28,7 +28,7 @@ class Settings(BaseSettings): smtp_user: str = "" smtp_password: str = "" smtp_from_email: str = "" - smtp_from_name: str = "ClassHub" + smtp_from_name: str = "HKU ICB" # Frontend URL frontend_url: str = "http://localhost:3000" diff --git a/backend/app/db/models.py b/backend/app/db/models.py index 9bba718..cd2ff6c 100644 --- a/backend/app/db/models.py +++ b/backend/app/db/models.py @@ -53,6 +53,7 @@ class User(Base): position: Mapped[str | None] = mapped_column(String(100), nullable=True) skills_tags: Mapped[str | None] = mapped_column(Text, nullable=True) # JSON array wechat_id: Mapped[str | None] = mapped_column(String(100), nullable=True) + phone: Mapped[str | None] = mapped_column(String(20), nullable=True) avatar_url: Mapped[str | None] = mapped_column(Text, nullable=True) bio: Mapped[str | None] = mapped_column(Text, nullable=True) diff --git a/backend/app/main.py b/backend/app/main.py index 2a3907f..2ee5459 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -66,7 +66,7 @@ async def lifespan(app: FastAPI): app = FastAPI( - title="ClassHub", + title="HKU ICB", description="HKU ICB Graduate Class Resource Platform", version="1.0.0", lifespan=lifespan, @@ -74,7 +74,7 @@ app = FastAPI( app.add_middleware( CORSMiddleware, - allow_origins=[settings.frontend_url, "http://localhost:3000"], + allow_origins=[settings.frontend_url, "http://localhost:3000", "http://192.168.31.172:3000"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], diff --git a/backend/app/schemas/user.py b/backend/app/schemas/user.py index 04487b1..1e13277 100644 --- a/backend/app/schemas/user.py +++ b/backend/app/schemas/user.py @@ -17,6 +17,7 @@ class UserOut(BaseModel): position: str | None skills_tags: list[str] | None wechat_id: str | None + phone: str | None avatar_url: str | None bio: str | None created_at: datetime @@ -44,6 +45,7 @@ class UserPublic(BaseModel): position: str | None skills_tags: list[str] | None wechat_id: str | None + phone: str | None avatar_url: str | None bio: str | None @@ -71,6 +73,7 @@ class UserUpdate(BaseModel): position: str | None = None skills_tags: list[str] | None = None wechat_id: str | None = None + phone: str | None = None bio: str | None = None diff --git a/backend/app/services/directory_service.py b/backend/app/services/directory_service.py index 9cafd64..6ef826a 100644 --- a/backend/app/services/directory_service.py +++ b/backend/app/services/directory_service.py @@ -72,6 +72,7 @@ def user_to_public(user: User, include_contact: bool = True) -> UserPublic: position=user.position, skills_tags=user.get_skills_list(), wechat_id=user.wechat_id if include_contact else None, + phone=user.phone if include_contact else None, avatar_url=user.avatar_url, bio=user.bio, ) diff --git a/backend/app/services/email_service.py b/backend/app/services/email_service.py index cec043a..43b4cb4 100644 --- a/backend/app/services/email_service.py +++ b/backend/app/services/email_service.py @@ -42,9 +42,9 @@ async def send_registration_notification( html = f"""
{student_name} has registered for {class_name}.
-Please log in to ClassHub to review and approve.
+Please log in to HKU ICB to review and approve.
""" - await send_email(admin_email, "ClassHub: New Registration", html) + await send_email(admin_email, "HKU ICB: New Registration", html) async def send_approval_notification(student_email: str, approved: bool): @@ -52,8 +52,8 @@ async def send_approval_notification(student_email: str, approved: bool): html = f"""Your registration has been {status_text}.
- {"You can now log in to ClassHub.
" if approved else ""} + {"You can now log in to HKU ICB.
" if approved else ""} """ await send_email( - student_email, f"ClassHub: Registration {status_text.capitalize()}", html + student_email, f"HKU ICB: Registration {status_text.capitalize()}", html )