Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Проект на допуск #2 #2

Closed
wants to merge 261 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
261 commits
Select commit Hold shift + click to select a range
aacbaf0
feat(libs): add tsv-file-reader
Sep 22, 2023
63ba633
feat(cli): add import command
Sep 22, 2023
e7857fe
feat(cli): add cli application
Sep 22, 2023
643d121
feat(cli): add cli application
Sep 22, 2023
d96f488
chore(eslint): turn off unsupported-es-syntax rule
Sep 22, 2023
d5f9b3a
feat(cli): color the console output
Sep 22, 2023
b8029fb
chore(deps): add json-server
Sep 22, 2023
36b03cb
docs(workflow): add mock server command
Sep 26, 2023
8b09dc7
refactor(main-cli): move helper function into the module
Sep 26, 2023
bb9623a
feat(helpers): add offer creation helper
Sep 26, 2023
d6c56f3
fix(types): fix exports
Sep 26, 2023
ec8c1ca
feat(file-reader): use streams
Sep 26, 2023
ef3ed1f
feat(file-writer): add tsv-file-writer
Sep 26, 2023
ab6e238
feat(import): create offer for each line
Sep 26, 2023
351201c
refactor(tsv-file-reader): use events
Sep 26, 2023
ddd3be0
feat(libs): add offer-generator
Sep 28, 2023
831343b
feat(cli): add generate command
Sep 28, 2023
91c1e02
chore(deps): add dayjs & got
Sep 28, 2023
3a611aa
chore(tsconfig): remove strictPropertyInitialization
Sep 28, 2023
7c1d999
feat(mocks): add mock-server-data
Sep 28, 2023
86a6634
refactor(cli): use logging helpers
Sep 28, 2023
406040e
fix(getRandomItems): fix empty slice
Sep 28, 2023
c30b6d3
feat(logger): add interface
Sep 29, 2023
00fff81
chore(deps): install pino
Sep 29, 2023
a7beb21
feat(logger): implement pino logger
Sep 29, 2023
398f797
feat(rest): add rest application class
Sep 29, 2023
7c56223
feat: add initialization to main.rest.ts
Sep 29, 2023
07adfa6
chore: change start script
Sep 29, 2023
ec32ad0
chore(deps): install pino-pretty
Sep 29, 2023
d66aa92
feat(logger): support logging to files
Sep 29, 2023
3e14aa9
feat(logger): support multitransport (terminal & file)
Sep 29, 2023
f4b6257
refactor: shorten import
Sep 29, 2023
a8fa705
feat(config): add interface
Sep 29, 2023
ede43bc
feat(config): add rest config class implementation
Sep 29, 2023
ca8d73a
chore(deps): install dotenv
Sep 29, 2023
e1d95fa
feat(config): support dotenv
Sep 29, 2023
7e091d0
feat(main): use config
Sep 29, 2023
bbf9ba8
chore(deps): install convict
Sep 29, 2023
a5fcf91
feat(config): add configuration schema
Sep 29, 2023
e0e6f46
feat(config): validate .env
Sep 29, 2023
97eabc4
feat(config): extend rest schema
Sep 29, 2023
63b44fc
feat(config): throw error if config invalid
Sep 29, 2023
3fe8557
chore(deps): install inversify & reflect-metadata
Sep 30, 2023
0411213
feat(types): add component abstraction
Sep 30, 2023
d455aab
feat(main): create container for dependencies
Sep 30, 2023
4dbd484
feat(config): inject logger dependency
Sep 30, 2023
b81bb64
chore(deps): install tslib
Sep 30, 2023
f2804c8
feat(rest): inject dependencies
Sep 30, 2023
67f911c
feat(main): configure container
Sep 30, 2023
ec7f125
style(tsv-file-reader): remove initialization as part of expression
Sep 30, 2023
fcee956
feat: add docker-compose configuration
Oct 3, 2023
20af058
chore(deps): install mongoose
Oct 3, 2023
5898851
feat(config): update rest schema
Oct 3, 2023
9d2b5a5
feat(database-client): add interface
Oct 3, 2023
f46b504
chore(deps): install @typegoose
Oct 3, 2023
4cccaa2
feat(database-client): implement MongoDatabaseClient
Oct 3, 2023
894f12d
feat: add database helper
Oct 3, 2023
e9b0de5
feat: add DatabaseClient component
Oct 3, 2023
9b12092
feat(main): register DatabaseClient as a dependency
Oct 3, 2023
73e686f
feat(rest): add database connection
Oct 3, 2023
17fa6f7
feat(config): update rest schema
Oct 3, 2023
e266abf
feat(helpers): add retry helper
Oct 3, 2023
97fc2e4
feat(rest): use configurable retries
Oct 3, 2023
947b6e7
feat(user): add user entity
Oct 3, 2023
e11895a
feat(user): add methods to handle passwords
Oct 3, 2023
08a8f21
feat(user): add dto
Oct 3, 2023
c90d089
feat(rest): create dependency container
Oct 3, 2023
adc3a97
feat(user): create dependency container
Oct 3, 2023
e04d4cf
style: reformat with prettier
Oct 3, 2023
b6d8aef
feat(user): implement DefaultUserService
Oct 3, 2023
4f3ecc8
feat(offer): add OfferEntity
Oct 9, 2023
7e98a1d
feat(offer): add CreateOfferDTO
Oct 9, 2023
263af87
feat(offer): add OfferService
Oct 9, 2023
600beab
refactor(user): use ternary
Oct 9, 2023
df54612
feat(main): use offer container
Oct 9, 2023
e716bfd
fix: remove passwords from mock data
Oct 9, 2023
a918a0c
chore: update models
Oct 9, 2023
0edb315
fix(offer-generator): remove password from generation
Oct 9, 2023
a346913
feat(logger): add condole logger
Oct 9, 2023
35ecd8b
feat(offer-generator): remove comment amount
Oct 9, 2023
fd88873
fix(mongo): fix connect without options
Oct 9, 2023
1948e2f
feat(cli): use console logger
Oct 9, 2023
b3dd044
feat(cli): import to database
Oct 9, 2023
78a9e7a
fix: fix allowMixed warnings for models
Oct 9, 2023
148c161
feat(api): add initial spec
Oct 10, 2023
cf74835
chore(deps): install nodemon
Oct 10, 2023
f9853e7
chore(dev): configure nodemon
Oct 10, 2023
721901f
feat(api): describe user actions
Oct 10, 2023
38c1ec4
feat(api): describe offer actions
Oct 11, 2023
8a34e4b
feat(api): describe favorite actions
Oct 11, 2023
143d349
feat(api): describe premium actions
Oct 11, 2023
af36394
feat(comment): add comment model
Oct 11, 2023
048eb77
feat(api): update spec
Oct 11, 2023
ead4e58
feat(comment): add create-comment dto
Oct 11, 2023
056b01d
feat(comment): add comment service
Oct 11, 2023
e6bb7af
feat(offer): update offer service
Oct 12, 2023
77b0758
fix(offer): fix average rating aggregation
Oct 12, 2023
247277f
feat(user): add favorites
Oct 13, 2023
e123ba5
feat(offer): update service
Oct 13, 2023
ba4c8f8
fix(cli): fix generate & import commands
Oct 13, 2023
ae128bb
docs: update Workflow
Oct 13, 2023
6f2ca9e
feat(offer): split aggregation pipeline
Oct 13, 2023
f2baac7
chore(deps): install express
Oct 13, 2023
8ed0cd2
feat(rest): create express server
Oct 13, 2023
507bc50
chore: clean up imports
Oct 13, 2023
cddd4cb
feat(rest): add route interface
Oct 13, 2023
5d7df7e
feat(rest): add controller interface
Oct 13, 2023
87b3ca7
chore(deps): install http-status-codes
Oct 13, 2023
651ad29
feat(rest): add base controller class
Oct 13, 2023
c61fe49
feat(user): add controller
Oct 13, 2023
7af142d
feat(user): add controller to container
Oct 13, 2023
a4355d8
feat(rest): inject and register controllers
Oct 13, 2023
17c930e
chore(deps): install class-transformer
Oct 13, 2023
8a783c7
chore(deps): install express-async-handler
Oct 13, 2023
f21b98a
feat(rest): init middleware
Oct 13, 2023
b97361f
feat(rest): add exception filter interface
Oct 13, 2023
2d36703
feat(rest): add http-error
Oct 13, 2023
8bbbd24
feat(rest): add base-exception-filter
Oct 13, 2023
241d9ed
feat(rest): init exception filters
Oct 13, 2023
2b72020
feat(rest): handle async errors
Oct 13, 2023
8c47e16
feat(user): add user rdo
Oct 13, 2023
0e67048
feat(user): add /register route
Oct 13, 2023
0b80d4a
chore(spec): update spec
Oct 13, 2023
a9580fb
feat(user): add /login route
Oct 13, 2023
ee1da28
feat(user): add /login GET route
Oct 13, 2023
4bca0c5
feat(user): add /logout route
Oct 13, 2023
10c0257
chore(user): update imports
Oct 13, 2023
facb6ca
feat(offer): add offer controller
Oct 13, 2023
2dc4fd3
feat(offer): add handlers
Oct 14, 2023
313c22b
feat: add comment controller
Oct 20, 2023
bfbc401
feat(offer): add route for comments
Oct 20, 2023
8293266
feat(comments): update model and spec
Oct 20, 2023
e902b64
feat(rest): add middleware support to controllers
Oct 20, 2023
87df48c
feat(middleware): add object_id validation middleware
Oct 20, 2023
933eb86
feat(rest): turn on objectId validation middleware
Oct 20, 2023
7c16298
chore(deps): install class-validator
Oct 20, 2023
ebec9ea
feat(rest): add validate-dto middleware
Oct 21, 2023
e06a885
feat(offer): use validate-dto middleware
Oct 21, 2023
bff2b8f
feat(user): use validate-dto middleware
Oct 21, 2023
5e9b009
feat(offer): validate update offer dto
Oct 22, 2023
5ab1596
feat(comment): validate create comment dto
Oct 22, 2023
9961bd0
feat(middleware): add document exists middleware
Oct 22, 2023
3c4b5e9
feat(offer): use document exists middleware
Oct 22, 2023
a98341b
feat(env): add UPLOAD_FILE_DIRECTORY variable
Oct 22, 2023
612e4f9
feat(rest): register express.static middleware
Oct 22, 2023
d2d30de
chore(deps): install multer, mime-types, nanoid
Oct 22, 2023
d2772ee
feat(middleware): add upload file middleware
Oct 22, 2023
0619da9
feat(user): add avatar upload route
Oct 22, 2023
5ddd23f
chore(deps): install jose
Oct 25, 2023
5e943a6
feat(rest): add JWT_SECRET to schema
Oct 25, 2023
8aaece5
feat(user): add verify password method to entity
Oct 25, 2023
b634018
feat(auth): add errors
Oct 25, 2023
628fa1a
feat(auth): add service
Oct 25, 2023
7ac298a
feat(auth): add exception filter
Oct 25, 2023
9f84849
feat(rest): use auth container
Oct 25, 2023
1fde9e8
feat(user): implement login
Oct 25, 2023
69eee1a
feat(rest): use auth exception filter
Oct 25, 2023
21ffe76
feat(rest): add parse-token middleware
Oct 25, 2023
c882dc3
feat(rest): use parse-token middleware
Oct 25, 2023
8d2ec61
feat(comment): take authorId from token
Oct 25, 2023
8e5f7c7
feat(rest): add private-route middleware
Oct 25, 2023
f81240a
feat(comment): use private-route middleware
Oct 25, 2023
7423b5e
style: reformat for readability
Oct 25, 2023
7e98319
feat(user): use default avatar
Oct 28, 2023
6049352
feat(offer): use private-route middleware
Oct 28, 2023
41bff19
feat(user): remove logout route
Oct 28, 2023
dddd1a0
feat(user): implement token check
Oct 28, 2023
019cc10
feat(offer): fill in author id when creating an offer
Oct 28, 2023
85d3966
refactor(user): add a default avatar to user entity
Oct 28, 2023
bde3bf8
feat(user): add update to service
Oct 28, 2023
371a65f
feat(user): update avatar after uploading
Oct 28, 2023
8233d43
fix(user): return user rdo on login
Oct 28, 2023
21929e3
fix(comment): fix population
Oct 28, 2023
76d7749
refactor(offer): refactor pipeline
Oct 28, 2023
5c4ee8a
fix(offer): fix location validation
Oct 28, 2023
2344839
fix(offer): fix offer creation
Oct 28, 2023
2916390
feat(middleware): add validate author middleware
Oct 28, 2023
855feb2
feat(offer): check author before editing
Oct 28, 2023
fe0fd5d
feat(offer): check author before deleting
Oct 28, 2023
fb2f131
fix(offer): sort before limit
Oct 28, 2023
da947d0
feat(comment): sort and limit comments
Oct 28, 2023
cb1c4cf
refactor(user): use aggregation
Oct 28, 2023
c698afe
feat(city): add city module
Oct 29, 2023
75d3a23
feat(cli): generate locations within city
Oct 29, 2023
bcdba12
feat(rest): use city container
Oct 29, 2023
32bab25
feat(coordinates): move coordinates class to entity
Oct 29, 2023
782f63b
feat(offer): check that city exists
Oct 29, 2023
6cf717e
feat(city): use city controller
Oct 29, 2023
f917258
chore: remove prettier
Oct 29, 2023
8598ae5
chore: fix lint errors
Oct 29, 2023
dc9df8d
feat(cli): update help
Oct 29, 2023
088164b
chore(rest): add env example and update workflow
Oct 29, 2023
18de00c
chore(cli): update help
Oct 29, 2023
9b1de13
docs: update Workflow
Oct 29, 2023
42323f9
feat(validate-dto): update error format
Oct 29, 2023
da17bac
feat(spec): update createUser schema
Oct 29, 2023
6e20664
feat(spec): update validationError schema
Oct 29, 2023
7c21c1c
feat(spec): describe /users/register
Oct 29, 2023
c871b37
feat(spec): describe POST /users/login
Oct 29, 2023
1aca011
feat(spec): describe GET /users/login
Oct 29, 2023
d521866
feat(spec): describe POST /users/avatar
Oct 29, 2023
7190a54
feat(spec): describe GET /users/favorites
Oct 29, 2023
34e067a
feat(spec): describe PUT /users/favorites
Oct 29, 2023
d31b3c9
feat(spec): describe GET /offers
Oct 29, 2023
93ae07e
feat(spec): describe POST /offers
Oct 29, 2023
dd711d8
feat(spec): describe POST /offers/:offerId
Oct 29, 2023
2ceb5fe
feat(spec): describe PATCH /offers/:offerId
Oct 29, 2023
3834e1b
feat(spec): describe DELETE /offers/:offerId
Oct 29, 2023
8460554
feat(spec): describe GET /offers/:offerId/comments
Oct 29, 2023
c9947bf
feat(spec): describe POST /comments
Oct 29, 2023
ccb24ea
feat(spec): describe GET /cities/:cityId/premium
Oct 29, 2023
351b53d
chore(deps): install cors
Oct 31, 2023
e61e413
feat(rest): use cors middleware
Oct 31, 2023
48c61b7
refactor: split exception filter by layers
Oct 31, 2023
bb3dddc
docs: update error format in specification
Oct 31, 2023
e72a8cf
refactor(user): remove avatarPath from dto
Oct 31, 2023
6276f34
docs: update createUser in specification
Oct 31, 2023
423376f
feat(config): add HOST env variable
Oct 31, 2023
ced4ad9
docs: document HOST env var
Oct 31, 2023
329958d
feat: add STATIC_DIRECTORY env variable
Oct 31, 2023
a6c1167
docs: document STATIC_DIRECTORY env var
Oct 31, 2023
d97e417
feat: add path transformer
Oct 31, 2023
86d6265
refactor(user): update RDOs
Oct 31, 2023
c3060c0
feat(user): transform avatar path on upload
Oct 31, 2023
eb08b35
feat(offer): support offer image upload
Oct 31, 2023
281b767
feat(offer): make imagePreview computed
Oct 31, 2023
ddc9f0c
fix(cli): fix offer generation
Oct 31, 2023
2c79af1
fix(spec): fix specification
Oct 31, 2023
a279c2b
chore: update README
Oct 31, 2023
729b0af
refactor: use env variables in docker file
Nov 4, 2023
6d095a3
refactor(cli): fix review comments
Nov 4, 2023
a5ab79d
refactor(rest): fix review comments
Nov 4, 2023
c248677
refactor(helpers): fix review comments
Nov 4, 2023
d386367
refactor(libs): fix review comments
Nov 4, 2023
97e6f30
refactor: remove City entity
Nov 4, 2023
db2ae05
refactor: remove Coordinates entity
Nov 4, 2023
1f3cc83
refactor: moved favorites to offers controller
Nov 4, 2023
8d680c7
feat(middleware): add public-only middleware
Nov 4, 2023
d899c84
feat(middleware): check for param in body
Nov 4, 2023
ff014ce
refactor(comment): use constants
Nov 4, 2023
34b00da
refactor(user): use constants
Nov 4, 2023
f15b54e
refactor(offer): use constants
Nov 4, 2023
0904e30
fix(offer): fix premium route
Nov 4, 2023
29fd0e8
fix(user): fix login route
Nov 4, 2023
c47a834
docs(spec): update
Nov 4, 2023
8f0f1eb
fix(offer): fix unlimited query limit
Nov 4, 2023
7f0efb6
fix: check file mime-type
Nov 4, 2023
59eef52
chore: add frontend
Oct 31, 2023
9b97334
feat(frontend): add dto
Nov 4, 2023
dbf6db9
feat(frontend): marry BE and FE
Nov 5, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
26 changes: 26 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Файл с настройками для редактора.
#
# Если вы разрабатываете в редакторе WebStorm, BBEdit, Coda или SourceLair
# этот файл уже поддерживается и не нужно производить никаких дополнительных
# действий.
#
# Если вы ведёте разработку в другом редакторе, зайдите
# на https://editorconfig.org и в разделе «Download a Plugin»
# скачайте дополнение для вашего редактора.

root = true

[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true

[*.md]
trim_trailing_whitespace = false

[*.tsv]
indent_style = tab
indent_size = 2
12 changes: 12 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
HOST=myserver.com
PORT=4000
SALT=secret
DB_HOST=127.0.0.1
DB_USER=admin
DB_PASSWORD=test
DB_NAME=six-cities
DB_MAX_RETRIES=3
DB_RETRY_TIMEOUT=1000
UPLOAD_DIRECTORY=upload
STATIC_DIRECTORY=public
JWT_SECRET=super-secret!
2 changes: 2 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
dist/
frontend/
16 changes: 16 additions & 0 deletions .eslintrc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
root: true
env:
es2021: true
node: true
parser: "@typescript-eslint/parser"
parserOptions:
ecmaVersion: 2021
sourceType: module
plugins:
- "@typescript-eslint"
extends:
- "plugin:@typescript-eslint/recommended"
- "htmlacademy/node"
rules:
'node/no-unsupported-features/es-syntax': 'off'
'@typescript-eslint/no-unsafe-declaration-merging': 'off'
29 changes: 29 additions & 0 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
on:
push:
branches:
- master
pull_request:
branches:
- '*'

name: Project check
jobs:
check:
name: Check
runs-on: ubuntu-latest
steps:
- name: Set up Node.js
uses: actions/setup-node@v1
with:
node-version: '16'

- uses: actions/checkout@master
name: Checkout

- name: Install dependencies
run: |
if [ -f 'package.json' ]; then npm install; else echo 'Skip. The file package.json does not exist'; fi

- name: Run checks
run: |
if [ -f 'package.json' ]; then npm run lint; else echo 'Skip. The file package.json does not exist'; fi
13 changes: 13 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
.vscode/
/node_modules/
/build/
/lib/
/dist/
/docs/
.idea/*
/upload/

.DS_Store
coverage
*.log
.env
42 changes: 42 additions & 0 deletions Contributing.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Руководство по внесению изменений

Поддерживайте ваш репозиторий обновлённым. Когда наставник принимает ваш пулреквест, он попадает в репозиторий Академии, но не в ваш форк.

#### 1. Не коммитьте ничего самостоятельно в `master` вашего репозитория

Это помешает вам аккуратно обновлять ваш репозиторий, могут возникнуть конфликты.

#### 2. Прежде чем приступать к новому заданию, обновите `master`

Обновить свой репозиторий из репозитория Академии можно так:

```
# В вашей локальной копии переключитесь в ветку master
git checkout master

# Заберите изменения из репозитория Академии¹
git pull academy master

# Отправьте изменения в ваш форк на Гитхабе
git push
```

¹ В `academy` должна быть ссылка на репозиторий Академии. Если его там нет, добавьте:

```
git remote add academy git@github.com:htmlacademy-nodejs-api/196306-six-cities-5.git
```

Когда вы обновили `master`, создайте ветку для нового задания:

```
git checkout -b module2-task1
```

`module2-task1` — это название ветки. Под описанием каждого задания в интерфейсе интенсива для вас будет указано правильное название ветки.

--

#### Есть вопрос?

Посмотрите [коллекцию часто задаваемых вопросов по Git](http://firstaidgit.ru).
49 changes: 49 additions & 0 deletions Readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Личный проект «Шесть городов»

* Студент: [Елена Рашкован](https://htmlacademy.ru/profile/id196306).
* Наставник: [Константин Ильин](https://htmlacademy.ru/profile/id2374827).

---

_Не удаляйте и не изменяйте папки и файлы:_
_`.editorconfig`, `.gitattributes`, `.gitignore`._

---

## Памятка

### 1. Зарегистрируйтесь на Гитхабе

Если у вас ещё нет аккаунта на [github.com](https://github.com/join), скорее зарегистрируйтесь.

### 2. Создайте форк

Откройте репозиторий и нажмите кнопку «Fork» в правом верхнем углу. Репозиторий из Академии будет скопирован в ваш аккаунт.

<img width="769" alt="Press 'Fork'" src="https://cloud.githubusercontent.com/assets/259739/20264045/a1ddbf40-aa7a-11e6-9a1a-724a1c0123c8.png">

Получится вот так:

<img width="769" alt="Forked" src="https://cloud.githubusercontent.com/assets/259739/20264122/f63219a6-aa7a-11e6-945a-89818fc7c014.png">

### 3. Клонируйте репозиторий на свой компьютер

Будьте внимательны: нужно клонировать свой репозиторий (форк), а не репозиторий Академии. Также обратите внимание, что клонировать репозиторий нужно через SSH, а не через HTTPS. Нажмите зелёную кнопку в правой части экрана, чтобы скопировать SSH-адрес вашего репозитория:

<img width="769" alt="SSH" src="https://cloud.githubusercontent.com/assets/259739/20264180/42704126-aa7b-11e6-9ab4-73372b812a53.png">

Клонировать репозиторий можно так:

```
git clone SSH-адрес_вашего_форка
```

Команда клонирует репозиторий на ваш компьютер и подготовит всё необходимое для старта работы.

### 4. Начинайте обучение!

---

<a href="https://htmlacademy.ru/profession/fullstack"><img align="left" width="50" height="50" title="HTML Academy" src="https://up.htmlacademy.ru/static/img/intensive/nodejs/logo-for-github-2.png"></a>

Репозиторий создан для обучения на профессиональном онлайн‑курсе «[Node.js. Профессиональная разработка REST API](https://htmlacademy.ru/profession/fullstack)» от [HTML Academy](https://htmlacademy.ru).
173 changes: 173 additions & 0 deletions Workflow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
# Как работать над проектом

## Запуск проекта

Убедитесь, что на рабочем компьютере установлен актуальный LTS релиз **Node.js**. Актуальная версия **Node.js** указана в файле `package.json` в поле `node`.

### Установите зависимости

Выполните команду

```bash
npm install
```

### Разверните базу данных MongoDB

В проекте используется база данных **MongoDB** версии 4.2.

Если вы используете Docker, воспользуйтесь файлом `docker-compose.dev.yml`, расположенным в корне проекта, для быстрого разворачивания базы данных.

### Наполните базу данных

Запустите JSON-сервер с моковыми данными:

```bash
npm run mock:server
```

Сгенерируйте нужное количество предложений об аренде:

```bash
npm run cli -- --generate 100 ./mocks/mock-data.tsv http://localhost:3123/api
```

Импортируйте данные в базу данных, используя настройки подключения из файла `docker-compose`:

```bash
npm run cli -- --import ./mocks/mock-data.tsv admin test 127.0.0.1 six-cities secret
```

### Настройте переменные окружения

В корне проекта находится файл `.env.example`. Скопируйте его содержимое в файл `.env` и настройте значения переменных.

#### Переменные окружения

```bash
HOST=localhost - Имя хоста, на котором стартует сервер

PORT=4000 - Порт для входящих соединений

SALT=secret - Соль для хэширования паролей

DB_HOST=127.0.0.1 - IP-адрес сервера базы данных (MongoDB)

DB_USER=admin - Имя пользователя для подключения к базе данных

DB_PASSWORD=test - Пароль для подключения к базе данных

DB_PORT=27017 - Порт для подключения к базе данных (MongoDB)

DB_NAME=six-cities - Имя базы данных (MongoDB)

DB_MAX_RETRIES=3 - Максильмальное число попыток переподключения к БД

DB_RETRY_TIMEOUT=1000 - Число миллисекунд между попытками подключения к БД

UPLOAD_DIRECTORY=upload - Директория для хранения загружаемых пользователями файлов

STATIC_DIRECTORY=public - Директория для хранения статических файлов

JWT_SECRET=super-secret! - Секрет для подписи JWT-токена
```

### Запустите проект

Выполните команду

```bash
npm start
```

## Сценарии

В `package.json` предопределено несколько сценариев.

#### Скомпилировать проект

```bash
npm run compile
```

Создаст директорию `dist` и скомпилирует проект.

#### Удалить скомпилированный проект

```bash
npm run clean
```

Удаляет директорию `dist`. Используется перед компиляцией.

#### Собрать проект

```bash
npm run build
```

Выполняет сборку проекта: удаляет ранее скомпилированный проект и компилирует заново.

#### Проверить линтером

```bash
npm run lint
```

Запуск проверки проекта статическим анализатором кода **ESLint**.

Линтер проверяет файлы только внутри директории `src`.

**Обратите внимание**, при запуске данной команды, ошибки выводятся в терминал.

#### Запустить ts-модуль без компиляции

```bash
npm run ts -- <Путь к модулю с ts-кодом>
```

Пакет `ts-node` позволяет выполнить TS-код в Node.js без предварительной компиляции. Используется только на этапе разработки.

#### Запустить проект

```bash
npm start
```

В процессе запуска проекта будет выполнен процесс «Сборки проекта» и запуска результирующего кода.

#### Запустить проект в режиме разработки

```bash
npm run start:dev
```

#### Запустить JSON-server с моковыми данными

```bash
npm run mock:server
```

#### Запустить консольную утилиту

```bash
npm run cli
```

## Структура проекта

### Директория `src`

Исходный код проекта: компоненты, модули и так далее. Структура директории `src` может быть произвольной.

### Файл `Readme.md`

Инструкции по работе с учебным репозиторием.

### Файл `Contributing.md`

Советы и инструкции по внесению изменений в учебный репозиторий.

### Остальное

Все остальные файлы в проекте являются служебными. Пожалуйста, не удаляйте и не изменяйте их самовольно. Только если того требует задание или наставник.
27 changes: 27 additions & 0 deletions docker-compose.dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
version: '3.9'
services:
db:
image: mongo:4.2
restart: always
container_name: six-cities_mongodb
environment:
MONGO_INITDB_ROOT_USERNAME: ${DB_USER}
MONGO_INITDB_ROOT_PASSWORD: ${DB_PASSWORD}
ports:
- '27017:27017'
volumes:
- six-cities_data:/data/db

db_ui:
image: mongo-express:latest
restart: always
container_name: six-cities_mongo_express
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: ${DB_USER}
ME_CONFIG_MONGODB_ADMINPASSWORD: ${DB_PASSWORD}
ME_CONFIG_MONGODB_URL: mongodb://${DB_USER}:${DB_PASSWORD}@db:27017/
ports:
- '8081:8081'

volumes:
six-cities_data:
Loading
Loading