feat(privacy): страница политики конфиденциальности на /privacy

This commit is contained in:
nk
2026-06-08 13:55:44 +03:00
parent 0dd52ddc3b
commit e1bceb8bd1
3 changed files with 95 additions and 0 deletions

View File

@@ -10,6 +10,7 @@ import { HealthCheckModule } from './health-check/health-check.module';
import { ChartsModule } from './charts/charts.module'; import { ChartsModule } from './charts/charts.module';
import { AppVersionModule } from './app-version/app-version.module'; import { AppVersionModule } from './app-version/app-version.module';
import { ShazamModule } from './shazam/shazam.module'; import { ShazamModule } from './shazam/shazam.module';
import { PrivacyModule } from './privacy/privacy.module';
@Module({ @Module({
imports: [ imports: [
@@ -24,6 +25,7 @@ import { ShazamModule } from './shazam/shazam.module';
ChartsModule, ChartsModule,
AppVersionModule, AppVersionModule,
ShazamModule, ShazamModule,
PrivacyModule,
], ],
}) })
export class AppModule {} export class AppModule {}

View File

@@ -0,0 +1,88 @@
import { Controller, Get, Header } from '@nestjs/common';
// Статическая страница политики конфиденциальности (для карточки RuStore).
// HTML хранится константой — без внешних файлов, чтобы не зависеть от копирования
// ассетов в Docker-образ.
const PRIVACY_HTML = `<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Политика конфиденциальности radiOLA</title>
<style>
body{font:16px/1.6 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;max-width:760px;margin:40px auto;padding:0 18px;color:#1a1a1a;background:#fff}
h1{font-size:1.6rem;margin-bottom:.2rem}
h2{font-size:1.15rem;margin-top:2rem}
.date{color:#666;margin-top:0}
ul{padding-left:1.2rem}
a{color:#2b7a2b}
footer{margin-top:3rem;color:#888;font-size:.9rem}
</style>
</head>
<body>
<h1>Политика конфиденциальности приложения radiOLA</h1>
<p class="date">Дата вступления в силу: 8 июня 2026 г.</p>
<p>Настоящая Политика описывает, какие данные обрабатывает мобильное приложение
radiOLA («Приложение»), с какой целью и как вы можете ими управлять. Используя
Приложение, вы соглашаетесь с условиями настоящей Политики.</p>
<h2>1. Какие данные мы обрабатываем</h2>
<ul>
<li><b>Адрес электронной почты</b> — только если вы добровольно входите в аккаунт.
Вход не обязателен и нужен лишь для синхронизации избранного и истории между
устройствами. Авторизация выполняется по одноразовой ссылке (magic-link); пароль
мы не храним.</li>
<li><b>История прослушиваний и распознанных треков</b> — сохраняется локально на
вашем устройстве. При входе в аккаунт история станций также сохраняется на сервере
для синхронизации.</li>
<li><b>Технические данные об ошибках</b> — при сбоях Приложение может отправлять
обезличенный отчёт об ошибке (тип устройства, версия приложения, стек вызовов) в
нашу систему мониторинга для исправления проблем.</li>
</ul>
<p>Приложение <b>не</b> собирает ваши контакты, геолокацию, СМС и не отслеживает вас
в других приложениях.</p>
<h2>2. Сторонние сервисы</h2>
<ul>
<li><b>shazam-api.com</b> — при нажатии кнопки «Распознать трек» короткий фрагмент
аудио текущего радиопотока передаётся сервису распознавания музыки для определения
исполнителя и названия. Фрагмент не содержит ваших персональных данных.</li>
<li><b>Discogs</b> — для получения обложек и сведений о треках мы передаём название
и исполнителя композиции.</li>
<li><b>Радиостанции третьих лиц</b> — воспроизведение ведётся напрямую с серверов
вещателей; на их потоки распространяются их собственные условия.</li>
</ul>
<h2>3. Цели обработки</h2>
<p>Данные обрабатываются исключительно для работы функций Приложения: воспроизведение
радио, синхронизация избранного и истории, распознавание треков, отображение обложек и
исправление технических ошибок. Мы не продаём и не передаём ваши данные третьим лицам
в рекламных целях.</p>
<h2>4. Хранение и удаление</h2>
<p>Локальные данные (история, настройки) хранятся на вашем устройстве и удаляются при
удалении Приложения или очистке его данных. Данные аккаунта на сервере хранятся, пока
существует аккаунт. Вы можете запросить удаление аккаунта и связанных данных, написав
нам (см. контакты ниже).</p>
<h2>5. Изменения политики</h2>
<p>Мы можем обновлять настоящую Политику. Актуальная версия всегда доступна по этому
адресу.</p>
<h2>6. Контакты</h2>
<p>По вопросам обработки персональных данных и для запроса на их удаление:
<a href="mailto:blinnafeg@gmail.com">blinnafeg@gmail.com</a>.</p>
<footer>radiOLA — интернет-радио. © 2026</footer>
</body>
</html>`;
@Controller()
export class PrivacyController {
@Get('privacy')
@Header('Content-Type', 'text/html; charset=utf-8')
getPrivacy(): string {
return PRIVACY_HTML;
}
}

View File

@@ -0,0 +1,5 @@
import { Module } from '@nestjs/common';
import { PrivacyController } from './privacy.controller';
@Module({ controllers: [PrivacyController] })
export class PrivacyModule {}