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

Ершов Кирилл Дмитриевич #8

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vacode/
90 changes: 89 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,95 @@
4. Найденная в соответствии с условием задачи категория должна выводиться в изначальном наименовании, приведенном в файле с входными данными. Если таких категорий несколько, то на вывод они все подаются в алфавитном порядке.

## Автор решения

Ершов Кирилл Дмитриевич
## Описание реализации
Для решения будет использован следующие технологический стэк:
Java, Spring (Spring Boot, Spring Web)
Spring Boot нам нужен, чтобы было удобнее запускать приложение.
Spring Web же, чтобы прописать конечные точки.

Сервис для аналитики будет построен, как REST сервис.

Сервис будет спроектирован в соответствии со слоенной архитектурой, всего будет два слоя:
* Controller - отвечает за логику принятия и отправки сообщений.
* Service - нужен для реализации бизнес логики, в нашем же случае, там будет функция, отвечающая за выдачу отчета по самым популярным товарам за период с 1 по 31 декабря.

Также для удоства будут отпределены два DTO объекта, первый будет презентовать принимаемый набор данных, а второй выдачу отчета по набору данных.

Важно было бы отметить, что параметры для фильтрации могли бы быть заданы в параметрах запроса, но так как задача состояла сделать сервис по фильтрации специальных параметров, эту идею решено было не исполнять.
## Инструкция по сборке и запуску решения
С Docker:
1. Сначала скомпилируйте файл .jar. Для этого:
1.1. Войдите в корневую дирректорию проекта, то есть task2
1.2. Выполните команду "./mvnw install"
2. Далее запустите команду "docker compose up"

ИЛИ чтобы не мучаться с Docker:
1. Перейдите в корневую директорию проекта, то есть task2.
2. Выполните команду "./mvnw spring-boot:run"

Готово, теперь приложение будет доступно по http://localhost:8080.
Конечно, чтобы протестировать приложение можно выполнить команду:

curl --location 'http://localhost:8080/purchases/analyze' \
--header 'Content-Type: application/json' \
--data '[
{
"ordered_at": "2023-12-14T11:10:29.408",
"items": [
{
"id": "b250ed3c-25d7-462b-9aae-4cae6db4e1e5",
"name": "Игровая приставка Sony Play Station 5",
"category": {
"id": "e3386407-3918-422a-b128-ad23a2ddf9c3",
"name": "Бытовая техника"
}
},
{
"id": "bd4395cc-6602-4206-bc7a-01a8c5b1eef9",
"name": "Набор уходовых средств Obagi",
"category": {
"id": "0bf9cb4d-30db-4440-a9dc-37edb0e78684",
"name": "Средства для ухода за собой"
}
},
{
"id": "3975d9a4-1adc-4eab-baf1-55b59e78136d",
"name": "Богатый папа, бедный папа",
"category": {
"id": "8b9bb003-6d90-43c4-9158-cfeca24b20f8",
"name": "Книги"
}
}
]
},
{
"ordered_at": "2023-12-21T18:31:21.349",
"items": [
{
"id": "e188a4ce-d1c9-45b9-b757-4e9bcfc7281a",
"name": "Телевизор LG C3",
"category": {
"id": "e3386407-3918-422a-b128-ad23a2ddf9c3",
"name": "Бытовая техника"
}
},
{
"id": "a57548eb-9a1d-4d2c-8397-9d0c2c60fce6",
"name": "Лонгслив SUPREME x CROC",
"category": {
"id": "593d36d5-1d8b-4237-beb4-e1c8e361c335",
"name": "Одежда"
}
},
{
"id": "b8822fc1-b442-430c-9120-a3a1cedcb573",
"name": "Набор зимней резины Pirelli",
"category": {
"id": "3d400f36-2766-40dc-95dd-f82cf3eef6f3",
"name": "Автозапчасти"
}
}
]
}
]'
Binary file added task2/.mvn/wrapper/maven-wrapper.jar
Binary file not shown.
2 changes: 2 additions & 0 deletions task2/.mvn/wrapper/maven-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.6/apache-maven-3.9.6-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar
3 changes: 3 additions & 0 deletions task2/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
FROM eclipse-temurin:17-jdk-alpine
COPY target/*.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
9 changes: 9 additions & 0 deletions task2/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
version: '3.8'
services:
report-service:
image: report-service:0.0.1
build:
context: .
dockerfile: Dockerfile
ports:
- '8080:8080'
Loading