# TEMPORARI BACKEND DOCS
Base URL: https://goosetrack-backend-zk53.onrender.com/
Особенности бэкенда: если на бэк 15 минут не приходит никаких запросов, то он останавливается, а когда ему приходит любой запрос он заново запускается. Это означает, что любой запрос может упереться в timeout если до него за 15 минут не было действий.
## **'/auth'**
### **POST '/login'**
#### request body:
* **email :**
* **password :**
#### fail responses
###### 400 failed request body validation
###### 404 user not found
#### success response
* token: jwt token used to authorise all request, expires in 1 hour;
* refreshToken: a token that is used to logout and refresh a jwt token;
* user: a user object with all the fields
### **POST '/signup'** or **POST '/register'**
#### request body:
* **email :**
* **password :**
* **name :**
#### fail responses
###### 400 failed request body validation
###### 403 email taken
#### success response
* **token :** jwt token used to authorise all request, expires in 1 hour;
* **refreshToken :** a token that is used to logout and refresh a jwt token;
* **user :** a user object with all the fields
### **GET '/refreshToken'**
#### request authorisation header : Bearer refreshToken
#### fail responses
###### 401 empty or invalid token
#### success response
* **token :** jwt token used to authorise all request, expires in 1 hour;
### **DELETE '/logout'**
#### request authorisation header : Bearer refreshToken
#### fail responses
###### 401 empty or invalid token
#### success response
* **success :** true
## '/users'
### GET '/'
#### request authorisation header : Bearer token
#### fail responses
###### 401 empty or invalid token
###### 404 user not found (user deleted but token valid)
#### success response
* **user :** a user object with all the fields
### PATCH '/'
#### request authorisation header : Bearer token#### request body:
* **email \|| name || other fields to patch**
#### fail responses
###### 400 failed request body validation
###### 401 empty or invalid token
###### 404 user not found (user deleted but token valid)
#### success response
* **user :** a user object with all the fields
### DELETE '/'
#### request authorisation header : Bearer token#### request
#### fail responses
###### 401 empty or invalid token
#### success response
* **success :** true
# Логика программы
Когда сайт запускается, включается самый верхний компонент под редаксом, работает один раз и тухнет. В этом компоненте происходит следущее:
1. в поле current user в сторе записывается null
2. компонент проверяет наличие refreshToken в local storage
3. если refreshToken отсутствует, компонент затухает
4. если присутствует, то программа отправляет GET запрос на auth/rereshToken с этим токеном в заголовке (bearer token)
5. Если ответ не success, то refreshToken удаляется из localstorage и компонент затухает
6. Если ответ.статус = 200, то пользователь получает обычный токен доступа, можно записать его в переменные или куки или локалсторэдж (лучше в куки, он все равно будет обновлятся при каждой загрузке страницы, так что пусть теряется)
7. Планируется что вместе с токеном будет приходить юзер, но пока надо отправить новый GET запрос на /users с обычным токеном в заголовке (bearer)
8. Как только компонент получает юзера, он записывает юзера в redux store и затухает.
Можно сделать loader пока сайт не получит ответа, но можно и не делать, тогда пользователь попадет на лендинг а потом (секунд через 30) чудом его перекинет на календарь. Учитывая, что этот запрос зачастую будет первым за 15 минут (а все остальные уже будут после, а на лендинг пейдже есть ещё запрос на ревью, наверно лучше будет сделать лоудер, и если он упрется в таймаут отобразить отдельный компонент который будет говорить что server down, try reloading the page)