-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocs.txt
More file actions
230 lines (159 loc) · 15.8 KB
/
docs.txt
File metadata and controls
230 lines (159 loc) · 15.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
# Learn&Share – Обзор и техническое описание проекта
## Общее описание
Learn&Share - это мобильное приложение для обмена знаниями, где пользователи могут выступать как в роли учеников, так и преподавателей. Приложение разработано с использованием React Native и Expo.
## Введение
В современном мире знания и опыт обогащаются через обмен информацией. Проект Learn&Share создан для того, чтобы предоставить платформу, на которой пользователи могут не только получить новые знания, но и поделиться своими навыками, создавая активное сообщество взаимопомощи.
Главная цель приложения — обмен навыками.
Learn&Share — это инновационное мобильное приложение для обмена знаниями, где каждый пользователь может быть как учеником, так и преподавателем. Приложение обеспечивает интуитивно понятный интерфейс и упрощённый процесс взаимодействия, позволяя:
- **Аутентификация и безопасность:**
Простой процесс регистрации и входа с использованием методов валидации. Система обеспечивает надёжное хранение данных и токенов авторизации, а также применяет шифрование для защиты пользовательской информации.
- **Поиск и подбор преподавателей:**
Пользователи получают доступ к расширенному списку преподавателей, куда могут попасть все желающие делиться своими знаниями. Детальная информация включает ключевые навыки, описание, обязательную видео презентацию (выложенную на YouTube для подтверждения компетентности) и отзывы, что помогает сделать осознанный выбор.
- **Бронирование уроков:**
Удобный процесс бронирования уроков включает выбор категории занятия, синхронизацию с календарем и подтверждение времени. Это помогает избегать конфликтов в расписании и оперативно организовывать встречи с преподавателями.
- **Мультимедийная коммуникация:**
Реализована поддержка качественных видеозвонков для проведения онлайн-уроков. Интеграция с современными видеоплатформами обеспечивает стабильное соединение и качественную передачу аудио/видео, даже при ограниченной пропускной способности сети.
Эти возможности направлены на создание эффективной образовательной платформы, где пользователи быстро находят нужных преподавателей и легко организуют занятия, что делает процесс обмена навыками динамичным и доступным.
## Техническое описание
Приложение разработано с использованием современных технологий и проверенных архитектурных решений, гарантирующих высокую производительность, масштабируемость и безопасность. Подход к разработке основан на принципах модульности, что позволяет легко интегрировать новые функции и адаптироваться к изменениям в требованиях пользователей.
- **Платформа и язык программирования:**
- **React Native (0.76.6)** и **Expo (52.0.25)** позволяют создавать кроссплатформенные мобильные приложения.
- **TypeScript** применяется для строгой типизации кода и повышения стабильности разработки.
- **Node.js** используется для серверных скриптов и вспомогательных процессов.
- **Навигация и управление экранами:**
- Библиотеки **expo-router**, **react-native-screens** и **react-native-safe-area-context** обеспечивают плавную навигацию между экранами и корректное отображение UI на различных устройствах.
- **Работа с формами и валидация:**
- Используются **react-hook-form**, **zod** и **@hookform/resolvers** для создания гибких форм с надёжной валидацией вводимых данных.
- **Пользовательский интерфейс:**
- UI-компоненты, такие как **react-native-dropdown-picker**, **react-native-toast-notifications** и **react-native-sticky-parallax-header**, помогают создать современный и отзывчивый дизайн.
- **FontAwesome** используется для интеграции качественных иконок и графических элементов.
- **Мультимедийные возможности и видеосвязь:**
- **@livekit/react-native** и **react-native-webrtc** позволяют реализовать функциональность видеозвонков, обеспечивая интерактивное общение между пользователями.
- **Безопасное хранение и мультиязычность:**
- **expo-secure-store** гарантирует безопасное хранение конфиденциальных данных.
- **i18next**, **react-i18next** и **expo-localization** обеспечивают полноценную поддержку локализации, что позволяет приложению работать на нескольких языках.
## Технологический стек
### Основные технологии
- React Native (версия 0.76.6)
- Expo (версия 52.0.25)
- TypeScript
- Node.js
### Навигация и роутинг
- expo-router
- react-native-screens
- react-native-safe-area-context
### Состояние и формы
- react-hook-form
- zod (валидация)
- @hookform/resolvers
### UI компоненты
- react-native-dropdown-picker
- react-native-toast-notifications
- react-native-sticky-parallax-header
### Мультимедиа и коммуникации
- @livekit/react-native (видеозвонки)
- react-native-webrtc
- FontAwesome (иконки)
### Хранение данных
- expo-secure-store
### Локализация
- i18next
- react-i18next
- expo-localization
## Ключевые библиотеки
Проект использует следующие ключевые библиотеки:
- **expo-router**, **react-native-screens**, **react-native-safe-area-context** — для навигации и управления экранами.
- **react-hook-form**, **zod**, **@hookform/resolvers** — для работы с формами и валидации.
- **react-native-dropdown-picker**, **react-native-toast-notifications**, **react-native-sticky-parallax-header** — для создания отзывчивого пользовательского интерфейса.
- **@livekit/react-native**, **react-native-webrtc**, **FontAwesome** — для обеспечения видеосвязи и работы с мультимедиа.
- **expo-secure-store** — для безопасного хранения данных.
- **i18next**, **react-i18next**, **expo-localization** — для поддержки локализации.
- Дополнительно, используются такие библиотеки как **axios**, **expo-clipboard**, **expo-constants**, **expo-file-system** и другие.
## Архитектура приложения
### Структура проекта
```
|── android - настройки сборки на android
|── assets - хранение дополнительных ресурсов
|── ios - настройки сборки на ios
|-- src
| |── app - основные экраны приложения
| |── components - переиспользуемые компоненты
| |── utilities - утилиты и хуки
| |── providers - провайдеры контекста
| └── locales - файлы локализации
```
## Основной функционал
### Аутентификация
- Регистрация
- Авторизация
- Защищенное хранение токенов
### Профиль преподавателя
Любой пользователь может стать преподавателем, если он готов делиться своими знаниями. Для подтверждения владения навыком необходимо предоставить видео презентацию, выложенную на YouTube.
- Управление навыками
- Расписание занятий
- Статистика
- Отзывы (оставить отзыв может любой пользователь, проводивший урок с этим преподавателем)
### Система бронирования
- Поиск преподавателей
- Выбор времени
- Подтверждение занятий
## Дополнительный функционал
- **Мультиязычность:**
Приложение поддерживает 5 языков: русский, сербский, английский, немецкий и французский. Пользователи могут выбирать желаемый язык в настройках, что обеспечивает удобство и доступность для широкой аудитории.
- **Смена темы приложения:**
Приложение предоставляет возможность переключения между светлой и темной темами для оптимального восприятия интерфейса в любых условиях освещения.
## Компоненты
Приложение состоит из ряда основных компонентов, отвечающих за ключевые функциональные возможности. Ниже приведено описание всех основных компонентов:
### 1. Экран поиска преподавателей
- **TeacherListItem**
Отображает краткую информацию о преподавателе в списке, позволяя пользователю быстро оценить профиль и перейти к детальному описанию.
### 2. Экран профиля преподавателя
- **TeacherProfilePage**
Загружает детальную информацию о преподавателе по его ID, включает данные о навыках, видео презентацию, а также отзывы пользователей.
### 3. Экран бронирования урока
- **BookLesson**
Обеспечивает функциональность выбора категории занятий и времени для бронирования урока у выбранного преподавателя.
### 4. Экран профиля пользователя
- **Profile**
Отображает личную информацию пользователя, статистику, историю уроков и накопленные навыки, а также предоставляет возможности для управления профилем.
### 5. Экран регистрации и аутентификации
- **SignUp/SignIn**
Позволяет новым пользователям регистрироваться, а существующим — безопасно входить в систему.
### 6. Экран управления запросами на урок (для преподавателей)
- **Requests**
Отображает запросы на проведение уроков для преподавателей, предоставляя функционал для их принятия или отклонения.
### 7. Экран преподавания и управления уроками
- **Teaching**
Позволяет преподавателям управлять запланированными уроками, просматривать статистику, расписание и историю проведения занятий.
### 8. Экран добавления нового навыка
- **SkillAdding**
Позволяет пользователям добавлять новые навыки для преподавания, отправляя видео презентацию и описание для проверки.
### 9. Экран редактирования профиля
- **EditProfile**
Предоставляет пользователям возможность редактировать свою личную информацию и менять аватар.
### 10. Экран проведения урока
- **RoomView**
Обеспечивает реализацию видеосвязи для проведения онлайн-уроков с использованием LiveKit.
### 11. Экран завершения урока
- **Finish**
Отображает информацию о завершении урока и предоставляет возможность оставить отзыв о проведённом занятии.
## Установка проекта
### Клонирование репозитория
Для копирования используйте:
```bash
git clone https://github.com/LearnShareApp/learn-share-app.git
```
### Установка зависимостей
Затем установите зависимости:
```bash
npm install
```
### Запуск проекта
И запустите проект с помощью:
```bash
npx expo start
# или
npx expo start -c
```
## Заключение
Данная документация предоставляет общее представление о проекте, его структуре и основных функциях. Для более детальной информации о каждом компоненте и его использовании, пожалуйста, обратитесь к соответствующим файлам в кодовой базе.