Skip to content

Commit 3f90139

Browse files
authored
Merge pull request #2 from aKorishev/main_svc
[main_svc] Добавил второй этап
2 parents 030b10e + e1d8ba6 commit 3f90139

File tree

83 files changed

+3326
-752
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+3326
-752
lines changed

README.md

+126-2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,126 @@
1-
# java-explore-with-me
2-
Template repository for ExploreWithMe project.
1+
# Explore with me - микросервисное приложение-афиша мероприятий
2+
Java, Spring (Boot, Data, Security, MVC), PostgreSQL, REST API, Docker, Mockito, JUnit, Postman, MapStruct, Lombok, Thymeleaf, JavaScript, CSS, HTML
3+
4+
## О проекте
5+
Приложение для размещения мероприятий и поиска компаний для участия в них
6+
7+
<p align="center">
8+
<img src="https://pictures.s3.yandex.net/resources/S19_09-2_1674558748.png" />
9+
</p>
10+
11+
Приложение содержит два микросервиса:
12+
- main-service для бизнес-логики
13+
- stats-service для сбора статистики просмотра событий по ip, который состоит из трех модулей
14+
15+
<p align="center">
16+
<img src="https://pictures.s3.yandex.net/resources/S18_01_1674662618.png" />
17+
</p>
18+
19+
У каждого микросервиса есть своя база данных.
20+
Микросервисы и базы данных запускаются в собственных Docker контейнерах (4 шт).
21+
22+
## Основная функциональность:
23+
24+
### Неавторизованные пользователи
25+
- просматривать все события, в том числе по категориям
26+
- видеть детали отдельных событий
27+
- видеть закрепленные подборки событий
28+
29+
### Авторизованные пользователи
30+
- добавление в приложение новые мероприятия, редактировать их и просматривать после добавления
31+
- подача заявок на участие в интересующих мероприятиях
32+
- создатель мероприятия может подтверждать заявки, которые отправили другие пользователи сервиса
33+
34+
### Администраторы
35+
- добавление, изменение и удаление категорий для событий
36+
- добавление, удаление и закрепление на главной странице подборки мероприятий
37+
- модерация событий, размещённых пользователями, — публикация или отклонение
38+
- управление пользователями — добавление, активация, просмотр и удаление
39+
40+
## Эндпоинты
41+
42+
### main-service
43+
44+
- POST /users/{userId}/eventEntities - добавить новое событие
45+
- GET /users/{userId}/eventEntities/{eventId} - получить событие
46+
- PATCH /users/{userId}/eventEntities/{eventId} - изменить событие
47+
- GET /users/{userId}/eventEntities - получить события пользователя
48+
- GET /users/{userId}/eventEntities/{eventId}/requests - получить запросы пользователя на участие в событии
49+
- PATCH /users/{userId}/eventEntities/{eventId}/requests - изменить статус (подтверждение, отмена) заявок на участие пользователя в событии
50+
<br>
51+
52+
- GET /categories - получить все категории
53+
- GET /categories/{catId} - получить категорию
54+
<br>
55+
56+
- GET /compilations - получить все подборки событий
57+
- GET /compilations/{compId} - получить подборку событий
58+
<br>
59+
60+
- GET /admin/eventEntities - получить события по любым параметрам:
61+
- users - список id пользователей
62+
- states - список статусов события (PENDING, PUBLISHED, CANCELED)
63+
- categories - список id категорий событий
64+
- rangeStart - начало временного отрезка в формате yyyy-MM-dd HH:mm:ss
65+
- rangeEnd - конец временного отрезка в формате yyyy-MM-dd HH:mm:ss
66+
- from - параметр для пагинации
67+
- size - параметр для пагинации
68+
- PATCH /admin/eventEntities/{eventId} - изменить событие
69+
<br>
70+
71+
- GET /eventEntities - получить события по любым параметрам:
72+
- text - текст для поиска в названии и описании событий
73+
- categories - список id категорий событий
74+
- paid - только платные события (true/false)
75+
- rangeStart - начало временного отрезка в формате yyyy-MM-dd HH:mm:ss
76+
- rangeEnd - конец временного отрезка в формате yyyy-MM-dd HH:mm:ss
77+
- onlyAvailable - только доступные события, т.е. у которых еще не исчерпан лимит участников (true/false)
78+
- sort - способ сортировки событий (EVENT_DATE, VIEWS)
79+
- from - параметр для пагинации
80+
- size - параметр для пагинации
81+
- GET /eventEntities/{id} - получить событие
82+
<br>
83+
84+
- POST /users/{userId}/requests - добавить запрос на участие в событии
85+
- GET /users/{userId}/requests - получить запросы пользователя на участие в событиях
86+
- DELETE /users/{userId}/requests/{requestId}/cancel - отменить запрос на участие в событии
87+
<br>
88+
89+
- POST /users/{userId}/eventEntities/{eventId}/comments - добавить комментарий к событию
90+
- PATCH /users/{userId}/eventEntities/{eventId}/comments/{commentId} - обновить комментарий
91+
- GET /users/{userId}/eventEntities/{eventId}/comments/{commentId} - получить комментарий к событию
92+
- DELETE /users/{userId}/eventEntities/{eventId}/comments/{commentId} - удалить комментарий к событию
93+
- GET /users/{userId}/eventEntities/{eventId}/comments - получить список комментариев пользователя к событию
94+
- GET /users/{userId}/comments - получить все комментарии пользователя
95+
<br>
96+
97+
- POST /admin/users - добавить пользователя
98+
- GET /admin/users - получить всех пользователей
99+
- DELETE /admin/users/{userId} - удалить пользователя
100+
- POST /admin/compilations - добавить подборку событий
101+
- DELETE /admin/compilations/{compId} - удалить подборку событий
102+
- PATCH /admin/compilations/{compId} - обновить подборку событий
103+
- POST /admin/categories - добавить новую категорию
104+
- GET /admin/categories/{catId} - получить категорию событий
105+
- DELETE /admin/categories/{catId} - удалить категорию
106+
- GET /admin/comments - получить комментрии по любым параметрам:
107+
- text - текст для поиска в содержании комментария
108+
- users - список id пользователей
109+
- eventEntities - список id событий
110+
- statuses - статусы событий (PENDING, PUBLISHED, DELETED)
111+
- rangeStart - начало временного отрезка в формате yyyy-MM-dd HH:mm:ss
112+
- rangeEnd - конец временного отрезка в формате yyyy-MM-dd HH:mm:ss
113+
- from - параметр для пагинации
114+
- size - параметр для пагинации
115+
- PATCH /admin/comments - изменить статусы комментариев
116+
<br>
117+
118+
### stats-service
119+
120+
- GET /stats - Получение статистики по посещениям
121+
- POST /hit - Сохранение информации о том, что на uri конкретного сервиса был отправлен запрос пользователем
122+
123+
## Как использовать:
124+
Ознакомиться с примерами использования можно в [этой коллекции тестов Postman](https://github.com/yandex-praktikum/java-explore-with-me/tree/main_svc/postman)
125+
126+

docker-compose.yml

+48-26
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,62 @@
1+
version: '3.8'
12
services:
23
stats-server:
3-
build: ./stat-service/stat-server
4-
image: stat-server
5-
container_name: stat-server
4+
build: stat-service/stat-server
5+
image: ewm-stats-server
6+
container_name: "ewm-stats-server"
67
ports:
78
- "9090:9090"
89
depends_on:
910
- stats-db
1011
environment:
11-
- SPRING_DATASOURCE_URL=jdbc:postgresql://stats-db:5432/stats
12-
- SPRING_DATASOURCE_USERNAME=postgres
13-
- SPRING_DATASOURCE_PASSWORD=1
14-
12+
- SPRING_DATASOURCE_URL=jdbc:postgresql://stats-db:5432/stats_db
13+
- POSTGRES_USER=owner
14+
- POSTGRES_PASSWORD=password
15+
- DB_NAME=stats_db
16+
- SPRING_DATASOURCE_USERNAME=owner
17+
- SPRING_DATASOURCE_PASSWORD=password
18+
- DB_HOST=stats-db
19+
- DB_PORT=6541
1520

1621
stats-db:
17-
image: postgres:16.1
18-
container_name: postgres
22+
image: postgres:14-alpine
23+
container_name: "stats-db"
1924
ports:
20-
- "6541:5432"
25+
- "6543:5432"
26+
volumes:
27+
- /var/lib/postgresql/stats-service
2128
environment:
22-
- POSTGRES_PASSWORD=1
23-
- POSTGRES_USER=postgres
24-
- POSTGRES_DB=stats
25-
healthcheck:
26-
test: pg_isready -q -d $$POSTGRES_DB -U $$POSTGRES_USER
27-
timeout: 5s
28-
interval: 5s
29-
retries: 10
29+
- POSTGRES_DB=stats_db
30+
- POSTGRES_USER=owner
31+
- POSTGRES_PASSWORD=password
3032

3133
ewm-service:
32-
build: main-service
33-
image: evm-service
34-
container_name: evm-service
35-
ports:
36-
- "8080:8080"
37-
38-
ewm-db:
39-
image: postgres:16.1
34+
build: main-service
35+
image: ewm-main-service
36+
container_name: "ewm-main-service"
37+
ports:
38+
- "8080:8080"
39+
depends_on:
40+
- main-db
41+
- stats-server
42+
environment:
43+
- SPRING_DATASOURCE_URL=jdbc:postgresql://main-db:5432/main_db
44+
- POSTGRES_USER=owner
45+
- POSTGRES_PASSWORD=password
46+
- DB_NAME=main_db
47+
- SPRING_DATASOURCE_USERNAME=owner
48+
- SPRING_DATASOURCE_PASSWORD=password
49+
- DB_HOST=main-db
50+
- DB_PORT=6542
4051

52+
main-db:
53+
image: postgres:14-alpine
54+
container_name: "main-db"
55+
ports:
56+
- "6542:5432"
57+
volumes:
58+
- /var/lib/postgresql/main-service
59+
environment:
60+
- POSTGRES_DB=main_db
61+
- POSTGRES_USER=owner
62+
- POSTGRES_PASSWORD=password

main-service/pom.xml

+109-8
Original file line numberDiff line numberDiff line change
@@ -3,38 +3,139 @@
33
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
44
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
55
<modelVersion>4.0.0</modelVersion>
6+
67
<parent>
7-
<groupId>ru.practicum</groupId>
88
<artifactId>explore-with-me</artifactId>
9+
<groupId>ru.practicum</groupId>
910
<version>0.0.1-SNAPSHOT</version>
1011
</parent>
1112

12-
<artifactId>explore-with-me-service</artifactId>
13-
14-
<properties>
15-
<maven.compiler.source>21</maven.compiler.source>
16-
<maven.compiler.target>21</maven.compiler.target>
17-
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
18-
</properties>
13+
<name>main-service</name>
14+
<artifactId>main-service</artifactId>
1915

2016
<dependencies>
17+
<dependency>
18+
<groupId>ru.practicum</groupId>
19+
<artifactId>explore-with-me-stats-client</artifactId>
20+
<version>0.0.1-SNAPSHOT</version>
21+
</dependency>
22+
23+
<dependency>
24+
<groupId>org.springframework.boot</groupId>
25+
<artifactId>spring-boot-starter-web</artifactId>
26+
</dependency>
27+
28+
<dependency>
29+
<groupId>org.springframework.boot</groupId>
30+
<artifactId>spring-boot-starter-validation</artifactId>
31+
</dependency>
32+
2133
<dependency>
2234
<groupId>org.springframework.boot</groupId>
2335
<artifactId>spring-boot-starter-actuator</artifactId>
2436
</dependency>
2537

38+
<dependency>
39+
<groupId>org.springframework.boot</groupId>
40+
<artifactId>spring-boot-starter-data-jpa</artifactId>
41+
</dependency>
42+
43+
<dependency>
44+
<groupId>com.querydsl</groupId>
45+
<artifactId>querydsl-apt</artifactId>
46+
<version>${querydsl.version}</version>
47+
<scope>provided</scope>
48+
<classifier>jakarta</classifier>
49+
</dependency>
50+
<dependency>
51+
<groupId>com.querydsl</groupId>
52+
<artifactId>querydsl-jpa</artifactId>
53+
<version>${querydsl.version}</version>
54+
<classifier>jakarta</classifier>
55+
</dependency>
56+
57+
<dependency>
58+
<groupId>com.h2database</groupId>
59+
<artifactId>h2</artifactId>
60+
<scope>runtime</scope>
61+
</dependency>
62+
63+
<dependency>
64+
<groupId>org.postgresql</groupId>
65+
<artifactId>postgresql</artifactId>
66+
<scope>runtime</scope>
67+
</dependency>
68+
69+
<dependency>
70+
<groupId>org.springframework.boot</groupId>
71+
<artifactId>spring-boot-configuration-processor</artifactId>
72+
<optional>true</optional>
73+
</dependency>
74+
75+
<dependency>
76+
<groupId>org.projectlombok</groupId>
77+
<artifactId>lombok</artifactId>
78+
<scope>provided</scope>
79+
</dependency>
80+
81+
<dependency>
82+
<groupId>org.springframework.boot</groupId>
83+
<artifactId>spring-boot-starter-test</artifactId>
84+
<scope>test</scope>
85+
</dependency>
86+
2687
<dependency>
2788
<groupId>org.zalando</groupId>
2889
<artifactId>logbook-spring-boot-starter</artifactId>
2990
<version>3.9.0</version>
3091
</dependency>
3192
</dependencies>
93+
3294
<build>
3395
<plugins>
3496
<plugin>
3597
<groupId>org.springframework.boot</groupId>
3698
<artifactId>spring-boot-maven-plugin</artifactId>
99+
<configuration>
100+
<jvmArguments>-Dspring.application.admin.enabled=true -Djdk.httpclient.HttpClient.log=errors,requests</jvmArguments>
101+
</configuration>
102+
</plugin>
103+
104+
<!-- <plugin>-->
105+
<!-- <groupId>com.mysema.maven</groupId>-->
106+
<!-- <artifactId>apt-maven-plugin</artifactId>-->
107+
<!-- <executions>-->
108+
<!-- <execution>-->
109+
<!-- <goals>-->
110+
<!-- <goal>process</goal>-->
111+
<!-- </goals>-->
112+
<!-- <configuration>-->
113+
<!-- <outputDirectory>target/generated-sources/java</outputDirectory>-->
114+
<!-- <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>-->
115+
<!-- </configuration>-->
116+
<!-- </execution>-->
117+
<!-- </executions>-->
118+
<!-- </plugin>-->
119+
120+
<plugin>
121+
<groupId>org.codehaus.mojo</groupId>
122+
<artifactId>build-helper-maven-plugin</artifactId>
123+
<executions>
124+
<execution>
125+
<id>add-source</id>
126+
<phase>generate-sources</phase>
127+
<goals>
128+
<goal>add-source</goal>
129+
</goals>
130+
<configuration>
131+
<sources>
132+
<source>${project.build.directory}/generated-sources/java/</source>
133+
</sources>
134+
</configuration>
135+
</execution>
136+
</executions>
37137
</plugin>
38138
</plugins>
39139
</build>
140+
40141
</project>

0 commit comments

Comments
 (0)