Skip to content

Commit bd85943

Browse files
vsNaz1anmak
authored andcommitted
The assembly module has been completed, statistics have been corrected
1 parent cb31116 commit bd85943

16 files changed

Lines changed: 325 additions & 14 deletions

File tree

.github/copilot-instructions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
When performing a code review, respond in Russian.
1+
Комментарии в Pull Request обязательно должны быть на русском языке!

compose.yaml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ services:
1515
interval: 5s
1616
retries: 10
1717

18-
main-db:
18+
ewm-db:
1919
image: postgres:16.1
20-
container_name: main_db
20+
container_name: ewm_db
2121
ports:
2222
- "5433:5432"
2323
environment:
24-
- POSTGRES_DB=mainDB
24+
- POSTGRES_DB=ewmDB
2525
- POSTGRES_USER=dbuser
2626
- POSTGRES_PASSWORD=12345
2727
healthcheck:
@@ -42,14 +42,14 @@ services:
4242
- SPRING_DATASOURCE_USERNAME=dbuser
4343
- SPRING_DATASOURCE_PASSWORD=12345
4444

45-
main-service:
45+
ewm-service:
4646
build: ./main-service
47-
container_name: main_service
47+
container_name: ewm_service
4848
ports:
4949
- "8080:8080"
5050
depends_on:
51-
- main-db
51+
- ewm-db
5252
environment:
53-
- SPRING_DATASOURCE_URL=jdbc:postgresql://main-db:5432/mainDB
53+
- SPRING_DATASOURCE_URL=jdbc:postgresql://ewm-db:5432/ewmDB
5454
- SPRING_DATASOURCE_USERNAME=dbuser
5555
- SPRING_DATASOURCE_PASSWORD=12345
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,36 @@
11
package ru.practicum.compilation.controller;
22

3+
import jakarta.validation.Valid;
4+
import lombok.RequiredArgsConstructor;
5+
import org.springframework.http.HttpStatus;
6+
import org.springframework.web.bind.annotation.*;
7+
import ru.practicum.compilation.dto.CompilationDto;
8+
import ru.practicum.compilation.dto.NewCompilationDto;
9+
import ru.practicum.compilation.dto.UpdateCompilationRequest;
10+
import ru.practicum.compilation.service.CompilationService;
11+
12+
@RestController
13+
@RequestMapping("/admin/compilations")
14+
@RequiredArgsConstructor
315
public class AdminCompilationController {
16+
private final CompilationService compilationService;
17+
18+
@PostMapping
19+
@ResponseStatus(HttpStatus.CREATED)
20+
public CompilationDto createCompilation(@RequestBody @Valid NewCompilationDto request) {
21+
return compilationService.createCompilation(request);
22+
}
23+
24+
@DeleteMapping("/{compId}")
25+
@ResponseStatus(HttpStatus.NO_CONTENT)
26+
public void deleteCompilation(@PathVariable Long compId) {
27+
compilationService.deleteCompilation(compId);
28+
}
29+
30+
@PatchMapping("/{compId}")
31+
public CompilationDto updateCompilation(
32+
@PathVariable Long compId,
33+
@RequestBody @Valid UpdateCompilationRequest request) {
34+
return compilationService.updateCompilation(compId, request);
35+
}
436
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,33 @@
11
package ru.practicum.compilation.controller;
22

3+
import jakarta.validation.constraints.Positive;
4+
import jakarta.validation.constraints.PositiveOrZero;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.data.domain.PageRequest;
7+
import org.springframework.data.domain.Pageable;
8+
import org.springframework.web.bind.annotation.*;
9+
import ru.practicum.compilation.dto.CompilationDto;
10+
import ru.practicum.compilation.service.CompilationService;
11+
12+
import java.util.List;
13+
14+
@RestController
15+
@RequestMapping("/compilations")
16+
@RequiredArgsConstructor
317
public class PublicCompilationController {
18+
private final CompilationService compilationService;
19+
20+
@GetMapping
21+
public List<CompilationDto> getCompilations(
22+
@RequestParam(required = false) Boolean pinned,
23+
@RequestParam(defaultValue = "0") @PositiveOrZero Integer from,
24+
@RequestParam(defaultValue = "10") @Positive Integer size) {
25+
Pageable pageable = PageRequest.of(from / size, size);
26+
return compilationService.getCompilations(pinned, pageable);
27+
}
28+
29+
@GetMapping("/{compId}")
30+
public CompilationDto getCompilation(@PathVariable Long compId) {
31+
return compilationService.getCompilationById(compId);
32+
}
433
}

main-service/src/main/java/ru/practicum/compilation/dto/CompilationDto.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22

33
import ru.practicum.event.dto.EventShortDto;
44

5-
import java.util.List;
5+
import java.util.Set;
66

77
public record CompilationDto(
88
Long id,
9-
List<EventShortDto> events,
9+
10+
Set<EventShortDto> events,
11+
1012
boolean pinned,
13+
1114
String title
1215
) {
1316
}

main-service/src/main/java/ru/practicum/compilation/dto/UpdateCompilationRequest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package ru.practicum.compilation.dto;
22

3-
import jakarta.validation.constraints.NotBlank;
43
import jakarta.validation.constraints.Size;
54

65
import java.util.Set;
@@ -10,7 +9,6 @@ public record UpdateCompilationRequest(
109

1110
boolean pinned,
1211

13-
@NotBlank(message = "Заголовок подборки не может быть пустым")
1412
@Size(min = 1, max = 50, message = "Заголовок должен содержать от {min} до {max} символов")
1513
String title
1614
) {
Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,32 @@
11
package ru.practicum.compilation.mapper;
22

3-
public class CompilationMapper {
3+
import org.mapstruct.Mapper;
4+
import org.mapstruct.Mapping;
5+
import org.mapstruct.Named;
6+
import ru.practicum.compilation.dto.NewCompilationDto;
7+
import ru.practicum.compilation.dto.CompilationDto;
8+
import ru.practicum.compilation.model.Compilation;
9+
import ru.practicum.event.dto.EventShortDto;
10+
import ru.practicum.event.mapper.EventMapper;
11+
import ru.practicum.event.model.Event;
12+
13+
import java.util.Set;
14+
import java.util.stream.Collectors;
15+
16+
@Mapper(componentModel = "spring", uses = EventMapper.class)
17+
public interface CompilationMapper {
18+
@Mapping(target = "id", ignore = true)
19+
@Mapping(target = "events", ignore = true)
20+
Compilation toEntity(NewCompilationDto request);
21+
22+
@Mapping(target = "events", source = "events", qualifiedByName = "eventsToEventShortDos")
23+
CompilationDto toDto(Compilation compilation);
24+
25+
@Named("eventsToEventShortDos")
26+
default Set<EventShortDto> eventsToEventShortDos(Set<Event> events) {
27+
if (events == null) return null;
28+
return events.stream()
29+
.map(EventMapper.eventMapper::toEventShortWithoutRequestsAndViewsDto)
30+
.collect(Collectors.toSet());
31+
}
432
}

main-service/src/main/java/ru/practicum/compilation/model/Compilation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,4 @@ public class Compilation {
3232
inverseJoinColumns = @JoinColumn(name = "event_id")
3333
)
3434
private Set<Event> events;
35-
}
35+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,36 @@
11
package ru.practicum.compilation.repository;
22

3+
import io.micrometer.common.lang.NonNull;
4+
import org.springframework.data.domain.Page;
5+
import org.springframework.data.domain.Pageable;
36
import org.springframework.data.jpa.repository.JpaRepository;
7+
import org.springframework.data.jpa.repository.Query;
8+
import org.springframework.data.repository.query.Param;
49
import ru.practicum.compilation.model.Compilation;
510

11+
import java.util.List;
12+
import java.util.Optional;
13+
614
public interface CompilationRepository extends JpaRepository<Compilation, Long> {
15+
Page<Compilation> findByPinned(Boolean pinned, Pageable pageable);
16+
17+
@Query("""
18+
SELECT c FROM Compilation c
19+
LEFT JOIN FETCH c.events e
20+
LEFT JOIN FETCH e.category
21+
LEFT JOIN FETCH e.initiator
22+
WHERE c.id = :id""")
23+
Optional<Compilation> findByIdWithEvents(@Param("id") Long id);
24+
25+
boolean existsByTitle(String title);
26+
27+
boolean existsById(@NonNull Long compId);
28+
29+
@Query("""
30+
SELECT c FROM Compilation c
31+
LEFT JOIN FETCH c.events e
32+
LEFT JOIN FETCH e.category
33+
LEFT JOIN FETCH e.initiator
34+
WHERE c.id IN :ids""")
35+
List<Compilation> findAllByIdWithEvents(@Param("ids") List<Long> ids);
736
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,20 @@
11
package ru.practicum.compilation.service;
22

3+
import org.springframework.data.domain.Pageable;
4+
import ru.practicum.compilation.dto.CompilationDto;
5+
import ru.practicum.compilation.dto.NewCompilationDto;
6+
import ru.practicum.compilation.dto.UpdateCompilationRequest;
7+
8+
import java.util.List;
9+
310
public interface CompilationService {
11+
CompilationDto createCompilation(NewCompilationDto request);
12+
13+
void deleteCompilation(Long compId);
14+
15+
CompilationDto updateCompilation(Long compId, UpdateCompilationRequest request);
16+
17+
List<CompilationDto> getCompilations(Boolean pinned, Pageable pageable);
18+
19+
CompilationDto getCompilationById(Long compId);
420
}

0 commit comments

Comments
 (0)