Skip to content
Merged
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
14,630 changes: 14,630 additions & 0 deletions .postman/ewm-main-service.json

Large diffs are not rendered by default.

1,027 changes: 1,027 additions & 0 deletions .postman/ewm-stat-service.json

Large diffs are not rendered by default.

1,057 changes: 1,057 additions & 0 deletions .postman/feature.json

Large diffs are not rendered by default.

131 changes: 131 additions & 0 deletions core/main-service/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>ru.practicum</groupId>
<artifactId>core</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>

<artifactId>main-service</artifactId>
<packaging>jar</packaging>

<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>ru.practicum</groupId>
<artifactId>stat-dto</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ru.practicum</groupId>
<artifactId>stat-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<!-- <scope>provided</scope>-->
<!-- <optional>true</optional>-->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.zalando</groupId>
<artifactId>logbook-spring-boot-starter</artifactId>
<version>4.0.3</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.hypersistence</groupId>
<artifactId>hypersistence-utils-hibernate-63</artifactId>
<version>3.15.2</version>
<scope>compile</scope>
</dependency>

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-Duser.language=ru -Duser.country=RU</argLine>
</configuration>
</plugin>
</plugins>
</build>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package ru.practicum.ewm;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(value = {"ru.practicum.ewm", "ru.practicum.stat.client"})
public class MainServiceApp {
public static void main(String[] args) {
SpringApplication.run(MainServiceApp.class, args);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package ru.practicum.ewm.controller.admin;

import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import ru.practicum.ewm.dto.category.CategoryDto;
import ru.practicum.ewm.dto.category.NewCategoryDto;
import ru.practicum.ewm.service.category.CategoryService;

@RestController
@RequestMapping(path = "/admin/categories")
@RequiredArgsConstructor
public class AdminCategoryController {

private final CategoryService categoryService;

/**
* Добавление новой категории. Обратите внимание: имя категории должно быть уникальным
*
* @param newCategoryDto данные добавляемой категории
* @return CategoryDto
*/
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public CategoryDto addNewCategory(@RequestBody @Valid NewCategoryDto newCategoryDto) {
return categoryService.adminAddNewCategory(newCategoryDto);
}

/**
* Изменение категории
* <p>
* Обратите внимание: имя категории должно быть уникальным
*
* @param catId id категории
* @param categoryDto Данные категории для изменения
* @return CategoryDto
*/
@PatchMapping("/{catId}")
public CategoryDto updateCategory(@PathVariable Long catId,
@RequestBody @Valid CategoryDto categoryDto) {
return categoryService.updateCategory(catId, categoryDto);
}

/**
* Удаление категории
* <p>
* Обратите внимание: с категорией не должно быть связано ни одного события.
*
* @param catId id категории
*/
@DeleteMapping("/{catId}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deleteCategory(@PathVariable Long catId) {
categoryService.deleteCategory(catId);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package ru.practicum.ewm.controller.admin;

import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import ru.practicum.ewm.dto.compilation.CompilationDto;
import ru.practicum.ewm.dto.compilation.CompilationUpdateDto;
import ru.practicum.ewm.dto.compilation.NewCompilationDto;
import ru.practicum.ewm.service.compilation.CompilationService;

@RestController
@RequestMapping(path = "/admin/compilations")
@RequiredArgsConstructor
public class AdminCompilationController {

private final CompilationService compilationService;

/**
* Добавление новой подборки (подборка может не содержать событий)
*
* @param newCompilationDto данные новой подборки
* @return {@link CompilationDto}
*/
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public CompilationDto createCompilation(@RequestBody @Valid NewCompilationDto newCompilationDto) {
return compilationService.addCompilation(newCompilationDto);
}

/**
*
* @param compilationUpdateDto данные для обновления подборки
* @param compId id подборки
* @return {@link CompilationDto}
*/
@PatchMapping("/{compId}")
public CompilationDto updateCompilation(@RequestBody @Valid CompilationUpdateDto compilationUpdateDto,
@PathVariable Long compId) {
return compilationService.updateCompilation(compId, compilationUpdateDto);
}

/**
* Удаление подборки
*
* @param compId id подборки
*/
@DeleteMapping("/{compId}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void delById(@PathVariable Long compId) {
compilationService.delById(compId);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package ru.practicum.ewm.controller.admin;

import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import ru.practicum.ewm.dto.event.AdminGetDto;
import ru.practicum.ewm.dto.event.EventFullDto;
import ru.practicum.ewm.dto.event.UpdateEventAdminRequest;
import ru.practicum.ewm.model.enums.EventState;
import ru.practicum.ewm.service.event.EventService;

import java.time.LocalDateTime;
import java.util.List;

@RestController
@RequestMapping(path = "/admin/events")
@RequiredArgsConstructor
public class AdminEventController {

private final EventService eventService;

/**
* Поиск событий
* <p>
* Эндпоинт возвращает полную информацию обо всех событиях подходящих под переданные условия
* В случае, если по заданным фильтрам не найдено ни одного события, возвращает пустой список
*
* @param users список id пользователей, чьи события нужно найти
* @param states список состояний в которых находятся искомые события
* @param categories список id категорий в которых будет вестись поиск
* @param rangeStart дата и время не раньше которых должно произойти событие
* @param rangeEnd дата и время не позже которых должно произойти событие
* @param from количество событий, которые нужно пропустить для формирования текущего набора
* Default value : 0
* @param size количество событий в наборе
* Default value : 10
* @return List<{@link EventFullDto}>
*/
@GetMapping
public List<EventFullDto> adminGetEvents(
@RequestParam(required = false) List<Integer> users,
@RequestParam(required = false) List<EventState> states,
@RequestParam(required = false) List<Integer> categories,
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime rangeStart,
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime rangeEnd,
@RequestParam(required = false, defaultValue = "0") Integer from,
@RequestParam(required = false, defaultValue = "10") Integer size) {

AdminGetDto getDto = AdminGetDto.builder()
.users(users)
.states(states)
.categories(categories)
.rangeStart(rangeStart)
.rangeEnd(rangeEnd)
.from(from)
.size(size)
.build();

return eventService.adminGetEvents(getDto);
}

/**
* Редактирование данных события и его статуса (отклонение/публикация)
* <p>
* Редактирование данных любого события администратором. Валидация данных не требуется. Обратите внимание:
* - дата начала изменяемого события должна быть не ранее чем за час от даты публикации. (Ожидается код ошибки 409)
* - событие можно публиковать, только если оно в состоянии ожидания публикации (Ожидается код ошибки 409)
* - событие можно отклонить, только если оно еще не опубликовано (Ожидается код ошибки 409)
*
* @param eventId id события
* @param request Данные HTTP-запроса
* @return {@link EventFullDto}
*/
@PatchMapping("/{eventId}")
public EventFullDto adminUpdateEvent(
@PathVariable Long eventId,
@RequestBody @Valid UpdateEventAdminRequest request) {

return eventService.adminUpdateEvent(eventId, request);
}
}
Loading
Loading