From 8fb4bf11172464ac2cf50296a05b3ed9d0379c0e Mon Sep 17 00:00:00 2001 From: YueGuobin Date: Tue, 3 Mar 2026 21:35:26 +0800 Subject: [PATCH] feat(db): manually set timestamps for SQLite compatibility Add explicit datetime.utcnow() assignments for created_at and updated_at fields in LLMModelConfigsRepository to ensure proper timestamp handling with SQLite. This addresses issues where SQLite may not automatically populate these timestamp fields during create and update operations. Changes applied to both user and group configuration methods for consistency. --- .../db/repositories/llm_model_configs.py | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/gns3server/db/repositories/llm_model_configs.py b/gns3server/db/repositories/llm_model_configs.py index 6d340f89f..884a54cef 100644 --- a/gns3server/db/repositories/llm_model_configs.py +++ b/gns3server/db/repositories/llm_model_configs.py @@ -20,6 +20,7 @@ from typing import Optional, List, Dict, Any from sqlalchemy import select, update, delete, func, and_, or_ from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.orm import selectinload +from datetime import datetime import json import logging @@ -84,12 +85,16 @@ class LLMModelConfigsRepository(BaseRepository): log.error(f"Failed to encrypt API key: {e}") raise + # Set timestamps manually for SQLite compatibility + now = datetime.utcnow() db_config = models.LLMModelConfig( name=name, model_type=model_type, config=config_to_store, user_id=user_id, - is_default=is_default + is_default=is_default, + created_at=now, + updated_at=now ) self._db_session.add(db_config) await self._db_session.commit() @@ -168,6 +173,8 @@ class LLMModelConfigsRepository(BaseRepository): db_config.config = current_config # Increment version for optimistic locking db_config.version = db_config.version + 1 + # Update timestamp manually for SQLite compatibility + db_config.updated_at = datetime.utcnow() await self._db_session.commit() await self._db_session.refresh(db_config) return db_config @@ -186,6 +193,7 @@ class LLMModelConfigsRepository(BaseRepository): async def set_user_default_config(self, user_id: UUID, config_id: UUID) -> bool: """Set a user's default LLM model configuration.""" + now = datetime.utcnow() # First, unset current default await self._db_session.execute( update(models.LLMModelConfig) @@ -195,7 +203,7 @@ class LLMModelConfigsRepository(BaseRepository): models.LLMModelConfig.is_default == True ) ) - .values(is_default=False) + .values(is_default=False, updated_at=now) ) # Set new default @@ -204,7 +212,7 @@ class LLMModelConfigsRepository(BaseRepository): models.LLMModelConfig.config_id == config_id, models.LLMModelConfig.user_id == user_id ) - ).values(is_default=True) + ).values(is_default=True, updated_at=now) result = await self._db_session.execute(query) await self._db_session.commit() return result.rowcount > 0 @@ -260,12 +268,16 @@ class LLMModelConfigsRepository(BaseRepository): log.error(f"Failed to encrypt API key: {e}") raise + # Set timestamps manually for SQLite compatibility + now = datetime.utcnow() db_config = models.LLMModelConfig( name=name, model_type=model_type, config=config_to_store, group_id=group_id, - is_default=is_default + is_default=is_default, + created_at=now, + updated_at=now ) self._db_session.add(db_config) await self._db_session.commit() @@ -344,6 +356,8 @@ class LLMModelConfigsRepository(BaseRepository): db_config.config = current_config # Increment version for optimistic locking db_config.version = db_config.version + 1 + # Update timestamp manually for SQLite compatibility + db_config.updated_at = datetime.utcnow() await self._db_session.commit() await self._db_session.refresh(db_config) return db_config @@ -362,6 +376,7 @@ class LLMModelConfigsRepository(BaseRepository): async def set_group_default_config(self, group_id: UUID, config_id: UUID) -> bool: """Set a group's default LLM model configuration.""" + now = datetime.utcnow() # First, unset current default await self._db_session.execute( update(models.LLMModelConfig) @@ -371,7 +386,7 @@ class LLMModelConfigsRepository(BaseRepository): models.LLMModelConfig.is_default == True ) ) - .values(is_default=False) + .values(is_default=False, updated_at=now) ) # Set new default @@ -380,7 +395,7 @@ class LLMModelConfigsRepository(BaseRepository): models.LLMModelConfig.config_id == config_id, models.LLMModelConfig.group_id == group_id ) - ).values(is_default=True) + ).values(is_default=True, updated_at=now) result = await self._db_session.execute(query) await self._db_session.commit() return result.rowcount > 0