Skip to content

Commit 521bce5

Browse files
authored
Merge pull request #36 from gked/homepage-bug-ru
[docs]: Translation Updates and Stats Improvements
2 parents 6f475fd + 1445e56 commit 521bce5

20 files changed

Lines changed: 2092 additions & 83 deletions

docs/.vuepress/configs/navbar/en.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,27 @@ export const navbarEn: NavbarOptions = [
7474
}
7575
]
7676
},
77+
{
78+
text: 'API',
79+
children: [
80+
{
81+
text: 'Introduction',
82+
link: '/dev/api/introduction.md',
83+
},
84+
{
85+
text: 'Get Started',
86+
link: '/dev/api/get-started.md',
87+
},
88+
{
89+
text: 'RPC',
90+
link: '/dev/api/rpc.md',
91+
},
92+
{
93+
text: 'MiniApps',
94+
link: '/dev/api/miniapps.md',
95+
}
96+
]
97+
},
7798
{
7899
text: 'Mini Apps',
79100
children: [

docs/.vuepress/configs/navbar/ru.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ export const navbarRu: NavbarOptions = [
1414
},
1515
{
1616
text: 'Руководство по настройке Easy Node',
17-
link: '/ru/guide/easy-node/',
17+
link: '/ru/guide/easy-node/index_ru.md',
1818
},
1919
{
2020
text: 'Руководство по настройке Full Node',
21-
link: '/ru/guide/full-node/',
21+
link: '/ru/guide/full-node/index_ru.md',
2222
}
2323
]
2424
},
@@ -27,7 +27,7 @@ export const navbarRu: NavbarOptions = [
2727
children: [
2828
{
2929
text: 'Руководство по монетизации Bastyon',
30-
link: '/ru/guide/monetization/',
30+
link: '/ru/guide/monetization/index_ru.md',
3131
}
3232
]
3333
}
@@ -74,6 +74,27 @@ export const navbarRu: NavbarOptions = [
7474
}
7575
]
7676
},
77+
{
78+
text: 'API',
79+
children: [
80+
{
81+
text: 'Введение',
82+
link: '/ru/dev/api/introduction_ru.md',
83+
},
84+
{
85+
text: 'Начало работы',
86+
link: '/ru/dev/api/get-started_ru.md',
87+
},
88+
{
89+
text: 'RPC',
90+
link: '/ru/dev/api/rpc_ru.md',
91+
},
92+
{
93+
text: 'Мини-приложения',
94+
link: '/ru/dev/api/miniapps_ru.md',
95+
}
96+
]
97+
},
7798
{
7899
text: 'Мини-приложения',
79100
children: [

docs/.vuepress/configs/sidebar/ru.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ export const sidebarRu: SidebarOptions = {
66
text: 'Пользователи',
77
children: [
88
'/ru/guide/getting-started_ru.md',
9-
'/ru/guide/monetization/',
10-
'/ru/guide/easy-node/',
11-
'/ru/guide/full-node/',
9+
'/ru/guide/monetization/index_ru.md',
10+
'/ru/guide/easy-node/index_ru.md',
11+
'/ru/guide/full-node/index_ru.md',
1212
],
1313
},
1414
],
@@ -42,6 +42,7 @@ export const sidebarRu: SidebarOptions = {
4242
'/ru/dev/api/get-started_ru.md',
4343
'/ru/dev/api/rpc_ru.md',
4444
'/ru/dev/api/miniapps_ru.md',
45+
'/ru/dev/api/todo_ru.md',
4546
],
4647
},
4748
],

docs/dev/api/miniapps.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
# MiniApps
1+
# MiniApps
2+
3+
Please see [MiniApps Documentation](../apps/miniapps/get-started.md) for detailed information about MiniApps development.

docs/dev/infrastructure.md

Lines changed: 0 additions & 1 deletion
This file was deleted.

docs/ru/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ title: Главная
44
heroImage: /images/bastyon-logo-256x256.png
55
actions:
66
- text: Начать
7-
link: /ru/dev/get-started_ru.md
7+
link: /ru/dev/introduction_ru.md
88
type: primary
99

1010
- text: Публичный API

docs/ru/dev/api/get-started_ru.md

Lines changed: 251 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,251 @@
1+
# Начало работы
2+
3+
# Документация по API Bastyon Pocketnet Proxy
4+
5+
## Обзор
6+
API Bastyon Pocketnet Proxy предоставляет разработчикам инструменты для создания и интеграции приложений в экосистему Bastyon. Это руководство объясняет, как безопасно и эффективно использовать наши RPC методы с поддержкой TypeScript.
7+
8+
Инструкции по настройке предполагают, что у вас есть фронтенд, который будет вызывать бэкенд-контроллеры, определенные ниже.
9+
10+
Высокоуровневая диаграмма типичного приложения выглядит следующим образом:
11+
12+
<div style="text-align: center;">
13+
<img src="../assets/images/mini-app-flow.png" alt="mini-app-flow">
14+
</div>
15+
16+
## Настройка и инициализация
17+
18+
До тех пор, пока API прокси не будет доступен через npm, мы рекомендуем использовать наш шаблонный проект: [Bastyon Mini-App Express.js Template][template-link].
19+
20+
Следующие инструкции предполагают, что вы установили папку /lib, содержащую SDK pocketnet-proxy-api.
21+
22+
Что это означает: Сначала вам нужно будет клонировать наш шаблонный репозиторий, так как он содержит все необходимые файлы и конфигурации для быстрого начала работы.
23+
24+
[template-link]: https://github.com/DaniilKimlb/bastyon-miniapp-expressjs-template
25+
26+
```typescript
27+
import express from 'express';
28+
import type { Request, Response } from 'express';
29+
import { PocketNetProxyApi } from '../lib';
30+
import type {
31+
GetNodeInfoParams,
32+
GetUserProfileParams,
33+
SearchParams
34+
} from '../lib/rpc.types';
35+
36+
const app = express();
37+
```
38+
39+
## Управление экземпляром API
40+
Что это означает: Мы используем паттерн Singleton для управления единым экземпляром API во всем приложении. Этот подход более эффективен и предотвращает множественные ненужные подключения.
41+
42+
```typescript
43+
// lib/index.ts
44+
import PocketNetProxyApi from './pocketnet-proxy-api';
45+
46+
let pocketNetProxyInstance: PocketNetProxyApi | null = null;
47+
48+
export async function getPocketNetProxyInstance(): Promise<PocketNetProxyApi> {
49+
if (!pocketNetProxyInstance) {
50+
pocketNetProxyInstance = await PocketNetProxyApi.create();
51+
}
52+
return pocketNetProxyInstance;
53+
}
54+
55+
export { PocketNetProxyApi };
56+
```
57+
58+
## Обработчики маршрутов
59+
Что это означает: Это эндпоинты, которые ваше приложение будет предоставлять для обработки различных типов запросов. Каждый обработчик отвечает за конкретную функцию, такую как получение информации о ноде или профилей пользователей.
60+
61+
### Получение информации о ноде
62+
Что это означает: Этот эндпоинт получает текущий статус и информацию о ноде сети Bastyon, что полезно для мониторинга и диагностики.
63+
64+
```typescript
65+
// controllers/node.controller.ts
66+
import type { Request, Response } from 'express';
67+
import { getPocketNetProxyInstance } from '../lib';
68+
69+
/**
70+
* GET /nodeinfo
71+
*
72+
* Получает информацию о ноде из сети Bastyon.
73+
* Использует RPC метод getnodeinfo для получения текущего статуса ноды.
74+
*
75+
* @param {Request} req - Объект запроса Express
76+
* @param {Response} res - Объект ответа Express
77+
* @returns {Promise<void>} JSON ответ с информацией о ноде
78+
*
79+
* @example
80+
* // Регистрация маршрута
81+
* app.get('/nodeinfo', getNodeInfo);
82+
*
83+
* // Успешный ответ
84+
* {
85+
* "message": "Информация о ноде успешно получена",
86+
* "data": {
87+
* // Объект информации о ноде
88+
* }
89+
* }
90+
*/
91+
export async function getNodeInfo(
92+
req: Request,
93+
res: Response
94+
): Promise<void> {
95+
try {
96+
const api = await getPocketNetProxyInstance();
97+
const result = await api.rpc.getnodeinfo();
98+
99+
res.status(200).json({
100+
message: 'Информация о ноде успешно получена',
101+
data: result
102+
});
103+
} catch (error) {
104+
res.status(500).json({
105+
message: 'Не удалось получить информацию о ноде',
106+
error: error instanceof Error ? error.message : 'Неизвестная ошибка'
107+
});
108+
}
109+
}
110+
```
111+
112+
### Получение профиля пользователя
113+
Что это означает: Этот эндпоинт получает информацию о конкретном пользователе, используя его блокчейн-адрес. Обычно используется для отображения деталей пользователя и верификации.
114+
115+
```typescript
116+
// controllers/user.controller.ts
117+
import type { Request, Response } from 'express';
118+
import { getPocketNetProxyInstance } from '../lib';
119+
import type { GetUserProfileParams } from '../lib/rpc.types';
120+
121+
/**
122+
* GET /user/:address
123+
*
124+
* Получает информацию о профиле пользователя для заданного адреса.
125+
*
126+
* @param {Request} req - Объект запроса Express с параметром address
127+
* @param {Response} res - Объект ответа Express
128+
* @returns {Promise<void>} JSON ответ с профилем пользователя
129+
*
130+
* @example
131+
* // Регистрация маршрута
132+
* app.get('/user/:address', getUserProfile);
133+
*
134+
* // Успешный ответ
135+
* {
136+
* "message": "Профиль пользователя успешно получен",
137+
* "data": {
138+
* // Объект профиля пользователя
139+
* }
140+
* }
141+
*/
142+
export async function getUserProfile(
143+
req: Request,
144+
res: Response
145+
): Promise<void> {
146+
try {
147+
const { address } = req.params;
148+
const api = await getPocketNetProxyInstance();
149+
150+
const result = await api.rpc.getuserprofile({
151+
address,
152+
shortForm: "basic"
153+
} satisfies GetUserProfileParams);
154+
155+
res.status(200).json({
156+
message: 'Профиль пользователя успешно получен',
157+
data: result
158+
});
159+
} catch (error) {
160+
res.status(500).json({
161+
message: 'Не удалось получить профиль пользователя',
162+
error: error instanceof Error ? error.message : 'Неизвестная ошибка'
163+
});
164+
}
165+
}
166+
```
167+
168+
### Поиск контента
169+
Что это означает: Этот эндпоинт позволяет пользователям искать контент на платформе с поддержкой пагинации для эффективной обработки больших наборов результатов.
170+
171+
```typescript
172+
// controllers/search.controller.ts
173+
import type { Request, Response } from 'express';
174+
import { getPocketNetProxyInstance } from '../lib';
175+
import type { SearchParams } from '../lib/rpc.types';
176+
177+
/**
178+
* GET /search
179+
*
180+
* Поиск контента с поддержкой пагинации.
181+
*
182+
* @param {Request} req - Объект запроса Express с параметрами запроса
183+
* @param {Response} res - Объект ответа Express
184+
* @returns {Promise<void>} JSON ответ с результатами поиска
185+
*
186+
* @example
187+
* // Регистрация маршрута
188+
* app.get('/search', searchContent);
189+
*
190+
* // Запрос
191+
* GET /search?keyword=blockchain&page=1&pageSize=20
192+
*
193+
* // Успешный ответ
194+
* {
195+
* "message": "Поиск успешно завершен",
196+
* "data": {
197+
* "results": [],
198+
* "total": 0
199+
* }
200+
* }
201+
*/
202+
export async function searchContent(
203+
req: Request,
204+
res: Response
205+
): Promise<void> {
206+
try {
207+
const {
208+
keyword,
209+
page = '0',
210+
pageSize = '20'
211+
} = req.query;
212+
213+
const api = await getPocketNetProxyInstance();
214+
215+
const result = await api.rpc.search({
216+
keyword: String(keyword),
217+
type: "content",
218+
pageStart: Number(page),
219+
pageSize: Number(pageSize)
220+
} satisfies SearchParams);
221+
222+
res.status(200).json({
223+
message: 'Поиск успешно завершен',
224+
data: result
225+
});
226+
} catch (error) {
227+
res.status(500).json({
228+
message: 'Операция поиска не удалась',
229+
error: error instanceof Error ? error.message : 'Неизвестная ошибка'
230+
});
231+
}
232+
}
233+
```
234+
235+
### Экспорт контроллеров
236+
Что это означает: Этот файл централизует все обработчики маршрутов (контроллеры) в одном месте для лучшей организации и поддерживаемости.
237+
238+
```typescript
239+
// controllers/index.ts
240+
export * from './node.controller';
241+
export * from './user.controller';
242+
export * from './search.controller';
243+
```
244+
245+
### Регистрация маршрутов
246+
Что это означает: Здесь вы определяете, какие URL-адреса вызывают какие обработчики в вашем приложении. Это сопоставляет URL-адреса с соответствующими функциями.
247+
248+
```typescript
249+
// routes/index.ts
250+
import express from 'express';
251+
```

0 commit comments

Comments
 (0)