2
2
3
3
## How to start
4
4
5
- Use python 3.9 or 3.10 .
5
+ Use python 3.10 or 3.11 .
6
6
7
7
Create virtual environment
8
8
``` bash
@@ -17,11 +17,11 @@ pip install -r requirements.txt
17
17
The module ` uvloop==0.14.0 ` is not being installed with python 3.11 due to an error ` Could not build wheels for uvloop ` .
18
18
But it works with 3.10.
19
19
20
- Create ` .env ` file in the root of project:
20
+ Create ` .env ` file in the root of project with ` PROJECT_NAME='Your-name-for-this-project' `
21
21
``` bash
22
- PROJECT_NAME=' Your-name-for-this-project'
22
+ touch .env
23
+ echo " PROJECT_NAME='URLer'" > .env
23
24
```
24
- e.g. set a name ` PROJECT_NAME='URLer' ` .
25
25
26
26
** Run server**
27
27
``` bash
@@ -30,12 +30,21 @@ e.g. set a name `PROJECT_NAME='URLer'`.
30
30
_ Note: 0.0.0.0 may not work in Safari browser_
31
31
32
32
## How to test
33
+
34
+ ### In browser
33
35
Open any link in any browser
34
36
35
37
* Swagger http://127.0.0.1:8080/docs
36
38
* ReDoc http://127.0.0.1:8080/redoc
37
39
* OpenAPI documentation (json) http://127.0.0.1:8080/openapi.json
38
40
41
+ ### With pytest and TestClient
42
+ Run all tests by
43
+ ``` bash
44
+ pytest
45
+ ```
46
+ or create your own tests in ` tests ` folder. You may use tests in ` test_routes.py ` as template for your tests.
47
+
39
48
## A tidy up and a health check
40
49
41
50
Install additional "developer's" requirements
@@ -68,6 +77,48 @@ A static type checker tool
68
77
mypy src
69
78
```
70
79
80
+ # Тому кто будет это читать
81
+
82
+ ## Способности проекта
83
+
84
+ Проект может:
85
+ - генерировать случайные короткие ссылки (точнее, айдишки - из четырех 16-ричных цифр) -
86
+ ```
87
+ POST `/shorten` json={'url': <ссылка>}
88
+ ```
89
+ - выдавать полную ссылку по короткой ссылке
90
+ ```
91
+ GET `/link?url_id=abcd`
92
+ ```
93
+ - подсчитывать число переходов по ссылке (` RecordModel->used ` )
94
+ - удалять (deprecate) ссылки. Операция безвозвратная
95
+ ```
96
+ PATCH `/deprecate?url_id=abcd`
97
+ ```
98
+ - выдавать запись из базы данных о ссылке
99
+ ```
100
+ GET `/info?url_id=abcd`
101
+ ```
102
+ - выдавать ошибки. Например, при попытке передать неверную ссылку (например, "https://example .com")
103
+
104
+
105
+ ## Результаты
106
+
107
+ В ходе работы над этим заданием автору удалось ** впервые** :
108
+ - [x] Полноценно поработать с FastApi и подобными фреймворками в принципе
109
+ - [x] Опробовать всю магию pydantic - действительно удобный инструмент как о нём ходили слухи
110
+ - [x] Писать Post- и Patch- запросы
111
+ - [x] Поработать с сопутствующими технологиями как uvicorn, FastApi TestClient и др.
112
+
113
+ Хотелось, но не удалось впервые применить (из-за нехватки времени на эти новые технологии):
114
+ - [ ] работу с базой данных через ORM (в частности, SqlAlchemy) - вместо написаний каноничных SQL-запросов
115
+ - [ ] внедрить базу данных в свой проект
116
+ - [ ] понять чем схемы отличаются от моделей
117
+
118
+ На данный момент в качестве базы данных используется обычный словарь (класс ` BD ` ),
119
+ в котором ключу-айдишнику сопоставляется запись "базы данных".
120
+
121
+
71
122
# Проектное задание четвёртого спринта
72
123
73
124
Спроектируйте и реализуйте сервис для создания сокращённой формы передаваемых URL и анализа активности их использования.
0 commit comments