diff --git a/docker-compose.yaml b/docker-compose.yaml
new file mode 100644
index 0000000..abe6570
--- /dev/null
+++ b/docker-compose.yaml
@@ -0,0 +1,39 @@
+services:
+ gateway:
+ build: gateway
+ image: shareit-gateway
+ container_name: shareit-gateway
+ ports:
+ - "8080:8080"
+ depends_on:
+ - server
+ environment:
+ - SHAREIT_SERVER_URL=http://server:9090
+
+ server:
+ build: server
+ image: shareit-server
+ container_name: shareit-server
+ ports:
+ - "9090:9090"
+ depends_on:
+ - db
+ environment:
+ - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/shareit
+ - SPRING_DATASOURCE_USERNAME=shareit
+ - SPRING_DATASOURCE_PASSWORD=shareit
+
+ db:
+ image: postgres:16.1
+ container_name: postgres
+ ports:
+ - "6541:5432"
+ environment:
+ - POSTGRES_PASSWORD=shareit
+ - POSTGRES_USER=shareit
+ - POSTGRES_DB=shareit
+ healthcheck:
+ test: pg_isready -q -d $$POSTGRES_DB -U $$POSTGRES_USER
+ timeout: 5s
+ interval: 5s
+ retries: 10
\ No newline at end of file
diff --git a/gateway/Dockerfile b/gateway/Dockerfile
new file mode 100644
index 0000000..308e738
--- /dev/null
+++ b/gateway/Dockerfile
@@ -0,0 +1,5 @@
+FROM amazoncorretto:21
+VOLUME /tmp
+ARG JAR_FILE=target/*.jar
+COPY ${JAR_FILE} app.jar
+ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /app.jar"]
\ No newline at end of file
diff --git a/gateway/pom.xml b/gateway/pom.xml
new file mode 100644
index 0000000..dacdef2
--- /dev/null
+++ b/gateway/pom.xml
@@ -0,0 +1,91 @@
+
+
+ 4.0.0
+
+ ru.practicum
+ shareit
+ 0.0.1-SNAPSHOT
+
+
+ gateway
+ 0.0.1-SNAPSHOT
+
+ ShareIt Gateway
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+ org.hibernate.validator
+ hibernate-validator
+
+
+
+ org.apache.httpcomponents.client5
+ httpclient5
+
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-checkstyle-plugin
+ ${maven-checkstyle-plugin.version}
+
+
+ true
+ true
+ true
+ checkstyle.xml
+
+
+
+
+
+ check
+
+ compile
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
\ No newline at end of file
diff --git a/gateway/src/main/java/ru/practicum/shareit/OnCreate.java b/gateway/src/main/java/ru/practicum/shareit/OnCreate.java
new file mode 100644
index 0000000..24698fd
--- /dev/null
+++ b/gateway/src/main/java/ru/practicum/shareit/OnCreate.java
@@ -0,0 +1,4 @@
+package ru.practicum.shareit;
+
+public interface OnCreate {
+}
diff --git a/gateway/src/main/java/ru/practicum/shareit/OnUpdate.java b/gateway/src/main/java/ru/practicum/shareit/OnUpdate.java
new file mode 100644
index 0000000..4d6a567
--- /dev/null
+++ b/gateway/src/main/java/ru/practicum/shareit/OnUpdate.java
@@ -0,0 +1,4 @@
+package ru.practicum.shareit;
+
+public interface OnUpdate {
+}
diff --git a/gateway/src/main/java/ru/practicum/shareit/ShareItGateway.java b/gateway/src/main/java/ru/practicum/shareit/ShareItGateway.java
new file mode 100644
index 0000000..41081fb
--- /dev/null
+++ b/gateway/src/main/java/ru/practicum/shareit/ShareItGateway.java
@@ -0,0 +1,12 @@
+package ru.practicum.shareit;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class ShareItGateway {
+
+ public static void main(String[] args) {
+ SpringApplication.run(ShareItGateway.class, args);
+ }
+}
\ No newline at end of file
diff --git a/gateway/src/main/java/ru/practicum/shareit/Util.java b/gateway/src/main/java/ru/practicum/shareit/Util.java
new file mode 100644
index 0000000..9c1a806
--- /dev/null
+++ b/gateway/src/main/java/ru/practicum/shareit/Util.java
@@ -0,0 +1,13 @@
+package ru.practicum.shareit;
+
+public class Util {
+ public static final String USER_ID_HEADER = "X-Sharer-User-Id";
+
+ public static final String EMPTY_PATH = "";
+
+ public static final String USERS_PATH = "/users";
+ public static final String ITEMS_PATH = "/items";
+ public static final String BOOKING_PATH = "/bookings";
+ public static final String REQUEST_PATH = "/requests";
+
+}
diff --git a/gateway/src/main/java/ru/practicum/shareit/client/BaseClient.java b/gateway/src/main/java/ru/practicum/shareit/client/BaseClient.java
new file mode 100644
index 0000000..3a3680d
--- /dev/null
+++ b/gateway/src/main/java/ru/practicum/shareit/client/BaseClient.java
@@ -0,0 +1,141 @@
+package ru.practicum.shareit.client;
+
+import jakarta.annotation.PostConstruct;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.web.client.RestTemplateBuilder;
+import org.springframework.http.*;
+import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
+import org.springframework.lang.Nullable;
+import org.springframework.web.client.HttpStatusCodeException;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.util.DefaultUriBuilderFactory;
+
+import java.util.List;
+import java.util.Map;
+
+public class BaseClient {
+
+ @Value("${shareit-server.url}")
+ private String serverUrl;
+
+ private final String prefix;
+
+ protected RestTemplate rest;
+
+ @PostConstruct
+ public void init() {
+ RestTemplateBuilder builder = new RestTemplateBuilder();
+
+ this.rest = builder.uriTemplateHandler(new DefaultUriBuilderFactory(serverUrl + prefix))
+ .requestFactory(() -> new HttpComponentsClientHttpRequestFactory())
+ .build();
+ }
+
+ public BaseClient(String prefix) {
+ this.prefix = prefix;
+ }
+
+ protected ResponseEntity