|
1 | 1 | <!-- @format --> |
2 | 2 |
|
3 | | -# Core |
| 3 | +# Core Library Documentation |
4 | 4 |
|
5 | | -This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.0.0. |
| 5 | +Основная библиотека Angular приложения, содержащая общие сервисы, модели, пайпы, интерцепторы и константы. |
6 | 6 |
|
7 | | -## Code scaffolding |
| 7 | +## Структура проекта |
8 | 8 |
|
9 | | -Run `ng generate component component-name --project core` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project core`. |
| 9 | +src/ |
| 10 | +├── consts/ # Константы и списки данных |
| 11 | +├── environments/ # Конфигурация окружения |
| 12 | +├── lib/ |
| 13 | +│ ├── interceptors/ # HTTP интерцепторы |
| 14 | +│ ├── models/ # Модели данных |
| 15 | +│ ├── pipes/ # Пайпы для трансформации данных |
| 16 | +│ ├── providers/ # Провайдеры и токены |
| 17 | +│ └── services/ # Сервисы |
| 18 | +└── public-api.ts # Публичный API модуля |
10 | 19 |
|
11 | | -> Note: Don't forget to add `--project core` or else it will be added to the default project in your `angular.json` file. |
| 20 | +## Основные компоненты |
12 | 21 |
|
13 | | -## Build |
| 22 | +### 🔧 Сервисы (Services) |
14 | 23 |
|
15 | | -Run `ng build core` to build the project. The build artifacts will be stored in the `dist/` directory. |
| 24 | +#### ApiService |
16 | 25 |
|
17 | | -## Publishing |
| 26 | +Базовый сервис для работы с HTTP API. |
18 | 27 |
|
19 | | -After building your library with `ng build core`, go to the dist folder `cd dist/core` and run `npm publish`. |
| 28 | +**Методы:** |
20 | 29 |
|
21 | | -## Running unit tests |
| 30 | +- `get<T>(path, params?, options?)` - GET запрос |
| 31 | +- `post<T>(path, body)` - POST запрос |
| 32 | +- `put<T>(path, body)` - PUT запрос |
| 33 | +- `patch<T>(path, body)` - PATCH запрос |
| 34 | +- `delete<T>(path, params?)` - DELETE запрос |
22 | 35 |
|
23 | | -Run `ng test core` to execute the unit tests via [Karma](https://karma-runner.github.io). |
| 36 | +#### SkillsApiService |
24 | 37 |
|
25 | | -## Further help |
| 38 | +Расширенный API сервис для работы с Skills API. |
26 | 39 |
|
27 | | -To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. |
| 40 | +#### TokenService |
| 41 | + |
| 42 | +Управление JWT токенами аутентификации. |
| 43 | + |
| 44 | +**Методы:** |
| 45 | + |
| 46 | +- `getTokens()` - Получить токены из cookies |
| 47 | +- `memTokens(tokens)` - Сохранить токены в cookies |
| 48 | +- `clearTokens()` - Очистить токены |
| 49 | +- `refreshTokens()` - Обновить токены |
| 50 | + |
| 51 | +#### ValidationService |
| 52 | + |
| 53 | +Сервис для валидации форм. |
| 54 | + |
| 55 | +**Валидаторы:** |
| 56 | + |
| 57 | +- `useMatchValidator(left, right)` - Проверка совпадения полей |
| 58 | +- `useDateFormatValidator()` - Валидация формата даты |
| 59 | +- `useAgeValidator(age)` - Проверка возраста |
| 60 | +- `useLanguageValidator()` - Проверка русского языка |
| 61 | +- `getFormValidation(form)` - Валидация всей формы |
| 62 | + |
| 63 | +#### YtExtractService |
| 64 | + |
| 65 | +Извлечение и обработка YouTube ссылок. |
| 66 | + |
| 67 | +#### SubscriptionPlansService |
| 68 | + |
| 69 | +Управление подписками пользователей. |
| 70 | + |
| 71 | +### 🔄 Интерцепторы (Interceptors) |
| 72 | + |
| 73 | +#### BearerTokenInterceptor |
| 74 | + |
| 75 | +Автоматически добавляет Bearer токен к HTTP запросам и обрабатывает обновление токенов при 401 ошибке. |
| 76 | + |
| 77 | +#### CamelcaseInterceptor |
| 78 | + |
| 79 | +Преобразует snake_case в camelCase для запросов и ответов API. |
| 80 | + |
| 81 | +### 🔧 Пайпы (Pipes) |
| 82 | + |
| 83 | +#### Валидация форм |
| 84 | + |
| 85 | +- `ControlErrorPipe` - Проверка ошибок в контролах форм |
| 86 | +- `FormControlPipe` - Приведение AbstractControl к FormControl |
| 87 | + |
| 88 | +#### Работа с датами |
| 89 | + |
| 90 | +- `DayjsPipe` - Форматирование дат с помощью dayjs |
| 91 | +- `YearsFromBirthdayPipe` - Вычисление возраста по дате рождения |
| 92 | + |
| 93 | +#### Форматирование текста |
| 94 | + |
| 95 | +- `ParseBreaksPipe` - Замена \n на <br> |
| 96 | +- `ParseLinksPipe` - Преобразование ссылок в кликабельные |
| 97 | +- `CapitalizePipe` - Капитализация первой буквы |
| 98 | +- `PluralizePipe` - Склонение слов по числам (русский язык) |
| 99 | + |
| 100 | +#### Трансформация данных |
| 101 | + |
| 102 | +- `SalaryTransformPipe` - Форматирование зарплаты |
| 103 | +- `LinkTransformPipe` - Извлечение домена из ссылки |
| 104 | + |
| 105 | +### 🎯 Провайдеры (Providers) |
| 106 | + |
| 107 | +#### API_URL |
| 108 | + |
| 109 | +Токен для инъекции базового URL API. |
| 110 | + |
| 111 | +#### SKILLS_API_URL |
| 112 | + |
| 113 | +Токен для инъекции URL Skills API. |
| 114 | + |
| 115 | +#### PRODUCTION |
| 116 | + |
| 117 | +Токен для определения production окружения. |
| 118 | + |
| 119 | +### 📋 Константы (Constants) |
| 120 | + |
| 121 | +#### Навигация |
| 122 | + |
| 123 | +- `navProjectItems` - Элементы навигации для проектов |
| 124 | +- `navProfileItems` - Элементы навигации для профиля |
| 125 | + |
| 126 | +#### Списки данных |
| 127 | + |
| 128 | +- `directionProjectList` - Направления проектов |
| 129 | +- `trackProjectList` - Треки проектов |
| 130 | +- `experienceList` - Уровни опыта |
| 131 | +- `formatList` - Форматы работы |
| 132 | +- `scheludeList` - Графики работы |
| 133 | +- `rolesMembersList` - Роли участников |
| 134 | +- `languageNamesList` - Названия языков |
| 135 | +- `languageLevelsList` - Уровни языков |
| 136 | +- `educationUserType` - Типы образования |
| 137 | +- `educationUserLevel` - Уровни образования |
| 138 | +- `yearList` - Список годов |
| 139 | +- `ratingFiltersList` - Фильтры рейтинга |
| 140 | +- `filterTags` - Теги фильтров |
| 141 | + |
| 142 | +#### Профиль |
| 143 | + |
| 144 | +- `fieldsProfile` - Поля профиля пользователя |
| 145 | +- `trajectoryMore` - Дополнительная информация о траектории |
| 146 | + |
| 147 | +## Использование |
| 148 | + |
| 149 | +### Настройка провайдеров |
| 150 | + |
| 151 | +\`\`\`typescript |
| 152 | +providers: [ |
| 153 | +{ provide: API_URL, useValue: 'https://api.example.com' }, |
| 154 | +{ provide: SKILLS_API_URL, useValue: 'https://skills-api.example.com' }, |
| 155 | +{ provide: PRODUCTION, useValue: environment.production } |
| 156 | +] |
| 157 | +\`\`\` |
| 158 | + |
| 159 | +### Примеры использования |
| 160 | + |
| 161 | +#### Работа с API |
| 162 | + |
| 163 | +\`\`\`typescript |
| 164 | +constructor(private apiService: ApiService) {} |
| 165 | + |
| 166 | +loadData() { |
| 167 | +return this.apiService.get<User[]>('/users'); |
| 168 | +} |
| 169 | +\`\`\` |
| 170 | + |
| 171 | +#### Валидация форм |
| 172 | + |
| 173 | +\`\`\`typescript |
| 174 | +constructor(private validationService: ValidationService) {} |
| 175 | + |
| 176 | +createForm() { |
| 177 | +return this.fb.group({ |
| 178 | +password: ['', Validators.required], |
| 179 | +confirmPassword: ['', Validators.required] |
| 180 | +}, { |
| 181 | +validators: this.validationService.useMatchValidator('password', 'confirmPassword') |
| 182 | +}); |
| 183 | +} |
| 184 | +\`\`\` |
| 185 | + |
| 186 | +#### Использование пайпов в шаблонах |
| 187 | + |
| 188 | +\`\`\`html |
| 189 | + |
| 190 | +<!-- Проверка ошибок --> |
| 191 | +<div *ngIf="form.get('email') | controlError"> |
| 192 | + Поле обязательно для заполнения |
| 193 | +</div> |
| 194 | + |
| 195 | +<!-- Форматирование даты --> |
| 196 | + |
| 197 | +<span>{{ user.createdAt | dayjs:'format':'DD.MM.YYYY' }}</span> |
| 198 | + |
| 199 | +<!-- Склонение слов --> |
| 200 | + |
| 201 | +<span>{{ count }} {{ count | pluralize:['проект', 'проекта', 'проектов'] }}</span> |
| 202 | +\`\`\` |
| 203 | + |
| 204 | +## Зависимости |
| 205 | + |
| 206 | +- `@angular/core` |
| 207 | +- `@angular/common/http` |
| 208 | +- `@angular/forms` |
| 209 | +- `dayjs` - Работа с датами |
| 210 | +- `js-cookie` - Управление cookies |
| 211 | +- `class-transformer` - Трансформация объектов |
| 212 | +- `linkify-string` - Обработка ссылок |
| 213 | +- `snakecase-keys` - Преобразование ключей в snake_case |
| 214 | +- `camelcase-keys` - Преобразование ключей в camelCase |
| 215 | + |
| 216 | +## Тестирование |
| 217 | + |
| 218 | +Все сервисы и пайпы покрыты unit тестами с использованием Jasmine и Karma. |
| 219 | + |
| 220 | +Запуск тестов: |
| 221 | +\`\`\`bash |
| 222 | +ng test core |
| 223 | +\`\`\` |
| 224 | + |
| 225 | +## Сборка |
| 226 | + |
| 227 | +Для сборки библиотеки: |
| 228 | +\`\`\`bash |
| 229 | +ng build core |
| 230 | +\`\`\` |
| 231 | + |
| 232 | +Для production сборки: |
| 233 | +\`\`\`bash |
| 234 | +ng build core --configuration production |
0 commit comments