Fix database path configuration and SQLite settings

This commit is contained in:
Automated Action 2025-05-21 12:49:05 +00:00
parent 16cfcd783e
commit 4a891f1dad
11 changed files with 30 additions and 21 deletions

View File

@ -55,7 +55,7 @@ version_path_separator = os # Use os.pathsep. Default configuration used for ne
# are written from script.py.mako
# output_encoding = utf-8
sqlalchemy.url = sqlite:///./app/storage/db/db.sqlite
sqlalchemy.url = sqlite:///app/storage/db/db.sqlite
[post_write_hooks]
# post_write_hooks defines scripts or Python functions that are run

View File

@ -7,7 +7,6 @@ from alembic import context
from app.core.config import settings
from app.db.session import Base
from app.models import User, Conversation, Message, conversation_participants
# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
@ -69,10 +68,20 @@ def run_migrations_online() -> None:
)
with connectable.connect() as connection:
# For SQLite, we need to enable foreign keys and use batch mode for migrations
is_sqlite = connection.dialect.name == "sqlite"
context.configure(
connection=connection, target_metadata=target_metadata
connection=connection,
target_metadata=target_metadata,
# This is important for SQLite to support ALTER operations properly
render_as_batch=is_sqlite
)
# Enable foreign key constraints for SQLite
if is_sqlite:
connection.execute("PRAGMA foreign_keys=ON")
with context.begin_transaction():
context.run_migrations()

View File

@ -1,4 +1,3 @@
from typing import Generator, Optional
from fastapi import Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer
@ -7,7 +6,6 @@ from pydantic import ValidationError
from sqlalchemy.orm import Session
from app.core.config import settings
from app.core.security import verify_password
from app.db.repositories.user import user_repository
from app.db.session import get_db
from app.models.user import User

View File

@ -8,7 +8,7 @@ from app.db.repositories.message import message_repository
from app.db.repositories.conversation import conversation_repository
from app.db.session import get_db
from app.models.user import User
from app.schemas.message import Message, MessageCreate, MessageUpdate
from app.schemas.message import Message, MessageCreate
router = APIRouter(tags=["messages"])

View File

@ -1,9 +1,8 @@
import json
from typing import Dict, List, Any
import asyncio
from typing import Dict, Any
from datetime import datetime
from fastapi import APIRouter, Depends, WebSocket, WebSocketDisconnect, HTTPException, status
from fastapi import APIRouter, Depends, WebSocket, WebSocketDisconnect
from sqlalchemy.orm import Session
from jose import jwt, JWTError
@ -231,7 +230,7 @@ async def websocket_endpoint(websocket: WebSocket, db: Session = Depends(get_db)
# Remove user from connected users
if user and user.id in connected_users:
del connected_users[user.id]
except Exception as e:
except Exception:
# Handle any other exceptions
if user and user.id in connected_users:
del connected_users[user.id]

View File

@ -1,3 +1,4 @@
import os
from pathlib import Path
import secrets
from typing import List
@ -16,7 +17,9 @@ class Settings(BaseSettings):
CORS_ORIGINS: List[str] = ["*"]
# Database
DB_DIR = Path("/app/storage/db")
# Use current working directory as base by default, or app directory if in container
BASE_DIR = Path(os.getenv("APP_BASE_DIR", os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))))
DB_DIR = BASE_DIR / "app" / "storage" / "db"
DB_DIR.mkdir(parents=True, exist_ok=True)
SQLALCHEMY_DATABASE_URL: str = f"sqlite:///{DB_DIR}/db.sqlite"

View File

@ -57,7 +57,7 @@ class ConversationRepository(BaseRepository[Conversation, ConversationCreate, Co
# Find direct conversations (not groups) where both users are participants
conversations = (
db.query(Conversation)
.filter(Conversation.is_group == False)
.filter(not Conversation.is_group)
.join(conversation_participants, Conversation.id == conversation_participants.c.conversation_id)
.filter(conversation_participants.c.user_id.in_([user_id_1, user_id_2]))
.all()

View File

@ -63,7 +63,7 @@ class MessageRepository(BaseRepository[Message, MessageCreate, MessageUpdate]):
return (
db.query(Message)
.filter(Message.recipient_id == user_id)
.filter(Message.is_read == False)
.filter(not Message.is_read)
.count()
)

View File

@ -1,3 +1,3 @@
from app.models.user import User
from app.models.conversation import Conversation, conversation_participants
from app.models.message import Message
from app.models.user import User # noqa: F401
from app.models.conversation import Conversation, conversation_participants # noqa: F401
from app.models.message import Message # noqa: F401

View File

@ -1,3 +1,3 @@
from app.schemas.user import User, UserCreate, UserUpdate, UserInDB
from app.schemas.message import Message, MessageCreate, MessageUpdate, MessageInDB
from app.schemas.conversation import Conversation, ConversationCreate, ConversationUpdate, ConversationInDB
from app.schemas.user import User, UserCreate, UserUpdate, UserInDB # noqa: F401
from app.schemas.message import Message, MessageCreate, MessageUpdate, MessageInDB # noqa: F401
from app.schemas.conversation import Conversation, ConversationCreate, ConversationUpdate, ConversationInDB # noqa: F401

View File

@ -1,7 +1,7 @@
from datetime import datetime
from typing import Optional, List
from typing import Optional
from pydantic import BaseModel, EmailStr, Field
from pydantic import BaseModel, EmailStr
class UserBase(BaseModel):
username: str