Skip to content

Commit a4ba82b

Browse files
authored
Merge pull request #2 from Yasnodoom/main_svc
Main svc
2 parents 7d51e6f + 68dfa67 commit a4ba82b

File tree

81 files changed

+2472
-73
lines changed

Some content is hidden

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

81 files changed

+2472
-73
lines changed

docker-compose.yml

+32-12
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,64 @@
11
services:
22
stats-server:
33
build: ./statistic/server
4-
image: statistic-server
54
container_name: statistic-server
65
ports:
76
- "9090:9090"
87
depends_on:
98
- stats-db
109
environment:
11-
- SPRING_DATASOURCE_URL=jdbc:postgresql://stats-db:5432/statistic
10+
- SPRING_DATASOURCE_URL=jdbc:postgresql://stats-db:5431/statistic
1211
- SPRING_DATASOURCE_USERNAME=dbuser
1312
- SPRING_DATASOURCE_PASSWORD=12345
1413

1514
stats-db:
1615
image: postgres:16.1
1716
container_name: postgres-stats-db
17+
expose:
18+
- "5431"
1819
ports:
19-
- "5432:5432"
20-
volumes:
21-
- ./volumes/postgres:/var/lib/postgresql/data/
20+
- "5431:5431"
2221
environment:
2322
- POSTGRES_DB=statistic
2423
- POSTGRES_USER=dbuser
2524
- POSTGRES_PASSWORD=12345
25+
- PGPORT=5431
26+
healthcheck:
27+
test: pg_isready -q -d $$POSTGRES_DB -U $$POSTGRES_USER
28+
timeout: 5s
29+
interval: 5s
30+
retries: 10
31+
32+
ewm-db:
33+
image: postgres:16.1
34+
container_name: postgres-explore-db
35+
expose:
36+
- "5432"
37+
ports:
38+
- "5432:5432"
39+
depends_on:
40+
- stats-server
41+
environment:
42+
- POSTGRES_DB=explore
43+
- POSTGRES_USER=dbuser
44+
- POSTGRES_PASSWORD=12345
2645
healthcheck:
2746
test: pg_isready -q -d $$POSTGRES_DB -U $$POSTGRES_USER
2847
timeout: 5s
2948
interval: 5s
3049
retries: 10
3150

3251
ewm-service:
33-
build: ./statistic/client
34-
image: statistic-client
35-
container_name: statistic-client
52+
build: ./explore
53+
image: explore
54+
container_name: explore
3655
ports:
3756
- "8080:8080"
3857
depends_on:
39-
- stats-server
58+
ewm-db:
59+
condition: service_healthy
4060
environment:
4161
- STATISTIC_SERVER_URL=http://stats-server:9090
42-
43-
# ewm-db:
44-
# image: postgres:16.1
62+
- SPRING_DATASOURCE_URL=jdbc:postgresql://ewm-db:5432/explore
63+
- SPRING_DATASOURCE_USERNAME=dbuser
64+
- SPRING_DATASOURCE_PASSWORD=12345

explore/Dockerfile

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
FROM amazoncorretto:21-alpine as builder
2+
WORKDIR application
3+
COPY target/*.jar app.jar
4+
RUN java -Djarmode=layertools -jar app.jar extract
5+
6+
FROM amazoncorretto:21-alpine
7+
COPY --from=builder /application/dependencies/ ./
8+
COPY --from=builder /application/spring-boot-loader/ ./
9+
COPY --from=builder /application/snapshot-dependencies/ ./
10+
COPY --from=builder /application/application ./
11+
ENTRYPOINT ["java", "org.springframework.boot.loader.launch.JarLauncher"]

explore/pom.xml

+36
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,50 @@
2222
<groupId>org.springframework.boot</groupId>
2323
<artifactId>spring-boot-starter-actuator</artifactId>
2424
</dependency>
25+
<dependency>
26+
<groupId>org.springframework.boot</groupId>
27+
<artifactId>spring-boot-starter-validation</artifactId>
28+
</dependency>
29+
<dependency>
30+
<groupId>org.springframework.boot</groupId>
31+
<artifactId>spring-boot-starter-data-jpa</artifactId>
32+
</dependency>
2533
<dependency>
2634
<groupId>ru.practicum</groupId>
2735
<artifactId>dto</artifactId>
2836
<version>${project.version}</version>
2937
</dependency>
38+
<dependency>
39+
<groupId>org.postgresql</groupId>
40+
<artifactId>postgresql</artifactId>
41+
<scope>runtime</scope>
42+
</dependency>
43+
<dependency>
44+
<groupId>org.apache.httpcomponents.client5</groupId>
45+
<artifactId>httpclient5</artifactId>
46+
</dependency>
47+
<dependency>
48+
<groupId>com.google.code.gson</groupId>
49+
<artifactId>gson</artifactId>
50+
<version>2.11.0</version>
51+
</dependency>
3052
</dependencies>
3153

3254
<build>
55+
<plugins>
56+
<plugin>
57+
<groupId>org.springframework.boot</groupId>
58+
<artifactId>spring-boot-maven-plugin</artifactId>
59+
<configuration>
60+
<excludes>
61+
<exclude>
62+
<groupId>org.projectlombok</groupId>
63+
<artifactId>lombok</artifactId>
64+
</exclude>
65+
</excludes>
66+
</configuration>
67+
</plugin>
68+
</plugins>
3369
</build>
3470

3571
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package ru.practicum.explore;
2+
3+
import org.springframework.boot.SpringApplication;
4+
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
6+
@SpringBootApplication
7+
public class ExploreWithMeApp {
8+
public static void main(String[] args) {
9+
SpringApplication.run(ExploreWithMeApp.class, args);
10+
}
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package ru.practicum.explore.api.admin.controller;
2+
3+
import jakarta.transaction.Transactional;
4+
import jakarta.validation.Valid;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.web.bind.annotation.*;
7+
import ru.practicum.dto.category.Category;
8+
import ru.practicum.explore.api.admin.service.AdminCategoryService;
9+
10+
import static org.springframework.http.HttpStatus.CREATED;
11+
import static org.springframework.http.HttpStatus.NO_CONTENT;
12+
13+
@RestController
14+
@RequiredArgsConstructor
15+
@RequestMapping("/admin/categories")
16+
public class AdminCategoryController {
17+
private final AdminCategoryService service;
18+
19+
@PostMapping
20+
@ResponseStatus(CREATED)
21+
public Category create(@Valid @RequestBody final Category data) {
22+
return service.save(data);
23+
}
24+
25+
@ResponseStatus(NO_CONTENT)
26+
@DeleteMapping("/{catId}")
27+
public void delete(@PathVariable long catId) {
28+
service.delete(catId);
29+
}
30+
31+
@PatchMapping("/{catId}")
32+
@Transactional
33+
public Category patch(@PathVariable long catId, @Valid @RequestBody final Category data) {
34+
return service.patch(catId, data);
35+
}
36+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package ru.practicum.explore.api.admin.controller;
2+
3+
import jakarta.validation.Valid;
4+
import lombok.RequiredArgsConstructor;
5+
import org.springframework.web.bind.annotation.*;
6+
import ru.practicum.dto.compilation.CompilationDto;
7+
import ru.practicum.dto.compilation.NewCompilationDto;
8+
import ru.practicum.dto.compilation.UpdateCompilationRequest;
9+
import ru.practicum.explore.api.admin.service.AdminCompilationService;
10+
11+
import static org.springframework.http.HttpStatus.CREATED;
12+
import static org.springframework.http.HttpStatus.NO_CONTENT;
13+
14+
@RestController
15+
@RequiredArgsConstructor
16+
@RequestMapping("/admin/compilations")
17+
public class AdminCompilationController {
18+
private final AdminCompilationService adminCompilationService;
19+
20+
@PatchMapping("/{compId}")
21+
public CompilationDto update(@PathVariable long compId,
22+
@Valid @RequestBody final UpdateCompilationRequest data) {
23+
return adminCompilationService.update(compId, data);
24+
}
25+
26+
@PostMapping
27+
@ResponseStatus(CREATED)
28+
public CompilationDto create(@Valid @RequestBody final NewCompilationDto data) {
29+
return adminCompilationService.create(data);
30+
}
31+
32+
@ResponseStatus(NO_CONTENT)
33+
@DeleteMapping("/{compId}")
34+
public void delete(@PathVariable long compId) {
35+
adminCompilationService.delete(compId);
36+
}
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package ru.practicum.explore.api.admin.controller;
2+
3+
import jakarta.servlet.http.HttpServletRequest;
4+
import jakarta.transaction.Transactional;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.format.annotation.DateTimeFormat;
7+
import org.springframework.web.bind.annotation.*;
8+
import ru.practicum.dto.event.EventFullDto;
9+
import ru.practicum.dto.event.UpdateEventAdminRequest;
10+
import ru.practicum.explore.api.admin.service.AdminEventService;
11+
12+
import java.time.LocalDateTime;
13+
import java.util.List;
14+
15+
@RestController
16+
@RequiredArgsConstructor
17+
@RequestMapping("/admin/events")
18+
public class AdminEventController {
19+
private final AdminEventService service;
20+
21+
@Transactional
22+
@GetMapping
23+
public List<EventFullDto> findAll(HttpServletRequest request,
24+
@RequestParam(required = false) List<Long> users,
25+
@RequestParam(required = false) List<String> states,
26+
@RequestParam(required = false) List<Long> categories,
27+
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
28+
LocalDateTime rangeStart,
29+
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
30+
LocalDateTime rangeEnd,
31+
@RequestParam(defaultValue = "0") Integer from,
32+
@RequestParam(defaultValue = "10") Integer size) {
33+
return service.findAll(request, users, states, categories, rangeStart, rangeEnd, from, size);
34+
}
35+
36+
@PatchMapping("/{eventId}")
37+
public EventFullDto patch(@PathVariable long eventId,
38+
@RequestBody final UpdateEventAdminRequest data) {
39+
return service.updateEvent(eventId, data);
40+
}
41+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package ru.practicum.explore.api.admin.controller;
2+
3+
import jakarta.validation.Valid;
4+
import lombok.RequiredArgsConstructor;
5+
import org.springframework.web.bind.annotation.*;
6+
import ru.practicum.dto.user.User;
7+
import ru.practicum.explore.api.admin.service.AdminUserService;
8+
9+
import java.util.List;
10+
11+
import static org.springframework.http.HttpStatus.CREATED;
12+
import static org.springframework.http.HttpStatus.NO_CONTENT;
13+
14+
@RestController
15+
@RequiredArgsConstructor
16+
@RequestMapping("/admin/users")
17+
public class AdminUserController {
18+
private final AdminUserService adminUserService;
19+
20+
@GetMapping
21+
public List<User> get(@RequestParam(required = false) List<Long> ids,
22+
@RequestParam(defaultValue = "0") Integer from,
23+
@RequestParam(defaultValue = "10") Integer size) {
24+
return adminUserService.getAll(ids, from, size);
25+
}
26+
27+
@PostMapping
28+
@ResponseStatus(CREATED)
29+
public User create(@Valid @RequestBody final User user) {
30+
return adminUserService.save(user);
31+
}
32+
33+
@ResponseStatus(NO_CONTENT)
34+
@DeleteMapping("/{userId}")
35+
public void delete(@PathVariable long userId) {
36+
adminUserService.delete(userId);
37+
}
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package ru.practicum.explore.api.admin.service;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import org.springframework.stereotype.Service;
5+
import ru.practicum.dto.category.Category;
6+
import ru.practicum.explore.exception.NotFoundException;
7+
import ru.practicum.explore.storage.CategoryRepository;
8+
9+
@Service
10+
@RequiredArgsConstructor
11+
public class AdminCategoryService {
12+
private final CategoryRepository repository;
13+
14+
public Category save(Category data) {
15+
return repository.save(data);
16+
}
17+
18+
public void delete(long id) {
19+
repository.deleteById(id);
20+
}
21+
22+
public Category patch(long id, Category data) {
23+
Category category = findById(id);
24+
category.setName(data.getName());
25+
26+
return repository.save(category);
27+
}
28+
29+
public Category findById(long id) {
30+
return repository
31+
.findById(id)
32+
.orElseThrow(() -> new NotFoundException(id));
33+
}
34+
}

0 commit comments

Comments
 (0)