feat: integrate Peg AI wellness coach
This commit is contained in:
+23
-2
@@ -1,4 +1,6 @@
|
||||
from datetime import datetime, timezone
|
||||
import secrets
|
||||
import uuid
|
||||
from fastapi import Depends, FastAPI, HTTPException, Response
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from fastapi.security import OAuth2PasswordRequestForm
|
||||
@@ -7,7 +9,8 @@ from sqlalchemy.orm import Session
|
||||
from .config import get_settings
|
||||
from .db import Base, engine, get_db
|
||||
from .models import Entry, Profile, User
|
||||
from .schemas import EntryIn, EntryOut, ProfileIn, ProfileOut, Register, Token
|
||||
from .schemas import CoachChatIn, CoachChatOut, EntryIn, EntryOut, ProfileIn, ProfileOut, Register, Token
|
||||
from .coach import chat_with_peg
|
||||
from .security import current_user, hash_password, make_token, verify_password
|
||||
|
||||
cfg = get_settings()
|
||||
@@ -28,6 +31,11 @@ def health():
|
||||
return {"status": "ok", "medical_notice": "MetaBloom does not diagnose or replace medical care."}
|
||||
|
||||
|
||||
@app.post("/coach/chat", response_model=CoachChatOut)
|
||||
async def coach_chat(data: CoachChatIn, user: User = Depends(current_user)):
|
||||
return await chat_with_peg(data, cfg)
|
||||
|
||||
|
||||
@app.post("/auth/register", response_model=Token, status_code=201)
|
||||
def register(data: Register, db: Session = Depends(get_db)):
|
||||
email = data.email.lower()
|
||||
@@ -39,6 +47,20 @@ def register(data: Register, db: Session = Depends(get_db)):
|
||||
return Token(access_token=make_token(user.id))
|
||||
|
||||
|
||||
@app.post("/auth/guest", response_model=Token, status_code=201)
|
||||
def guest_session(db: Session = Depends(get_db)):
|
||||
"""Create a private pseudonymous session for a first app launch."""
|
||||
user = User(
|
||||
email=f"guest-{uuid.uuid4()}@local.invalid",
|
||||
password_hash=hash_password(secrets.token_urlsafe(32)),
|
||||
)
|
||||
db.add(user)
|
||||
db.flush()
|
||||
db.add(Profile(user_id=user.id))
|
||||
db.commit()
|
||||
return Token(access_token=make_token(user.id))
|
||||
|
||||
|
||||
@app.post("/auth/token", response_model=Token)
|
||||
def login(form: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(get_db)):
|
||||
user = db.scalar(select(User).where(User.email == form.username.lower()))
|
||||
@@ -106,4 +128,3 @@ def export_account(user: User = Depends(current_user)):
|
||||
def delete_account(user: User = Depends(current_user), db: Session = Depends(get_db)):
|
||||
db.delete(user); db.commit()
|
||||
return Response(status_code=204)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user