Skip to content

Commit 8d8c2a9

Browse files
authored
Merge pull request #18 from lad-tech/crud
Crud
2 parents de80f4c + 023a363 commit 8d8c2a9

40 files changed

Lines changed: 22523 additions & 10877 deletions

.github/workflows/publish-package-to-npmjs.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ jobs:
2424
- run: npm run copyData
2525
- run: npx semantic-release
2626
env:
27+
DEBUG: semantic-release:*
2728
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2829
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
2930
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

.gitignore

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,3 @@ dist
103103
# TernJS port file
104104
.tern-port
105105
/.idea/
106-
/test/index.ts
107-
/test/interfaces.ts
108-
/test/package.json
109-
/test/service.ts
110-
/test/tsconfig.json
111-
/test/methods/weirdsum.ts

.run/create-service.run.xml

Lines changed: 0 additions & 12 deletions
This file was deleted.

API.md

Lines changed: 292 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,292 @@
1+
2+
## Правила Описания Ресурсов для API
3+
4+
- Для описания методов апи стремимся имспользовать стандарт JSON API, в рамках интересующих нас частей спецификации
5+
6+
### Общие Принципы
7+
8+
1. **Соответствие REST принципам**:
9+
- Использование стандартных HTTP методов (GET, POST, PATCH, DELETE).
10+
11+
2. **Версионирование маршрутов**:
12+
- Каждый маршрут должен начинаться с его версии, например, `/v1`.
13+
14+
3. **Уникальные маршруты для сущностей**:
15+
- Например, `/v1/users` для пользователей, `/v1/posts` для постов и т.д.
16+
17+
4. **Поддержка Пагинации**:
18+
- В запросе пагинация передается через query параметры `page` и `size`.
19+
- В ответе пагинация передается в объекте `meta` с полями:
20+
- `page`: текущая страница.
21+
- `size`: количество элементов на странице.
22+
- `total`: общее количество элементов.
23+
24+
5. **Сортировка**:
25+
- Использование query параметра `sort` для сортировки результатов.
26+
- Формат параметра: `поле` + `знак`, где знак `-` обозначает сортировку по убыванию.
27+
- Примеры:
28+
- `sort=name`: сортировка по имени в порядке возрастания.
29+
- `sort=-age`: сортировка по возрасту в порядке убывания.
30+
31+
6. **Фильтрация**:
32+
- Использование query параметра `filter` для фильтрации результатов.
33+
- Формат параметра: `filter[поле]=значение1,значение2,...`.
34+
- Примеры:
35+
- `filter[price]=100,200`: фильтрация по цене 100 или 200.
36+
- `filter[color]=red,black,white`: фильтрация по цветам: красный, черный, белый.
37+
38+
7. **Обработка Ошибок**:
39+
- Все ошибки в API имеют единый стандарт
40+
- Сообщения об ошибках в формате JSON:
41+
```json
42+
{
43+
"errors": [
44+
{
45+
"name": "string",
46+
"message": "string",
47+
"statusCode": 511
48+
}
49+
]
50+
}
51+
```
52+
53+
### Пример Построения Методов для Работы с Сущностью `user`
54+
55+
#### Пример Сущности `user`:
56+
```json
57+
{
58+
"id": "124124",
59+
"name": "vasya",
60+
"email": "vasya@qq.ru",
61+
"age": 150
62+
}
63+
```
64+
65+
#### 1. Получение Списка Пользователей (GET /v1/users)
66+
67+
- **Пагинация**: Параметры запроса `page` и `size`.
68+
- **Сортировка**: Параметр запроса `sort`.
69+
- **Фильтрация**: Параметр запроса `filter`.
70+
- **Пример запроса**: `GET /v1/users?page=1&size=10&sort=-age&filter[age]=150&filter[email]=vasya@qq.ru`
71+
- **Пример успешного ответа**:
72+
```json
73+
{
74+
"meta": {
75+
"sort": [
76+
{
77+
"key": "age",
78+
"name": "По возрасту (возрастание)"
79+
},
80+
{
81+
"key": "-age",
82+
"name": "По возрасту (убывание)"
83+
},
84+
{
85+
"key": "name",
86+
"name": "По имени (возрастание)"
87+
},
88+
{
89+
"key": "-name",
90+
"name": "По имени (убывание)"
91+
}
92+
],
93+
"page": 1,
94+
"size": 10,
95+
"total": 100
96+
},
97+
"data": [
98+
{
99+
"id": "124124",
100+
"name": "vasya",
101+
"email": "vasya@qq.ru",
102+
"age": 150
103+
}
104+
// другие пользователи...
105+
],
106+
"filters": [
107+
{
108+
"key": "age",
109+
"name": "Возраст",
110+
"values": {
111+
"min": 18,
112+
"max": 150
113+
},
114+
"type": "RANGE"
115+
},
116+
{
117+
"key": "email",
118+
"name": "Электронная почта",
119+
"values": [
120+
{
121+
"count": 1,
122+
"value": "vasya@qq.ru",
123+
"label": "vasya@qq.ru"
124+
}
125+
],
126+
"type": "CHECKBOX"
127+
}
128+
]
129+
}
130+
```
131+
132+
#### 2. Создание Нового Пользователя (POST /v1/users)
133+
134+
- **Тело запроса**: Данные нового пользователя.
135+
- **Пример запроса**:
136+
```json
137+
{
138+
"name": "новое имя",
139+
"email": "новый_email@example.com",
140+
"age": 25
141+
}
142+
```
143+
- **Пример успешного ответа**: HTTP статус 201, с телом ответа:
144+
```json
145+
{
146+
"data":{
147+
"id": "124124",
148+
"name": "новое имя",
149+
"email": "новый_email@example.com",
150+
"age": 25
151+
}
152+
}
153+
154+
```
155+
156+
#### 3. Получение Информации о Конкретном Пользователе (GET /v1/users/{id})
157+
158+
- **Пример запроса**: `GET /v1/users/124124`
159+
- **Пример успешного ответа**:
160+
```json
161+
{
162+
"data":{
163+
"id": "124124",
164+
"name": "vasya",
165+
"email": "vasya@qq.ru",
166+
"age": 150
167+
}
168+
```
169+
170+
#### 4. Обновление Информации о Пользователе (PATCH /v1/users/{id})
171+
172+
- **Тело запроса**: Обновленные данные пользователя.
173+
- **Пример запроса**:
174+
```json
175+
{
176+
"name": "новое имя",
177+
"email": "новый_email@example.com",
178+
"age": 30
179+
}
180+
```
181+
- **Пример успешного ответа**: HTTP статус 200 (OK), с телом ответа:
182+
```json
183+
{
184+
"data":{
185+
"id": "124124",
186+
"name": "новое имя",
187+
"email": "новый_email@example.com",
188+
"age": 30
189+
}
190+
}
191+
```
192+
193+
#### 5. Удаление Пользователя (DELETE /v1/users/{id})
194+
195+
- **Пример запроса**: `DELETE /v1/users/124124`
196+
- **Пример успешного ответа**: HTTP статус 200, с телом ответа:
197+
```json
198+
{
199+
"data":{
200+
"id": "124124",
201+
"name": "vasya",
202+
"email": "vasya@qq.ru",
203+
"age": 150
204+
}
205+
}
206+
```
207+
208+
### Пример Ответа с Мета-Информацией, Данными и Фильтрами
209+
210+
Пример ответа, который может содержать поля в подобной структуре - для формирования ответа может быть передана метаинформация, в которой могут быть отражены дополнительные данные:
211+
```json
212+
{
213+
"meta": {
214+
"sort": [
215+
{
216+
"key": "quantity",
217+
"name": "По максимальному остатку"
218+
},
219+
{
220+
"key": "-quantity",
221+
"name": "По минимальному остатку"
222+
},
223+
{
224+
"key": "price",
225+
"name": "Цена по убыванию"
226+
},
227+
{
228+
"key": "-price",
229+
"name": "Цена по возрастанию"
230+
}
231+
],
232+
"page": 0,
233+
"size": 24,
234+
"total": 1
235+
},
236+
"data": [
237+
{
238+
"id": "42c508f7-14aa-4165-9973-6c41bf4aa986",
239+
"name": "Куртка",
240+
"description": "Мужская куртка для холодной погоды.",
241+
"categoryId": "cba8cbd3-8d7b-433f-bf27-5e4f5ea07b07",
242+
"article": "JACKET001",
243+
"price": 129.99,
244+
"quantity": 25,
245+
"images": [
246+
"jacket_front.jpg",
247+
"jacket_back.jpg"
248+
],
249+
"props": {
250+
"brand": "OutdoorGear",
251+
"size": "L",
252+
"color": "Black"
253+
}
254+
}
255+
],
256+
"filters": [
257+
{
258+
"key": "price",
259+
"name": "Цена",
260+
"values": {
261+
"min": 129.99000549316406,
262+
"max": 129.99000549316406
263+
},
264+
"type": "RANGE"
265+
},
266+
{
267+
"key": "category",
268+
"name": "Категория",
269+
"values": [
270+
{
271+
"count": 1,
272+
"value": "cba8cbd3-8d7b-433f-bf27-5e4f5ea07b07",
273+
"label": "cba8cbd3-8d7b-433f-bf27-5e4f5ea07b07"
274+
}
275+
],
276+
"type": "CHECKBOX"
277+
},
278+
{
279+
"key": "color",
280+
"name": "Цвет",
281+
"values": [
282+
{
283+
"count": 1,
284+
"value": "Black",
285+
"label": "Black"
286+
}
287+
],
288+
"type": "CHECKBOX"
289+
}
290+
]
291+
}
292+
```

LICENSE

Lines changed: 0 additions & 21 deletions
This file was deleted.

0 commit comments

Comments
 (0)