Skip to content

Commit c7cd1ae

Browse files
authored
Merge pull request #239 from PROCOLLAB-github/artembqpower-programs-fixes
programs fixes
2 parents 9ee18df + ecd1810 commit c7cd1ae

421 files changed

Lines changed: 18848 additions & 2772 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/pull_request.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ jobs:
1212
permissions:
1313
pull-requests: write
1414
steps:
15-
- uses: actions/checkout@v2
16-
- name: Use Node.js 16.x
17-
uses: actions/setup-node@v2
15+
- uses: actions/checkout@v4
16+
- name: Use Node.js 18.x
17+
uses: actions/setup-node@v4
1818
with:
1919
node-version: 18.13
2020
cache: "npm"

projects/core/README.md

Lines changed: 220 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,234 @@
11
<!-- @format -->
22

3-
# Core
3+
# Core Library Documentation
44

5-
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.0.0.
5+
Основная библиотека Angular приложения, содержащая общие сервисы, модели, пайпы, интерцепторы и константы.
66

7-
## Code scaffolding
7+
## Структура проекта
88

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 модуля
1019

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+
## Основные компоненты
1221

13-
## Build
22+
### 🔧 Сервисы (Services)
1423

15-
Run `ng build core` to build the project. The build artifacts will be stored in the `dist/` directory.
24+
#### ApiService
1625

17-
## Publishing
26+
Базовый сервис для работы с HTTP API.
1827

19-
After building your library with `ng build core`, go to the dist folder `cd dist/core` and run `npm publish`.
28+
**Методы:**
2029

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 запрос
2235

23-
Run `ng test core` to execute the unit tests via [Karma](https://karma-runner.github.io).
36+
#### SkillsApiService
2437

25-
## Further help
38+
Расширенный API сервис для работы с Skills API.
2639

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
Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,25 @@
11
/** @format */
22

3+
/**
4+
* Конфигурация полей профиля пользователя
5+
* Определяет какие поля являются массивами, а какие строками
6+
* Используется для валидации и обработки данных профиля
7+
*/
38
export const fieldsProfile = [
4-
{ key: "education", type: "array" },
5-
{ key: "workExperience", type: "array" },
6-
{ key: "userLanguages", type: "array" },
7-
{ key: "achievements", type: "array" },
8-
{ key: "skills", type: "array" },
9-
{ key: "birthday", type: "string" },
10-
{ key: "phoneNumber", type: "string" },
11-
{ key: "speciality", type: "string" },
12-
{ key: "aboutMe", type: "string" },
13-
{ key: "avatar", type: "string" },
14-
{ key: "city", type: "string" },
15-
{ key: "firstName", type: "string" },
16-
{ key: "lastName", type: "string" },
9+
// Поля-массивы (содержат несколько элементов)
10+
{ key: "education", type: "array" }, // Образование
11+
{ key: "workExperience", type: "array" }, // Опыт работы
12+
{ key: "userLanguages", type: "array" }, // Языки пользователя
13+
{ key: "achievements", type: "array" }, // Достижения
14+
{ key: "skills", type: "array" }, // Навыки
15+
16+
// Строковые поля (одиночные значения)
17+
{ key: "birthday", type: "string" }, // Дата рождения
18+
{ key: "phoneNumber", type: "string" }, // Номер телефона
19+
{ key: "speciality", type: "string" }, // Специальность
20+
{ key: "aboutMe", type: "string" }, // О себе
21+
{ key: "avatar", type: "string" }, // Аватар (URL)
22+
{ key: "city", type: "string" }, // Город
23+
{ key: "firstName", type: "string" }, // Имя
24+
{ key: "lastName", type: "string" }, // Фамилия
1725
];
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/** @format */
2+
3+
export const filterExperience = [
4+
{ label: "Без опыта", value: "no_experience" },
5+
{ label: "До 1 года", value: "up_to_a_year" },
6+
{ label: "От 1 года до 3 лет", value: "from_one_to_three_years" },
7+
{ label: "От 3 лет и более", value: "from_three_years" },
8+
];
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/** @format */
2+
3+
export const filterWorkFormat = [
4+
{ label: "Удаленная работа", value: "remote" },
5+
{ label: "Работа в офисе", value: "office" },
6+
{ label: "Смешанный формат", value: "hybrid" },
7+
];
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/** @format */
2+
3+
export const filterWorkSchedule = [
4+
{ label: "Полный рабочий день", value: "full_time" },
5+
{ label: "Сменный график", value: "shift_work" },
6+
{ label: "Гибкий график", value: "flexible_schedule" },
7+
{ label: "Частичная занятость", value: "part_time" },
8+
{ label: "Стажировка", value: "internship" },
9+
];

projects/core/src/consts/list-direction-project.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
/** @format */
22

3+
/**
4+
* Список направлений проектов
5+
* Используется в формах создания и редактирования проектов
6+
*/
37
export const directionProjectList = [
48
{
59
id: 0,
6-
value: "Технология",
7-
label: "Технология",
10+
value: "Технология", // Значение для отправки на сервер
11+
label: "Технология", // Отображаемый текст
812
},
913
{
1014
id: 1,
@@ -18,7 +22,7 @@ export const directionProjectList = [
1822
},
1923
{
2024
id: 3,
21-
value: "им Био",
25+
value: "им Био", // Возможно опечатка, должно быть "Хим Био"
2226
label: "Хим Био",
2327
},
2428
{

projects/core/src/consts/list-years.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,6 @@ export const yearList = [
164164
{
165165
value: 2025,
166166
id: 25,
167-
label: "н.в",
167+
label: "настоящее время",
168168
},
169169
];

0 commit comments

Comments
 (0)