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
9 changes: 5 additions & 4 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,17 @@ version: '3.1'

services:
stats-server:
build: stats/stats-server
build: ./stats/stats-server
container_name: stat-server
ports:
- "9090:9090"
depends_on:
- stats-db
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://stats-db:5432/ewm-stats
- SPRING_DATASOURCE_USERNAME=stat
- SPRING_DATASOURCE_PASSWORD=stat
depends_on:
- stats-db


stats-db:
image: postgres:16.1
Expand All @@ -24,7 +25,7 @@ services:
- POSTGRES_DB=ewm-stats

ewm-service:
build: main-service
build: ./main-service
ports:
- "8080:8080"
environment:
Expand Down
6 changes: 2 additions & 4 deletions main-service/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
FROM eclipse-temurin:21-jre-jammy
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /app.jar"]
COPY ./target/*.jar main-service.jar
ENTRYPOINT ["java","-jar","/main-service.jar"]
6 changes: 6 additions & 0 deletions main-service/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@
</properties>

<dependencies>
<dependency>
<groupId>ru.practicum</groupId>
<artifactId>stats-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.zalando</groupId>
<artifactId>logbook-spring-boot-starter</artifactId>
Expand Down
34 changes: 34 additions & 0 deletions main-service/src/main/java/ewm/DateFormatConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package ewm;

import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.time.format.DateTimeFormatter;

@Configuration
public class DateFormatConfig {

@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {

return builder -> {

// formatter
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

// deserializers
builder.deserializers(new LocalDateDeserializer(dateFormatter));
builder.deserializers(new LocalDateTimeDeserializer(dateTimeFormatter));

// serializers
builder.serializers(new LocalDateSerializer(dateFormatter));
builder.serializers(new LocalDateTimeSerializer(dateTimeFormatter));
};
}
}
2 changes: 2 additions & 0 deletions main-service/src/main/java/ewm/MainServiceApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

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

@ComponentScan(basePackages = {"ewm", "client"})
@SpringBootApplication
public class MainServiceApplication {
public static void main(String[] args) {
Expand Down
21 changes: 21 additions & 0 deletions main-service/src/main/java/ewm/categories/Category.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package ewm.categories;

import jakarta.persistence.*;
import lombok.*;

@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@Setter
@ToString
@Entity
@Table(name = "categories")
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@Column(nullable = false, unique = true)
private String name;
}
24 changes: 24 additions & 0 deletions main-service/src/main/java/ewm/categories/CategoryMapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package ewm.categories;

import ewm.categories.dto.CategoryCreateDto;
import ewm.categories.dto.CategoryDto;
import org.springframework.stereotype.Component;

@Component
public class CategoryMapper {

public Category categoryCreateDtoToModel(CategoryCreateDto dto) {
return Category.builder()
.name(dto.getName())
.build();
}

public CategoryDto modelToDto(Category category) {
return CategoryDto.builder()
.id(category.getId())
.name(category.getName())
.build();
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package ewm.categories;

import org.springframework.data.jpa.repository.JpaRepository;

public interface CategoryRepository extends JpaRepository<Category, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package ewm.categories.controller;

import ewm.categories.dto.CategoryCreateDto;
import ewm.categories.dto.CategoryDto;
import ewm.categories.service.CategoryService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

@Validated
@RestController
@RequiredArgsConstructor
@RequestMapping("/admin/categories")
public class CategoriesAdminController {
private final CategoryService service;

@PostMapping
@ResponseStatus(value = HttpStatus.CREATED)
public CategoryDto create(@RequestBody @Valid CategoryCreateDto createDto) {
return service.create(createDto);
}

@PatchMapping("/{catId}")
public CategoryDto update(@PathVariable Long catId,
@RequestBody @Valid CategoryCreateDto createDto) {
return service.update(catId, createDto);
}

@DeleteMapping("/{catId}")
@ResponseStatus(value = HttpStatus.NO_CONTENT)
public void deleteById(@PathVariable Long catId) {
service.deleteById(catId);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package ewm.categories.controller;

import ewm.categories.dto.CategoryDto;
import ewm.categories.service.CategoryService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Validated
@RestController
@RequiredArgsConstructor
@RequestMapping("/categories")
public class CategoriesPublicController {
private final CategoryService service;

@GetMapping
public List<CategoryDto> getCategories(
@RequestParam(value = "from", defaultValue = "0") Integer from,
@RequestParam(value = "size", defaultValue = "10") Integer size) {
return service.getCategories(from, size);
}

@GetMapping("/{catId}")
public CategoryDto getById(@PathVariable Long catId) {
return service.getById(catId);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package ewm.categories.dto;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;

@Data
public class CategoryCreateDto {
@NotNull
@NotBlank
@Size(min = 1, max = 50)
private String name;
}
15 changes: 15 additions & 0 deletions main-service/src/main/java/ewm/categories/dto/CategoryDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package ewm.categories.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
public class CategoryDto {
private long id;
private String name;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package ewm.categories.service;

import ewm.categories.Category;
import ewm.categories.dto.CategoryCreateDto;
import ewm.categories.dto.CategoryDto;

import java.util.List;

public interface CategoryService {
CategoryDto create(CategoryCreateDto createDto);

CategoryDto update(long categoryId, CategoryCreateDto createDto);

void deleteById(long categoryId);

List<CategoryDto> getCategories(Integer from, Integer size);

CategoryDto getById(long categoryId);

Category checkAndReturnCategory(long id);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package ewm.categories.service;

import ewm.categories.Category;
import ewm.categories.CategoryMapper;
import ewm.categories.CategoryRepository;
import ewm.categories.dto.CategoryCreateDto;
import ewm.categories.dto.CategoryDto;
import ewm.exception.NotFoundException;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Transactional
@Service
@RequiredArgsConstructor
public class CategoryServiceImpl implements CategoryService {
private final CategoryRepository repository;
private final CategoryMapper mapper;

@Override
public CategoryDto create(CategoryCreateDto createDto) {
Category category = mapper.categoryCreateDtoToModel(createDto);
return mapper.modelToDto(repository.save(category));
}

@Override
public CategoryDto update(long categoryId, CategoryCreateDto createDto) {
Category savedCategory = checkAndReturnCategory(categoryId);
savedCategory.setName(createDto.getName());
return mapper.modelToDto(repository.save(savedCategory));
}

@Override
public void deleteById(long categoryId) {
checkAndReturnCategory(categoryId);
repository.deleteById(categoryId);
}

@Override
@Transactional(readOnly = true)
public List<CategoryDto> getCategories(Integer from, Integer size) {
Pageable pageable = PageRequest.of(from / size, size);
return repository.findAll(pageable).map(mapper::modelToDto).toList();
}

@Override
@Transactional(readOnly = true)
public CategoryDto getById(long categoryId) {
Category category = checkAndReturnCategory(categoryId);
return mapper.modelToDto(category);
}

public Category checkAndReturnCategory(long id) {
return repository.findById(id).orElseThrow(() ->
new NotFoundException("Category with id=" + id + " was not found"));
}

}
39 changes: 39 additions & 0 deletions main-service/src/main/java/ewm/compilations/Compilation.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package ewm.compilations;

import ewm.events.Event;
import jakarta.persistence.*;
import lombok.*;

import java.util.Set;

@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@Setter
@ToString
@Entity
@Table(name = "compilations")
public class Compilation {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@Column(name = "title", nullable = false)
private String title;

@Column(name = "pinned", nullable = false)
private Boolean pinned;

@ManyToMany
@JoinTable(name = "compilation_event",
joinColumns = @JoinColumn(name = "compilation_id"),
inverseJoinColumns = @JoinColumn(name = "event_id"))
private Set<Event> events;

public Compilation(String title, Boolean pinned) {
this.title = title;
this.pinned = pinned;
}

}
Loading