refactored
Some checks failed
Deploy on push / deploy (push) Failing after 6s

This commit is contained in:
2025-08-17 17:56:31 +03:00
parent e78e12eeee
commit 9a2b792f08
98 changed files with 702 additions and 904 deletions

View File

@@ -13,15 +13,15 @@ from sqlalchemy import (
UniqueConstraint,
distinct,
func,
text,
)
from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.orm import Mapped, mapped_column
from auth.orm import Author
from orm.base import BaseModel
from orm.shout import Shout
from services.db import local_session
from auth.rbac_interface import get_rbac_operations
from rbac.interface import get_rbac_operations
from storage.db import local_session
# Словарь названий ролей
role_names = {
@@ -355,7 +355,13 @@ class CommunityStats:
@property
def shouts(self) -> int:
return self.community.session.query(func.count(Shout.id)).filter(Shout.community == self.community.id).scalar()
return (
self.community.session.query(func.count(1))
.select_from(text("shout"))
.filter(text("shout.community_id = :community_id"))
.params(community_id=self.community.id)
.scalar()
)
@property
def followers(self) -> int:
@@ -370,12 +376,10 @@ class CommunityStats:
# author has a shout with community id and its featured_at is not null
return (
self.community.session.query(func.count(distinct(Author.id)))
.join(Shout)
.filter(
Shout.community == self.community.id,
Shout.featured_at.is_not(None),
Author.id.in_(Shout.authors),
)
.select_from(text("author"))
.join(text("shout"), text("author.id IN (SELECT author_id FROM shout_author WHERE shout_id = shout.id)"))
.filter(text("shout.community_id = :community_id"), text("shout.featured_at IS NOT NULL"))
.params(community_id=self.community.id)
.scalar()
)
@@ -498,7 +502,7 @@ class CommunityAuthor(BaseModel):
# Используем fallback на проверку ролей
return permission in self.role_list
except Exception:
# FIXME: Fallback: проверяем роли (старый способ)
# TODO: Fallback: проверяем роли (старый способ)
return any(permission == role for role in self.role_list)
def dict(self, access: bool = False) -> dict[str, Any]:

View File

@@ -8,6 +8,7 @@ from auth.orm import Author
from orm.base import BaseModel as Base
from orm.topic import Topic
# Author уже импортирован в начале файла
def get_author_model():
"""Возвращает модель Author для использования в запросах"""

View File

@@ -10,6 +10,7 @@ from auth.orm import Author
from orm.base import BaseModel as Base
from utils.logger import root_logger as logger
# Author уже импортирован в начале файла
def get_author_model():
"""Возвращает модель Author для использования в запросах"""

View File

@@ -7,6 +7,7 @@ from sqlalchemy.orm import Mapped, mapped_column
from auth.orm import Author
from orm.base import BaseModel as Base
# Author уже импортирован в начале файла
def get_author_model():
"""Возвращает модель Author для использования в запросах"""

View File

@@ -4,19 +4,10 @@ from typing import Any
from sqlalchemy import JSON, Boolean, ForeignKey, Index, Integer, PrimaryKeyConstraint, String
from sqlalchemy.orm import Mapped, mapped_column, relationship
# Импорт Author отложен для избежания циклических импортов
from auth.orm import Author
from orm.base import BaseModel as Base
from orm.reaction import Reaction
from orm.topic import Topic
# Author уже импортирован в начале файла
def get_author_model():
"""Возвращает модель Author для использования в запросах"""
return Author
from orm.base import BaseModel
class ShoutTopic(Base):
class ShoutTopic(BaseModel):
"""
Связь между публикацией и темой.
@@ -40,7 +31,7 @@ class ShoutTopic(Base):
)
class ShoutReactionsFollower(Base):
class ShoutReactionsFollower(BaseModel):
__tablename__ = "shout_reactions_followers"
follower: Mapped[int] = mapped_column(ForeignKey("author.id"), index=True)
@@ -57,7 +48,7 @@ class ShoutReactionsFollower(Base):
)
class ShoutAuthor(Base):
class ShoutAuthor(BaseModel):
"""
Связь между публикацией и автором.
@@ -81,7 +72,7 @@ class ShoutAuthor(Base):
)
class Shout(Base):
class Shout(BaseModel):
"""
Публикация в системе.
"""

View File

@@ -14,6 +14,7 @@ from sqlalchemy.orm import Mapped, mapped_column
from auth.orm import Author
from orm.base import BaseModel as Base
# Author уже импортирован в начале файла
def get_author_model():
"""Возвращает модель Author для использования в запросах"""