GithubHelp home page GithubHelp logo

cptntotoro / java-explore-with-me Goto Github PK

View Code? Open in Web Editor NEW
10.0 1.0 0.0 332 KB

Микросервисное приложение-афиша мероприятий (Java, Spring (Boot, Data, Security, MVC), PostgreSQL, REST API, Docker, Mockito, JUnit, Postman, MapStruct, Lombok, Thymeleaf, JavaScript, CSS, HTML)

Dockerfile 0.07% Java 80.50% CSS 6.49% HTML 12.62% JavaScript 0.32%
docker java junit lombok mapstruct mockito postgresql rest-api spring-boot spring-jpa

java-explore-with-me's Introduction

Explore with me - микросервисное приложение-афиша мероприятий

Java, Spring (Boot, Data, Security, MVC), PostgreSQL, REST API, Docker, Mockito, JUnit, Postman, MapStruct, Lombok, Thymeleaf, JavaScript, CSS, HTML

О проекте

Приложение для размещения мероприятий и поиска компаний для участия в них

Приложение содержит два микросервиса:

  • main-service для бизнес-логики
  • stats-service для сбора статистики просмотра событий по ip, который состоит из трех модулей

У каждого микросервиса есть своя база данных.
Микросервисы и базы данных запускаются в собственных Docker контейнерах (4 шт).

Основная функциональность:

Неавторизованные пользователи

  • просматривать все события, в том числе по категориям
  • видеть детали отдельных событий
  • видеть закрепленные подборки событий

Авторизованные пользователи

  • добавление в приложение новые мероприятия, редактировать их и просматривать после добавления
  • подача заявок на участие в интересующих мероприятиях
  • создатель мероприятия может подтверждать заявки, которые отправили другие пользователи сервиса

Администраторы

  • добавление, изменение и удаление категорий для событий
  • добавление, удаление и закрепление на главной странице подборки мероприятий
  • модерация событий, размещённых пользователями, — публикация или отклонение
  • управление пользователями — добавление, активация, просмотр и удаление

Эндпоинты

main-service

  • POST /users/{userId}/events - добавить новое событие
  • GET /users/{userId}/events/{eventId} - получить событие
  • PATCH /users/{userId}/events/{eventId} - изменить событие
  • GET /users/{userId}/events - получить события пользователя
  • GET /users/{userId}/events/{eventId}/requests - получить запросы пользователя на участие в событии
  • PATCH /users/{userId}/events/{eventId}/requests - изменить статус (подтверждение, отмена) заявок на участие пользователя в событии

  • GET /categories - получить все категории
  • GET /categories/{catId} - получить категорию

  • GET /compilations - получить все подборки событий
  • GET /compilations/{compId} - получить подборку событий

  • GET /admin/events - получить события по любым параметрам:
    • users - список id пользователей
    • states - список статусов события (PENDING, PUBLISHED, CANCELED)
    • categories - список id категорий событий
    • rangeStart - начало временного отрезка в формате yyyy-MM-dd HH:mm:ss
    • rangeEnd - конец временного отрезка в формате yyyy-MM-dd HH:mm:ss
    • from - параметр для пагинации
    • size - параметр для пагинации
  • PATCH /admin/events/{eventId} - изменить событие

  • GET /events - получить события по любым параметрам:
    • text - текст для поиска в названии и описании событий
    • categories - список id категорий событий
    • paid - только платные события (true/false)
    • rangeStart - начало временного отрезка в формате yyyy-MM-dd HH:mm:ss
    • rangeEnd - конец временного отрезка в формате yyyy-MM-dd HH:mm:ss
    • onlyAvailable - только доступные события, т.е. у которых еще не исчерпан лимит участников (true/false)
    • sort - способ сортировки событий (EVENT_DATE, VIEWS)
    • from - параметр для пагинации
    • size - параметр для пагинации
  • GET /events/{id} - получить событие

  • POST /users/{userId}/requests - добавить запрос на участие в событии
  • GET /users/{userId}/requests - получить запросы пользователя на участие в событиях
  • DELETE /users/{userId}/requests/{requestId}/cancel - отменить запрос на участие в событии

  • POST /users/{userId}/events/{eventId}/comments - добавить комментарий к событию
  • PATCH /users/{userId}/events/{eventId}/comments/{commentId} - обновить комментарий
  • GET /users/{userId}/events/{eventId}/comments/{commentId} - получить комментарий к событию
  • DELETE /users/{userId}/events/{eventId}/comments/{commentId} - удалить комментарий к событию
  • GET /users/{userId}/events/{eventId}/comments - получить список комментариев пользователя к событию
  • GET /users/{userId}/comments - получить все комментарии пользователя

  • POST /admin/users - добавить пользователя
  • GET /admin/users - получить всех пользователей
  • DELETE /admin/users/{userId} - удалить пользователя
  • POST /admin/compilations - добавить подборку событий
  • DELETE /admin/compilations/{compId} - удалить подборку событий
  • PATCH /admin/compilations/{compId} - обновить подборку событий
  • POST /admin/categories - добавить новую категорию
  • GET /admin/categories/{catId} - получить категорию событий
  • DELETE /admin/categories/{catId} - удалить категорию
  • GET /admin/comments - получить комментрии по любым параметрам:
    • text - текст для поиска в содержании комментария
    • users - список id пользователей
    • events - список id событий
    • statuses - статусы событий (PENDING, PUBLISHED, DELETED)
    • rangeStart - начало временного отрезка в формате yyyy-MM-dd HH:mm:ss
    • rangeEnd - конец временного отрезка в формате yyyy-MM-dd HH:mm:ss
    • from - параметр для пагинации
    • size - параметр для пагинации
    • PATCH /admin/comments - изменить статусы комментариев

stats-service

  • GET /stats - Получение статистики по посещениям
  • POST /hit - Сохранение информации о том, что на uri конкретного сервиса был отправлен запрос пользователем

Как использовать:

Ознакомиться с примерами использования можно в этой коллекции тестов Postman

java-explore-with-me's People

Contributors

cptntotoro avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

java-explore-with-me's Issues

refactor: corrects operationIds in ewm service specs

Prerequisite: It is highly recommended to merge yandex-praktikum/java-explore-with-me#22 changes, since generation via swagger-codegen-maven-plugin does not work correctly for original ewm-main-service-spec.json file.

In case of code generation via swagger-codegen-maven-plugin there are several problems with operationIds provided in ewm-main-service-spec.json file (see demo pom.xml in terekhovmv/java-explore-with-me-fixes@da018e0).

  1. Some of operationIds contain numeric suffixes, and this suffixes appear in methods of generated *Api interfaces (getEvents_2, getEvent_1). Solution: remove suffixes at least.
  2. There is no consistency in naming (delete / deleteCompilation, registerUser / addEvent / saveCompilation). Solution: provide consistent naming.
  3. Since *Api interfaces are generated for top level endpoint components (/users/* => UsersApi) there are problems with identifying endpoint methods for different roles (e.g. cancelRequest and changeRequestStatus in the UsersApi interface). Solution: put the role as prefix in operationIds.
  4. Since operationIds must be unique among all operations described in your API (see https://swagger.io/docs/specification/paths-and-operations/), we should provide enough global descriptive names (delete or getEvent_1 does not work).

Tabular view of changes proposed in this PR:

Method Original operationId Recommended operationId
PUBLIC
GET /categories getCategories getCategories (no changes)
GET /categories/{catId} getCategory getCategory (no changes)
GET /compilations getCompilations getCompilations (no changes)
GET /compilations/{compId} getCompilation getCompilation (no changes)
GET /events getEvents_1 findEvents
GET /events/{id} getEvent_1 getEvent
ADMIN
GET /admin/users getUsers adminGetUsers
POST /admin/users registerUser adminAddUser
DELETE /admin/users/{userId} delete adminRemoveUser
POST /admin/categories addCategory adminAddCategory
DELETE /admin/categories/{catId} deleteCategory adminRemoveCategory
PATCH /admin/categories/{catId} updateCategory adminUpdateCategory
GET /admin/events getEvents_2 adminFindEvents
PATCH /admin/events/{eventId} updateEvent_1 adminUpdateEvent
POST /admin/compilations saveCompilation adminAddCompilation
DELETE /admin/compilations/{compId} deleteCompilation adminRemoveCompilation
PATCH /admin/compilations/{compId} updateCompilation adminUpdateCompilation
INITIATOR
GET /users/{userId}/events getEvents initiatorGetEvents
GET /users/{userId}/events/{eventId} getEvents initiatorGetEvent
POST /users/{userId}/events addEvent initiatorAddEvent
PATCH /users/{userId}/events/{eventId} updateEvent initiatorUpdateEvent
GET /users/{userId}/events/{eventId}/requests getEventParticipants initiatorGetEventRequests
PATCH /users/{userId}/events/{eventId}/requests changeRequestStatus initiatorChangeRequestStatus
PARTICIPANT
GET /users/{userId}/requests getUserRequests participantGetRequests
POST /users/{userId}/requests addParticipationRequest participantAddRequest
PATCH /users/{userId}/requests/{requestId}/cancel cancelRequest participantCancelRequest

fix: incorrect code generation by swagger-codegen-maven-plugin

In case of code generation via swagger-codegen-maven-plugin there are problems with escaping some quote symbols in the sources generated. This causes compilation errors.
The following plugin settings are used for repro:

    <build>
        <plugins>
            <plugin>
                <groupId>io.swagger.codegen.v3</groupId>
                <artifactId>swagger-codegen-maven-plugin</artifactId>
                <version>3.0.41</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${project.basedir}/../ewm-main-service-spec.json</inputSpec>
                            <language>spring</language>
                            <library>spring-boot</library>
                            <apiPackage>${apiPackage}</apiPackage>
                            <modelPackage>${modelPackage}</modelPackage>
                            <configOptions>
                                <sourceFolder>src/main/java/</sourceFolder>
                                <dateLibrary>java8</dateLibrary>
                                <interfaceOnly>true</interfaceOnly>
                                <useBeanValidation>true</useBeanValidation>
                                <performBeanValidation>true</performBeanValidation>
                            </configOptions>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

See the whole demo pom.xml in terekhovmv/java-explore-with-me-fixes@da018e0 .

This issue is not reproduced for specs of stats service.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.