last_uddated for user_stats, swtich to timestamptz

This commit is contained in:
Andreas Köpf
2023-01-19 22:07:08 +01:00
parent 7a1a8c8b54
commit 038d1cc004
12 changed files with 70 additions and 12 deletions
@@ -0,0 +1,47 @@
"""switch to timestamp with tz
Revision ID: 7f0a28a156f4
Revises: 0964ac95170d
Create Date: 2023-01-19 21:53:01.107137
"""
import sqlalchemy as sa
from alembic import op
# revision identifiers, used by Alembic.
revision = "7f0a28a156f4"
down_revision = "0964ac95170d"
branch_labels = None
depends_on = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.alter_column(table_name="user_stats", column_name="modified_date", type_=sa.DateTime(timezone=True))
op.alter_column(table_name="user_stats", column_name="base_date", type_=sa.DateTime(timezone=True))
op.alter_column(table_name="journal_integration", column_name="last_run", type_=sa.DateTime(timezone=True))
op.alter_column(table_name="message_embedding", column_name="created_date", type_=sa.DateTime(timezone=True))
op.alter_column(table_name="message_reaction", column_name="created_date", type_=sa.DateTime(timezone=True))
op.alter_column(table_name="message_toxicity", column_name="created_date", type_=sa.DateTime(timezone=True))
op.alter_column(table_name="message", column_name="created_date", type_=sa.DateTime(timezone=True))
op.alter_column(table_name="task", column_name="created_date", type_=sa.DateTime(timezone=True))
op.alter_column(table_name="task", column_name="expiry_date", type_=sa.DateTime(timezone=True))
op.alter_column(table_name="text_labels", column_name="created_date", type_=sa.DateTime(timezone=True))
op.alter_column(table_name="user", column_name="created_date", type_=sa.DateTime(timezone=True))
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.alter_column(table_name="user_stats", column_name="modified_date", type_=sa.DateTime(timezone=False))
op.alter_column(table_name="user_stats", column_name="base_date", type_=sa.DateTime(timezone=False))
op.alter_column(table_name="journal_integration", column_name="last_run", type_=sa.DateTime(timezone=False))
op.alter_column(table_name="message_embedding", column_name="created_date", type_=sa.DateTime(timezone=False))
op.alter_column(table_name="message_reaction", column_name="created_date", type_=sa.DateTime(timezone=False))
op.alter_column(table_name="message_toxicity", column_name="created_date", type_=sa.DateTime(timezone=False))
op.alter_column(table_name="message", column_name="created_date", type_=sa.DateTime(timezone=False))
op.alter_column(table_name="task", column_name="created_date", type_=sa.DateTime(timezone=False))
op.alter_column(table_name="task", column_name="expiry_date", type_=sa.DateTime(timezone=False))
op.alter_column(table_name="text_labels", column_name="created_date", type_=sa.DateTime(timezone=False))
op.alter_column(table_name="user", column_name="created_date", type_=sa.DateTime(timezone=False))
# ### end Alembic commands ###
+1 -1
View File
@@ -50,6 +50,6 @@ class JournalIntegration(SQLModel, table=True):
)
description: str = Field(max_length=512, primary_key=True)
last_journal_id: Optional[UUID] = Field(foreign_key="journal.id", nullable=True)
last_run: Optional[datetime] = Field(sa_column=sa.Column(sa.DateTime(), nullable=True))
last_run: Optional[datetime] = Field(sa_column=sa.Column(sa.DateTime(timezone=True), nullable=True))
last_error: Optional[str] = Field(nullable=True)
next_run: Optional[datetime] = Field(nullable=True)
+3 -1
View File
@@ -30,7 +30,9 @@ class Message(SQLModel, table=True):
api_client_id: UUID = Field(nullable=False, foreign_key="api_client.id")
frontend_message_id: str = Field(max_length=200, nullable=False)
created_date: Optional[datetime] = Field(
sa_column=sa.Column(sa.DateTime(), nullable=False, server_default=sa.func.current_timestamp(), index=True)
sa_column=sa.Column(
sa.DateTime(timezone=True), nullable=False, server_default=sa.func.current_timestamp(), index=True
)
)
payload_type: str = Field(nullable=False, max_length=200)
payload: Optional[PayloadContainer] = Field(
@@ -17,5 +17,5 @@ class MessageEmbedding(SQLModel, table=True):
# In the case that the Message Embedding is created afterwards
created_date: Optional[datetime] = Field(
sa_column=sa.Column(sa.DateTime(), nullable=False, server_default=sa.func.current_timestamp())
sa_column=sa.Column(sa.DateTime(timezone=True), nullable=False, server_default=sa.func.current_timestamp())
)
@@ -19,7 +19,9 @@ class MessageReaction(SQLModel, table=True):
sa_column=sa.Column(pg.UUID(as_uuid=True), sa.ForeignKey("user.id"), nullable=False, primary_key=True)
)
created_date: Optional[datetime] = Field(
sa_column=sa.Column(sa.DateTime(), nullable=False, server_default=sa.func.current_timestamp(), index=True)
sa_column=sa.Column(
sa.DateTime(timezone=True), nullable=False, server_default=sa.func.current_timestamp(), index=True
)
)
payload_type: str = Field(nullable=False, max_length=200)
payload: PayloadContainer = Field(sa_column=sa.Column(payload_column_type(PayloadContainer), nullable=False))
@@ -20,5 +20,5 @@ class MessageToxicity(SQLModel, table=True):
# In the case that the Message Embedding is created afterwards
created_date: Optional[datetime] = Field(
sa_column=sa.Column(sa.DateTime(), nullable=False, server_default=sa.func.current_timestamp())
sa_column=sa.Column(sa.DateTime(timezone=True), nullable=False, server_default=sa.func.current_timestamp())
)
+2 -2
View File
@@ -20,9 +20,9 @@ class Task(SQLModel, table=True):
),
)
created_date: Optional[datetime] = Field(
sa_column=sa.Column(sa.DateTime(), nullable=False, server_default=sa.func.current_timestamp()),
sa_column=sa.Column(sa.DateTime(timezone=True), nullable=False, server_default=sa.func.current_timestamp()),
)
expiry_date: Optional[datetime] = Field(sa_column=sa.Column(sa.DateTime(), nullable=True))
expiry_date: Optional[datetime] = Field(sa_column=sa.Column(sa.DateTime(timezone=True), nullable=True))
user_id: Optional[UUID] = Field(nullable=True, foreign_key="user.id", index=True)
payload_type: str = Field(nullable=False, max_length=200)
payload: PayloadContainer = Field(sa_column=sa.Column(payload_column_type(PayloadContainer), nullable=False))
+3 -1
View File
@@ -17,7 +17,9 @@ class TextLabels(SQLModel, table=True):
)
user_id: UUID = Field(sa_column=sa.Column(pg.UUID(as_uuid=True), sa.ForeignKey("user.id"), nullable=False))
created_date: Optional[datetime] = Field(
sa_column=sa.Column(sa.DateTime(), nullable=False, server_default=sa.func.current_timestamp(), index=True),
sa_column=sa.Column(
sa.DateTime(timezone=True), nullable=False, server_default=sa.func.current_timestamp(), index=True
),
)
api_client_id: UUID = Field(nullable=False, foreign_key="api_client.id")
text: str = Field(nullable=False, max_length=2**16)
+1 -1
View File
@@ -21,7 +21,7 @@ class User(SQLModel, table=True):
auth_method: str = Field(nullable=False, max_length=128, default="local")
display_name: str = Field(nullable=False, max_length=256)
created_date: Optional[datetime] = Field(
sa_column=sa.Column(sa.DateTime(), nullable=False, server_default=sa.func.current_timestamp())
sa_column=sa.Column(sa.DateTime(timezone=True), nullable=False, server_default=sa.func.current_timestamp())
)
api_client_id: UUID = Field(foreign_key="api_client.id")
enabled: bool = Field(sa_column=sa.Column(sa.Boolean, nullable=False, server_default=sa.true()))
+2 -2
View File
@@ -26,11 +26,11 @@ class UserStats(SQLModel, table=True):
user_id: Optional[UUID] = Field(
sa_column=sa.Column(pg.UUID(as_uuid=True), sa.ForeignKey("user.id"), primary_key=True)
)
base_date: Optional[datetime] = Field(sa_column=sa.Column(sa.DateTime(), nullable=True))
base_date: Optional[datetime] = Field(sa_column=sa.Column(sa.DateTime(timezone=True), nullable=True))
leader_score: int = 0
modified_date: Optional[datetime] = Field(
sa_column=sa.Column(sa.DateTime(), nullable=False, server_default=sa.func.current_timestamp())
sa_column=sa.Column(sa.DateTime(timezone=True), nullable=False, server_default=sa.func.current_timestamp())
)
rank: int = Field(nullable=True)
@@ -45,7 +45,11 @@ class UserStatsRepository:
)
leaderboard = [_create_user_score(r) for r in self.session.exec(qry)]
return LeaderboardStats(time_frame=time_frame.value, leaderboard=leaderboard)
if len(leaderboard) > 0:
last_update = max(x.modified_date for x in leaderboard)
else:
last_update = utcnow()
return LeaderboardStats(time_frame=time_frame.value, leaderboard=leaderboard, last_updated=last_update)
def get_user_stats_all_time_frames(self, user_id: UUID) -> dict[str, UserScore | None]:
qry = (
@@ -392,6 +392,7 @@ class UserScore(BaseModel):
class LeaderboardStats(BaseModel):
time_frame: str
last_updated: datetime
leaderboard: List[UserScore]