Spaces:
Sleeping
Sleeping
| from datetime import datetime | |
| import uuid | |
| from sqlmodel import select | |
| from sqlmodel.ext.asyncio.session import AsyncSession | |
| from src.core.models import Users | |
| from src.journaling.models import JournalEntry | |
| from src.journaling.schemas import JournalCreate, JournalUpdate | |
| async def create_or_update_journal(data: JournalCreate, session: AsyncSession): | |
| user = await session.exec(select(Users).where(Users.id == data.user_id)) | |
| if not user.first(): | |
| raise ValueError("User not found") | |
| query = select(JournalEntry).where( | |
| JournalEntry.user_id == data.user_id, | |
| JournalEntry.journal_date == data.journal_date | |
| ) | |
| existing = (await session.exec(query)).first() | |
| if existing: | |
| existing.title = data.title | |
| existing.content = data.content | |
| existing.updated_at = datetime.utcnow() | |
| record = existing | |
| else: | |
| record = JournalEntry( | |
| user_id=data.user_id, | |
| title=data.title, | |
| content=data.content, | |
| journal_date=data.journal_date, | |
| ) | |
| session.add(record) | |
| await session.commit() | |
| await session.refresh(record) | |
| return record | |
| async def get_all_journals(user_id: uuid.UUID, session: AsyncSession): | |
| stmt = ( | |
| select(JournalEntry) | |
| .where(JournalEntry.user_id == user_id) | |
| .order_by(JournalEntry.journal_date.desc()) | |
| ) | |
| result = await session.exec(stmt) | |
| return result.all() | |
| async def get_journal(journal_id: uuid.UUID, user_id: uuid.UUID, session: AsyncSession): | |
| stmt = select(JournalEntry).where(JournalEntry.id == journal_id) | |
| result = await session.exec(stmt) | |
| record = result.first() | |
| if not record: | |
| raise ValueError("Journal entry not found") | |
| if str(record.user_id) != user_id: | |
| raise ValueError("Not authorized") | |
| return record | |
| async def update_journal( | |
| journal_id: uuid.UUID, | |
| data: JournalUpdate, | |
| user_id: uuid.UUID, | |
| session: AsyncSession, | |
| ): | |
| record = await get_journal(journal_id, user_id, session) | |
| if data.title is not None: | |
| record.title = data.title | |
| if data.content is not None: | |
| record.content = data.content | |
| if data.journal_date is not None: | |
| record.journal_date = data.journal_date | |
| record.updated_at = datetime.utcnow() | |
| await session.commit() | |
| await session.refresh(record) | |
| return record | |
| async def delete_journal(journal_id: uuid.UUID, user_id: uuid.UUID, session: AsyncSession): | |
| record = await get_journal(journal_id, user_id, session) | |
| await session.delete(record) | |
| await session.commit() | |