"""Seed static content Revision ID: 018_seed_static_content Revises: 017_admin_logs_nullable_admin_id Create Date: 2024-12-20 """ from typing import Sequence, Union from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. revision: str = '018_seed_static_content' down_revision: Union[str, None] = '017_admin_logs_nullable_admin_id' branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None STATIC_CONTENT_DATA = [ { 'key': 'terms_of_service', 'title': 'Пользовательское соглашение', 'content': '''

Настоящее Пользовательское соглашение (далее — «Соглашение») регулирует отношения между администрацией интернет-сервиса «Игровой Марафон» (далее — «Сервис», «Платформа», «Мы») и физическим лицом, использующим Сервис (далее — «Пользователь», «Вы»).

Дата вступления в силу: с момента регистрации на Платформе.
Используя Сервис, Вы подтверждаете, что полностью ознакомились с условиями настоящего Соглашения и принимаете их в полном объёме.


1. Общие положения

1.1. Сервис «Игровой Марафон» представляет собой онлайн-платформу для организации и проведения игровых марафонов — соревнований, в рамках которых участники выполняют игровые задания (челленджи) и получают очки за их успешное выполнение.

1.2. Сервис предоставляет Пользователям следующие возможности:

1.3. Сервис предоставляется на условиях «как есть» (as is). Администрация не гарантирует, что Сервис будет соответствовать ожиданиям Пользователя или работать бесперебойно.


2. Регистрация и учётная запись

2.1. Для доступа к функционалу Сервиса необходима регистрация учётной записи. При регистрации Пользователь обязуется предоставить достоверные данные.

2.2. Пользователь несёт полную ответственность за:

2.3. Каждый Пользователь имеет право на одну учётную запись. Создание дополнительных аккаунтов (мультиаккаунтинг) запрещено и влечёт блокировку всех связанных учётных записей.

2.4. Пользователь вправе в любой момент удалить свою учётную запись, обратившись к Администрации. При удалении аккаунта все связанные данные будут безвозвратно удалены.


3. Правила использования Сервиса

3.1. При использовании Сервиса запрещается:

3.2. Правила проведения марафонов:

3.3. Организаторы марафонов несут ответственность за соблюдение правил в рамках своих мероприятий и имеют право устанавливать дополнительные правила, не противоречащие настоящему Соглашению.


4. Система очков и рейтинг

4.1. За выполнение заданий Пользователи получают очки, количество которых зависит от сложности задания и активных игровых событий.

4.2. Очки используются исключительно для формирования рейтинга участников в рамках марафонов и не имеют денежного эквивалента.

4.3. Администрация оставляет за собой право корректировать начисленные очки в случае выявления нарушений или технических ошибок.


5. Ответственность сторон

5.1. Администрация не несёт ответственности за:

5.2. Пользователь несёт ответственность за соблюдение условий настоящего Соглашения и применимого законодательства.


6. Санкции за нарушения

6.1. За нарушение условий настоящего Соглашения Администрация вправе применить следующие санкции:

6.2. Решение о применении санкций принимается Администрацией единолично и является окончательным. Администрация не обязана объяснять причины принятого решения.

6.3. Обход блокировки путём создания новых учётных записей влечёт блокировку всех выявленных аккаунтов.


7. Интеллектуальная собственность

7.1. Все элементы Сервиса (дизайн, код, тексты, логотипы) являются объектами интеллектуальной собственности Администрации и защищены применимым законодательством.

7.2. Использование материалов Сервиса без письменного разрешения Администрации запрещено.


8. Изменение условий Соглашения

8.1. Администрация вправе в одностороннем порядке изменять условия настоящего Соглашения.

8.2. Актуальная редакция Соглашения размещается на данной странице с указанием даты последнего обновления.

8.3. Продолжение использования Сервиса после внесения изменений означает согласие Пользователя с новой редакцией Соглашения.


9. Заключительные положения

9.1. Настоящее Соглашение регулируется законодательством Российской Федерации.

9.2. Все споры, возникающие в связи с использованием Сервиса, подлежат разрешению путём переговоров. При недостижении согласия споры разрешаются в судебном порядке по месту нахождения Администрации.

9.3. Признание судом недействительности какого-либо положения настоящего Соглашения не влечёт недействительности остальных положений.

9.4. По всем вопросам, связанным с использованием Сервиса, Вы можете обратиться к Администрации через Telegram-бота или иные доступные каналы связи.

''' }, { 'key': 'privacy_policy', 'title': 'Политика конфиденциальности', 'content': '''

Настоящая Политика конфиденциальности (далее — «Политика») описывает, как интернет-сервис «Игровой Марафон» (далее — «Сервис», «Мы») собирает, использует, хранит и защищает персональные данные пользователей (далее — «Пользователь», «Вы»).

Используя Сервис, Вы даёте согласие на обработку Ваших персональных данных в соответствии с условиями настоящей Политики.


1. Собираемые данные

1.1. Данные, предоставляемые Пользователем:

1.2. Данные, собираемые автоматически:


2. Цели обработки данных

2.1. Мы обрабатываем Ваши персональные данные для следующих целей:

Предоставление услуг:

Коммуникация:

Безопасность:


3. Правовые основания обработки

3.1. Обработка персональных данных осуществляется на следующих основаниях:


4. Хранение и защита данных

4.1. Меры безопасности:

4.2. Срок хранения:


5. Передача данных третьим лицам

5.1. Мы не продаём, не сдаём в аренду и не передаём Ваши персональные данные третьим лицам в коммерческих целях.

5.2. Данные могут быть переданы:

5.3. Публично доступная информация:

Следующие данные видны другим Пользователям Сервиса:


6. Права Пользователя

6.1. Вы имеете право:

6.2. Для реализации своих прав обратитесь к Администрации через доступные каналы связи.


7. Файлы cookie и локальное хранилище

7.1. Сервис использует локальное хранилище браузера (localStorage, sessionStorage) для:

7.2. Вы можете очистить локальное хранилище в настройках браузера, однако это приведёт к выходу из учётной записи.


8. Обработка данных несовершеннолетних

8.1. Сервис не предназначен для лиц младше 14 лет. Мы сознательно не собираем персональные данные детей.

8.2. Если Вам стало известно, что ребёнок предоставил нам персональные данные, пожалуйста, свяжитесь с Администрацией для их удаления.


9. Изменение Политики

9.1. Мы оставляем за собой право изменять настоящую Политику. Актуальная редакция всегда доступна на данной странице.

9.2. О существенных изменениях мы уведомим Пользователей через Telegram-бота или баннер на сайте.

9.3. Продолжение использования Сервиса после внесения изменений означает согласие с обновлённой Политикой.


10. Контактная информация

10.1. По вопросам, связанным с обработкой персональных данных, Вы можете обратиться к Администрации через:

10.2. Мы обязуемся рассмотреть Ваше обращение в разумные сроки и предоставить ответ.

''' }, { 'key': 'telegram_bot_info', 'title': 'Привяжите Telegram-бота', 'content': 'Получайте уведомления о событиях марафона, новых заданиях и результатах прямо в Telegram' }, { 'key': 'announcement', 'title': 'Добро пожаловать!', 'content': 'Мы рады приветствовать вас в «Игровом Марафоне»! Создайте свой первый марафон или присоединитесь к существующему по коду приглашения.' } ] def upgrade() -> None: for item in STATIC_CONTENT_DATA: # Use ON CONFLICT to avoid duplicates op.execute(f""" INSERT INTO static_content (key, title, content, created_at, updated_at) VALUES ('{item['key']}', '{item['title'].replace("'", "''")}', '{item['content'].replace("'", "''")}', NOW(), NOW()) ON CONFLICT (key) DO NOTHING """) def downgrade() -> None: keys = [f"'{item['key']}'" for item in STATIC_CONTENT_DATA] op.execute(f"DELETE FROM static_content WHERE key IN ({', '.join(keys)})")