{"id":17440927,"url":"https://github.com/ath31st/cam_stream_manager","last_synced_at":"2026-04-08T20:03:20.595Z","repository":{"id":256430767,"uuid":"855248442","full_name":"ath31st/cam_stream_manager","owner":"ath31st","description":"A web service for managing camera streams. Making new ones, editing, tracking the status of streams.","archived":false,"fork":false,"pushed_at":"2026-02-06T11:41:52.000Z","size":61238,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-06T19:25:59.443Z","etag":null,"topics":["antd","biomejs","docker-compose","dockerfile","feature-sliced-design","fsd","full-stack","jwt-authentication","nginx","node-cron","nodejs","prisma","prisma-orm","react","refresh-token","sqlite3","typescript","zustand"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ath31st.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-09-10T15:07:42.000Z","updated_at":"2026-02-06T11:41:56.000Z","dependencies_parsed_at":"2024-09-18T14:08:50.626Z","dependency_job_id":"95175a22-1df3-469f-a2c4-e0d493e30ba2","html_url":"https://github.com/ath31st/cam_stream_manager","commit_stats":{"total_commits":510,"total_committers":1,"mean_commits":510.0,"dds":0.0,"last_synced_commit":"7c86e0dfe83ff0f01e20ac5b082045595e1feac2"},"previous_names":["ath31st/cam_stream_manager"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ath31st/cam_stream_manager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ath31st%2Fcam_stream_manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ath31st%2Fcam_stream_manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ath31st%2Fcam_stream_manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ath31st%2Fcam_stream_manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ath31st","download_url":"https://codeload.github.com/ath31st/cam_stream_manager/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ath31st%2Fcam_stream_manager/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31571601,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["antd","biomejs","docker-compose","dockerfile","feature-sliced-design","fsd","full-stack","jwt-authentication","nginx","node-cron","nodejs","prisma","prisma-orm","react","refresh-token","sqlite3","typescript","zustand"],"created_at":"2024-10-17T15:05:17.388Z","updated_at":"2026-04-08T20:03:20.577Z","avatar_url":"https://github.com/ath31st.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Stream manager/player\n\nЭто фулл-стек приложение для просмотра и управления потоковыми видео.\n\n---\n\n## Оглавление\n\n1. [Описание проекта](#описание-проекта)\n2. [Пример работы](#пример-работы)\n3. [Технологии](#технологии)\n4. [Установка](#установка)\n5. [Использование](#использование)\n6. [Архитектура проекта](#архитектура-проекта)\n7. [Автор](#автор)\n8. [Лицензия](#лицензия)\n\n---\n\n## Описание проекта\n\nЭто полнофункциональное **full-stack приложение** для просмотра и управления потоковыми видео. Оно включает в себя:\n\n1. **Видеоплеер** для воспроизведения потокового видео.\n2. **Администраторский интерфейс**, который позволяет:\n   - Создавать, обновлять и удалять информацию о видеопотоках.\n   - Мониторить состояние потоков в реальном времени.\n3. **Систему управление группами**:\n   - Создавать, обновлять и удалять группы, которые определяют доступ к тем или иным плейлистам.\n4. **Систему управления пользователями**:\n   - Регистрацию и управление учетными записями пользователей.\n   - Назначение ролей и прав доступа (например, администраторы, ответственные лица и т.д.).\n5. **Управление ответственными лицами**:\n   - Указание сотрудников, отвечающих за работоспособность потоков.\n\nПриложение обеспечивает удобный и интуитивно понятный интерфейс для всех пользователей, а также надежную систему управления контентом и доступом.\n\n---\n\n## Пример работы\n\nВидео-демонстрация работы приложения:\n\n[Пример работы](https://github.com/user-attachments/assets/48b19a4f-5859-4b8e-b85a-27fd662e524b)\n\n---\n\n## Технологии\n\nСписок основных технологий и инструментов, использованных в проекте:\n\n- Backend: TypeScript, Node.js, Express, Prisma, Sqlite.\n- Frontend: TypeScript, React, Ant Design.\n- Дополнительные: Zustand, JWT, Docker Compose, Nginx.\n\n---\n\n## Установка\n\nДля запуска проекта необходимо установить зависимости как для клиентской, так и для серверной части.\n\n### Клиентская часть\n\n1. Перейдите в папку `client`:\n\n   ```bash\n   cd client\n   ```\n\n2. Установите зависимости:\n\n   ```bash\n   npm install\n   ```\n\n3. Запустите клиентскую часть в режиме разработки:\n\n   ```bash\n   npm start\n   ```\n\n4. Для сборки проекта:\n   ```bash\n   npm run build\n   ```\n\n### Серверная часть\n\n1. Перейдите в папку `server`:\n\n   ```bash\n   cd server\n   ```\n\n2. Установите зависимости:\n\n   ```bash\n   npm install\n   ```\n\n3. Запустите сервер в режиме разработки:\n\n   ```bash\n   npm run dev\n   ```\n\n4. Для сборки и запуска в production-режиме:\n   ```bash\n   npm run deploy\n   npm run start:prod\n   ```\n\n### Настройка окружения\n\n1. Создайте файлы `.env.dev` и `.env.prod` в папке `server` для настройки переменных окружения. Пример содержимого:\n\n   ```env\n   DATABASE_URL=\"file:./name_for_db.db\" // путь к базе данных\n   PORT=3001 // порт сервера\n   JWT_SECRET=\"secret_phrase\" // секретная фраза для аксес токена (придумайте свою)\n   JWT_REFRESH_SECRET=\"refresh_secret_phrase\" // секретная фраза для токена обновления (придумайте свою)\n   TOKEN_EXPIRATION=\"1h\" // время жизни токена\n   REFRESH_TOKEN_EXPIRATION=\"1d\" // время жизни токена обновления\n   CRON_SCHEDULE=\"*/1 * * * *\" // частота запуска пингера видео потоков\n   STREAM_PING_TIMEOUT=2000 // время ожидания ответа от потока, в данном случае - 2 секунды\n   ```\n\n2. Для клиентской части создайте файл `.env` в папке `client` для настройки переменных окружения. Пример содержимого:\n\n   ```env\n   REACT_APP_API_URL=http://localhost:3001 // адрес сервера (указывате в формате IP адреса:порт)\n   REACT_APP_HEALTH_CHECK_INTERVAL=5000 // время ожидания ответа от сервера, в данном случае - 5 секунд\n   ```\n\n### Миграции и база данных\n\n1. Для применения миграций в режиме разработки:\n\n   ```bash\n   npm run dbr:dev\n   ```\n\n2. Для применения миграций в production-режиме:\n   ```bash\n   npm run dbr:prod\n   ```\n\n### Линтинг и форматирование\n\n- Для проверки кода на соответствие стандартам:\n\n  ```bash\n  npm run lint\n  ```\n\n- Для автоматического форматирования кода:\n  ```bash\n  npm run format\n  ```\n\n## Использование\n\n1. Подготовьте конфигурационные файлы.\n2. Запустите контейнеры приложения:\n   ```bash\n   cd cam_stream_manager \u0026\u0026 docker-compose up -d\n   ```\n3. Откройте браузер и перейдите по адресу:\n   ```url\n   http://localhost:80\n   ```\n\n---\n\n## Архитектура проекта\n\nКраткое описание структуры проекта:\n\nКлиентская часть была построена с применением FSD (Feature Sliced Design) архитектуры.\n\n- `/client` — папка с фронтенд-частью приложения.\n\n  - **`/public`** — публичная папка, содержит статические файлы (`index.html`, favicon, изображения и т.д.).\n  - **`/src`** — папка с кодом приложения.\n    - **`/app`** — слой инициализации приложения.\n      - **`/layouts`** — компоненты макетов (header, footer, sider).\n      - **`/providers`** — провайдеры для управления состоянием и контекстом (auth, axios, global styles).\n      - **`/routes`** — конфигурация маршрутов приложения.\n      - **`/stores`** — глобальное состояние приложения (Zustand).\n      - **`/styles`** — глобальные стили и темы.\n      - **`/App.tsx`** — корневой компонент приложения.\n    - **`/entities`** — бизнес-сущности приложения.\n    - **`/features`** — фичи приложения (авторизация, статус сервера).\n    - **`/pages`** — страницы приложения (главная страница, админ-панель, 401, 403).\n    - **`/shared`** — переиспользуемые компоненты и утилиты.\n    - **`/widgets`** — самостоятельные блоки интерфейса.\n\n- `/server` — папка с бэкенд-частью приложения:\n\n  - **`/prisma`** — схема базы данных и миграции.\n  - **`/src`** — основной код приложения.\n    - **`/config`** — конфигурационные файлы.\n    - **`/controller`** — контроллеры для обработки HTTP-запросов.\n    - **`/cron`** — конфигурация cron-задач для запуска пингера видео потоков.\n    - **`/database`** — создание объекта клиента призмы и сиды.\n    - **`/mappers`** — мапперы для преобразования объектов приложения.\n    - **`/midlware`** — auth-мидлвар для обработки HTTP-запросов.\n    - **`/repositories`** — репозитории для работы с базой данных.\n    - **`/routes`** — конфигурация маршрутов.\n    - **`/services`** — сервисы приложения (передача данных, бизнес-логика).\n    - **`/types`** — типы данных серверной части.\n    - **`/utils`** — вспомогательные функции и утилиты.\n    - **`/validators`** — валидаторы данных.\n\n- `/shared` — папка с общими типами и интерфейсами для сервера и клиента.\n\n- `docker-compose.yml` — композ-файл Docker Compose, который определяет конфигурацию контейнеров\n  приложения для сборки образов когда есть интернет.\n- `docker-compose.offline.yml` — композ-файл Docker Compose, который определяет конфигурацию контейнеров\n  приложения для поднятия готовых образов, когда нет доступа к интернету.\n- `Dockerfile.server` — Dockerfile для сборки образа сервера приложения.\n- `Dockerfile.client` — Dockerfile для сборки образа клиента приложения.\n\n---\n\n## Автор\n\n- **Владимир Оленников**\n- [GitHub](https://github.com/ath31st) | [LinkedIn](https://www.linkedin.com/in/ath31st/)\n\n---\n\n## Лицензия\n\nЭтот проект лицензируется в соответствии с лицензией MIT.\nПодробнее в файле [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fath31st%2Fcam_stream_manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fath31st%2Fcam_stream_manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fath31st%2Fcam_stream_manager/lists"}