{"id":31250478,"url":"https://github.com/pavelisik/adbox","last_synced_at":"2026-05-05T14:06:23.377Z","repository":{"id":312388539,"uuid":"1047342358","full_name":"pavelisik/adbox","owner":"pavelisik","description":"Доска объявлений","archived":false,"fork":false,"pushed_at":"2025-10-23T14:07:37.000Z","size":1634,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-23T16:10:45.292Z","etag":null,"topics":["angular","javascript","scss","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pavelisik.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2025-08-30T07:46:14.000Z","updated_at":"2025-10-23T14:07:41.000Z","dependencies_parsed_at":"2025-08-30T09:24:09.875Z","dependency_job_id":"61f3816c-7560-4551-a1da-b6738e9b2799","html_url":"https://github.com/pavelisik/adbox","commit_stats":null,"previous_names":["pavelisik/adbox"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pavelisik/adbox","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavelisik%2Fadbox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavelisik%2Fadbox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavelisik%2Fadbox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavelisik%2Fadbox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pavelisik","download_url":"https://codeload.github.com/pavelisik/adbox/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavelisik%2Fadbox/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32652555,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-05T11:29:49.557Z","status":"ssl_error","status_checked_at":"2026-05-05T11:29:48.587Z","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":["angular","javascript","scss","typescript"],"created_at":"2025-09-23T05:17:18.747Z","updated_at":"2026-05-05T14:06:23.371Z","avatar_url":"https://github.com/pavelisik.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ADBOX - доска объявлений\n\nВеб-приложение на Angular для просмотра и размещения объявлений. Реализована возможность авторизации и регистрации пользователей, изменения настроек пользователей.\n\n## Установка и запуск проекта\n\n1. Клонируйте репозиторий:\n\n```bash\ngit clone https://github.com/pavelisik/adbox.git\n```\n\n2. Перейдите в директорию проекта:\n\n```bash\ncd adbox\n```\n\n3. Установите зависимости:\n\n```bash\nnpm install\n```\n\n4. Запустите проект в режиме разработки:\n\n```bash\nnpm start\n```\n\n5. Откройте приложение в браузере по адресу:\n\n```\nhttp://localhost:4200\n```\n\n## Структура проекта\n\nДиректория **core** - низкоуровневые сущности, необходимые для работы всего приложения:\n\n- `auth` - необходимые для авторизации сервисы и интерфейсы доменов:\n    - `auth.state.service` - сервис для хранения состояния авторизации и токена;\n    - `auth.service` - общий api сервис для авторизации, разлогинивания и подтверждения пароля;\n    - `auth.facade` - фасад для работы с данными по авторизации, синхронизация с cookie, редирект на закрытые страницы;\n    - `local-user.state.service` - сервис для хранения локальных данных пользователя;\n    - `local-user.service` - сервис для локальных данных пользователя, синхронизация с cookie;\n    - `user.state.service` - сервис для хранения серверных данных пользователя;\n    - `user.service` - общий api сервис для пользователей;\n    - `user.facade` - фасад для работы с общими серверными и локальными данными пользователя, работа с избранными объявлениями.\n- `confirmation`\n    - `confirmation.service` - сервис, формирующий confirm-сообщения;\n    - `password-confirmation.service` - сервис для работы логики подтверждения пароля.\n- `dialog`\n    - `dialog.service` - сервис для работы с диалоговыми окнами.\n- `notification`\n    - `notification.service` - сервис, формирующий toast-сообщения.\n- `title`\n    - `title-strategy.service` - сервис, формирующий заголовки title.\n- `guards` - защитники навигации:\n    - `auth.guard` - защитник для авторизованных и неавторизованных пользователей;\n    - `redirect-my-user.guard` - защитник для редиректа на страницу с объявлениями текущего пользователя.\n- `interceptors` - перехватчики запросов:\n    - `constants`\n        - `error-messages` - словарь ошибок сервера в соответствии с проектом;\n        - `error-titles.enum` - стандартные заголовки ошибок в зависимости от статуса запроса.\n    - `utils`\n        - `format-error-response.util` - форматирование информации серверной ошибки для вывода.\n    - `auth.interceptor` - перехватчик запросов для авторизованных пользователей с добавлением токена авторизации;\n    - `errors.interceptor` - перехватчик запросов для вывода toast-сообщений об ошибках;\n    - `images-cache.interceptor` - перехватчик GET-запросов для кэширования полученных Blob-изображений.\n\nДиректория **infrastructure** - сервисы для работы с API, интерфейсы DTO и адаптеры преобразования интерфейсов из DTO в бизнес-домены:\n\n- `advert` - объявления;\n- `authorization` - авторизация;\n- `categories` - категории;\n- `comment` - комментарии;\n- `images` - изображения для объявлений;\n- `users` - пользователи;\n- `dadata` - данные с сервиса dadata.\n\nДиректория **pages** - компоненты отдельных страниц с интерфейсами бизнес-доменов:\n\n- `advert` - страница отображения объявления по его id;\n- `advert-add` - страница с формой добавления нового объявления;\n- `advert-edit` - страница с формой редактирования объявления;\n- `adverts-list` - универсальная страница со списком объявлений (условно отображает содержимое в зависимости от типа страницы в роутах):\n    - `adverts-block` - для отображения небольших списков объявления на главной странице (по избранной категории, избранные объявления, мои объявления и последние объявления);\n    - `adverts-page` - для отображения отдельных страниц со списками объявлений (отфильтрованные объявления, мои объявления, избранные и объявления конкретного пользователя).\n- `not-found` - страница для неопознанных адресов;\n- `settings` - страница с настройками пользователя и удалением пользователя:\n    - `settings-form` - страница с формой изменения основных данных пользователя;\n    - `password-form` - страница с формой изменения пароля.\n\nДиректория **shared** - универсальные компоненты бизнес-логики, диалоговые окна, layout-компоненты, директивы, пайпы, универсальные сервисы бизнес-логики:\n\n- `components` - все универсальные компоненты:\n    - `ad-grid` - универсальный компонент для вывода сетки объявлений;\n        - `ad-grid-item` - компонент для вывода карточки одного объявления в сетке;\n            - `image` - компонент для вывода превью изображения для карточки одного объявления;\n            - `image-buttons` - компонент для вывода кнопок управления объявлением.\n    - `ad-sidebar-filters` - компонент для вывода сайдбара с фильтрами на странице с результатами поиска;\n    - `ad-title` - компонент для вывода заголовка страницы с объявлениями;\n    - `ad-top-filters` - компонент для вывода верхней панели фильтров на странице с результатами поиска;\n        - `picked-filters` - компонент для вывода всех выбранных фильтров с возможностью их удаления;\n    - `breadcrumbs` - компонент для вывода хлебных крошек;\n    - `comments` - компонент для вывода комментариев;\n        - `comments-form` - универсальная форма ввода нового комментария, ответа на комментарий или редактирования;\n        - `comments-list` - вывод списка с комментариями;\n            - `comment` - вывод отдельно каждого комментария;\n    - `forms` - папка с компонентами, необходимых для форм:\n        - `address-block` - блок для ввода адреса с синхронизацией с локальными данными;\n        - `address-input` - ввод адреса с использованием автокомплита;\n        - `control-error` - компонент для вывода ошибок для FormControls;\n        - `password-input` - компонент, формирующий текстовое поле для ввода пароля;\n        - `form-message` - компонент для вывода сообщений об ошибках формы и сообщений об удачных запросах формы;\n        - `images-upload` - компонент для загрузки и предварительного просмотра изображений для объявления.\n    - `image-gallery` - компонент для вывода галереи изображений на странице объявления;\n    - `search-bar` - компонент для вывода верхней панели с формой поиска объявлений и фильтром категорий;\n        - `category-menu` - компонент для вывода меню с фильтром категорий;\n    - `skeletons` - директория со всеми скелетонами для загрузки:\n        - `ad-grid-skeleton` - скелетон для сетки с объявлениями;\n            - `ad-grid-item-skeleton` - скелетон для одного объявления в сетке;\n        - `advert-skeleton` - скелетон для вывода в объявлении;\n        - `category-filter-skeleton` - скелетон для списка категорий в фильтре;\n        - `comments-skeleton` - скелетон для комментариев;\n        - `image-gallery-skeleton` - скелетон для галлереи с изображениями;\n        - `image-skeleton` - скелетон каждого изображения объявления в сетке;\n    - `spinner` - универсальный компонент для отображения спиннера с различными параметрами во время загрузки.\n    - `svg-icon` - компонент-обертка для svg-иконок.\n    - `top-bar` - компонент для вывода верхней панели с пользовательским меню.\n\n- `data` - статические данные для приложения\n    - `cat-with-adverts` - ассоциации всех категорий и объявлений размещенных в них;\n    - `cities` - список городов для хлебных крошек.\n\n- `dialogs` - компоненты диалоговых окон:\n    - `address-on-map` - компонент для вывода карты с адресом;\n    - `dialog-container` - контейнер-компонент для всех диалоговых окон;\n    - `info-dialog` - компонент для вывода простого диалогового окна с информацией;\n    - `login-dialog` - компонент для вывода диалогового окна авторизации пользователя;\n    - `password-dialog` - компонент для подтверждения пароля пользователя;\n    - `register-dialog` - компонент для вывода диалогового окна регистрации нового пользователя;\n    - `terms-of-service` - компонент с информацией о правилах пользования приложением.\n\n- `directives` - директивы:\n    - `dnd.directive` - директива для drag and drop зоны в загрузчике изображений.\n\n- `layouts` - переиспользуемые layout-компоненты:\n    - `header` - компонент для вывода шапки;\n    - `main-layout` - основной компонент для всех страниц.\n\n- `pipes` - вспомогательные пайпы:\n    - `adverts-count.pipe` - пайп для вывода числа объявлений с правильным склонением;\n    - `date-format.pipe` - пайп для форматирования даты объявления;\n    - `image-from-id.pipe` - асинхронный пайп для получения Blob-изображения по переданному id изображения;\n    - `images-from-ids.pipe` - асинхронный пайп для получения массива Blob-изображений по переданному массиву id изображений (для галереи);\n    - `phone-format.pipe` - пайп для форматирования телефонного номера;\n    - `price-format.pipe` - пайп для форматирования цены.\n\n- `services` - все сервисы, необходимые для работы страниц, компонентов, диалоговых окон:\n    - `advert-draft.state.service` - сервис для работы с состоянием черновика объявления;\n    - `advert.state.service` - сервис для хранения состояния данных текущего объявления;\n    - `advert.service` - сервис для api-взаимодействий с объявлениями;\n    - `advert.facade` - фасад для работы с данными объявления;\n    - `adverts-list.state.service` - сервис для хранения состояния данных списка объявлений;\n    - `advert-list.service` - сервис для api-взаимодействий со списком объявлений;\n    - `advert-list.facade` - фасад для работы со списком объявлений;\n    - `breadcrumbs.state.service` - сервис для хранения состояния хлебных крошек для каждой страницы;\n    - `breadcrumbs.service` - сервис для формирования хлебных крошек;\n    - `category.state.service` - сервис для хранения всех категорий;\n    - `category.service` - сервис для api-взаимодействий с категориями;\n    - `category.facade` - фасад для для работы с категориями;\n    - `comments.state.service` - сервис для хранения состояния выводимых комментариев;\n    - `comments.service` - сервис для api-взаимодействий с комментариями;\n    - `comments.facade` - фасад для работы с комментариями;\n    - `dadata.service` - сервис для запросов к службе dadata;\n    - `image.service` - сервис для api-взаимодействий с изображениями.\n\n- `utils` - утилитарные вспомогательные функции:\n    - `categories-transform.util` - преобразует массив категорий в дерево с вложенными childs;\n    - `category-name-from-id.util` - возвращаем имя категории по значению ее id;\n    - `comments-transform.util` - преобразует массив комментариев в дерево с вложенными children;\n    - `data-url-to-file.util` - преобразует строку Data URL в объект File;\n    - `find-category-from-id.util` - поиск категории по id в модифицированном древовидном массиве;\n    - `sort-adverts-by-date.util` - cортировка объявлений по дате создания.\n\n- `validators` - кастомные валидаторы:\n    - `passwordsMatch.validator` - валидирует совпадение двух паролей.\n\nДиректория **styles** - файлы с общими scss-стилями:\n\n- `_primeng.scss` - стили для компонентов библиотеки PrimeNg (переназначенные css-переменные и селекторы классов);\n- `_reset.scss` - общий сброс для стилей;\n- `_typography.scss` - стили для шрифтов, утилитарные селекторы классов для шрифтов;\n- `_utilities.scss` - утилитарные селекторы классов для отступов;\n- `_variables.scss` - css-переменные с предустановленными цветами;\n- `styles.scss` - основной общий файл со стилями.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpavelisik%2Fadbox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpavelisik%2Fadbox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpavelisik%2Fadbox/lists"}