v0.0.18.3 Добавлении миграции для подписок/подписчиков. Добавлена проверка на userID = 0 для MessageStream
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
madipo2611 2025-08-17 21:27:15 +03:00
parent cadf06a932
commit 60c8c8e7bb
3 changed files with 28 additions and 0 deletions

View File

@ -120,6 +120,11 @@ func (r *queryResolver) GetUserChats(ctx context.Context, userID int) ([]*domain
// MessageStream реализация подписки на новые сообщения // MessageStream реализация подписки на новые сообщения
func (r *subscriptionResolver) MessageStream(ctx context.Context, userID int) (<-chan *domain.Message, error) { func (r *subscriptionResolver) MessageStream(ctx context.Context, userID int) (<-chan *domain.Message, error) {
if userID == 0 {
return nil, fmt.Errorf("user not authenticated")
}
stream, err := r.MessageClient.StreamMessages(ctx, &proto.StreamMessagesRequest{ stream, err := r.MessageClient.StreamMessages(ctx, &proto.StreamMessagesRequest{
UserId: int32(userID), UserId: int32(userID),
}) })

View File

@ -0,0 +1,2 @@
DROP TABLE IF EXISTS subscription_notifications CASCADE;
DROP TABLE IF EXISTS subscriptions CASCADE;

View File

@ -0,0 +1,21 @@
CREATE TABLE subscriptions (
id SERIAL PRIMARY KEY,
follower_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, -- Кто подписывается
following_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, -- На кого подписываются
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
UNIQUE(follower_id, following_id), -- Уникальная подписка
CHECK (follower_id <> following_id) -- Запрет подписки на самого себя
);
-- Уведомления о подписках
CREATE TABLE subscription_notifications (
id SERIAL PRIMARY KEY,
subscription_id INTEGER NOT NULL REFERENCES subscriptions(id) ON DELETE CASCADE,
is_read BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
);
-- Индексы для улучшения производительности
CREATE INDEX idx_subscriptions_follower_id ON subscriptions(follower_id);
CREATE INDEX idx_subscriptions_following_id ON subscriptions(following_id);
CREATE INDEX idx_subscription_notifications_subscription_id ON subscription_notifications(subscription_id);