diff --git a/api/src/main/java/ru/ct/belfort/OperationDTO.java b/api/src/main/java/ru/ct/belfort/OperationDTO.java new file mode 100644 index 0000000..c3e71b8 --- /dev/null +++ b/api/src/main/java/ru/ct/belfort/OperationDTO.java @@ -0,0 +1,4 @@ +package ru.ct.belfort; + +public record OperationDTO(String id, MoneyValueDTO payment, MoneyValueDTO price, String figi, Advice operationType) { +} diff --git a/docker-compose.yaml b/docker-compose.yaml index 30f4e84..5c6e150 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -30,3 +30,12 @@ services: POSTGRES_DB: trading_bot POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres + + postgres_user: + image: postgres + ports: + - "5431:5432" + environment: + POSTGRES_DB: user_service + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres diff --git a/user-service/build.gradle b/user-service/build.gradle index 6173de9..9067fbd 100644 --- a/user-service/build.gradle +++ b/user-service/build.gradle @@ -7,6 +7,12 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.slf4j:slf4j-api' implementation 'org.slf4j:slf4j-simple' + implementation 'org.postgresql:postgresql' + implementation 'org.liquibase:liquibase-core' + implementation 'org.springframework:spring-jdbc' + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + implementation(project(":api")) } diff --git a/user-service/src/main/java/ru/ct/belfort/db/LiquibaseConfig.java b/user-service/src/main/java/ru/ct/belfort/db/LiquibaseConfig.java new file mode 100644 index 0000000..b5e6bb8 --- /dev/null +++ b/user-service/src/main/java/ru/ct/belfort/db/LiquibaseConfig.java @@ -0,0 +1,41 @@ +package ru.ct.belfort.db; + +import liquibase.integration.spring.SpringLiquibase; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.core.env.Environment; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; +import java.util.Objects; + +@Configuration +@PropertySource("classpath:database.properties") +public class LiquibaseConfig { + final Environment env; + + LiquibaseConfig(Environment env) { + this.env = env; + } + + @Bean + public DataSource dataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + + dataSource.setDriverClassName(Objects.requireNonNull(env.getProperty("spring.datasource.drivername"))); + dataSource.setUrl(env.getProperty("spring.datasource.url")); + dataSource.setUsername(env.getProperty("spring.datasource.username")); + dataSource.setPassword(env.getProperty("spring.datasource.password")); + + return dataSource; + } + + @Bean + public SpringLiquibase liquibase() { + SpringLiquibase liquibase = new SpringLiquibase(); + liquibase.setChangeLog("classpath:db/migration/master.xml"); + liquibase.setDataSource(dataSource()); + return liquibase; + } +} diff --git a/user-service/src/main/java/ru/ct/belfort/db/UserEntity.java b/user-service/src/main/java/ru/ct/belfort/db/UserEntity.java new file mode 100644 index 0000000..e0e1c09 --- /dev/null +++ b/user-service/src/main/java/ru/ct/belfort/db/UserEntity.java @@ -0,0 +1,8 @@ +package ru.ct.belfort.db; + + +import lombok.Builder; + +@Builder +public record UserEntity(int id, String str) { +} diff --git a/user-service/src/main/java/ru/ct/belfort/db/UserRepository.java b/user-service/src/main/java/ru/ct/belfort/db/UserRepository.java new file mode 100644 index 0000000..d26a6ed --- /dev/null +++ b/user-service/src/main/java/ru/ct/belfort/db/UserRepository.java @@ -0,0 +1,37 @@ +package ru.ct.belfort.db; + + +import lombok.extern.slf4j.Slf4j; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.stereotype.Service; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + +@Service +@Slf4j +public class UserRepository { + private final JdbcTemplate jdbcTemplate; + + public UserRepository(JdbcTemplate jdbcTemplate) { + this.jdbcTemplate = jdbcTemplate; + } + + private static final UserEntityMapper mapper = new UserEntityMapper(); + + public List selectAll() { + return jdbcTemplate.query("SELECT * FROM users", mapper); + } + + private static class UserEntityMapper implements RowMapper { + @Override + public UserEntity mapRow(ResultSet rs, int rowNum) throws SQLException { + return UserEntity.builder() + .id(rs.getInt("id")) + .str(rs.getString("str")) + .build(); + } + } +} diff --git a/user-service/src/main/resources/application.properties b/user-service/src/main/resources/application.properties new file mode 100644 index 0000000..37f0662 --- /dev/null +++ b/user-service/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.liquibase.change-log=classpath:db/migration/master.xml \ No newline at end of file diff --git a/user-service/src/main/resources/database.properties b/user-service/src/main/resources/database.properties new file mode 100644 index 0000000..599b0ea --- /dev/null +++ b/user-service/src/main/resources/database.properties @@ -0,0 +1,4 @@ +spring.datasource.drivername=org.postgresql.Driver +spring.datasource.url=jdbc:postgresql://172.17.0.1:5431/user_service +spring.datasource.username=postgres +spring.datasource.password=postgres \ No newline at end of file diff --git a/user-service/src/main/resources/db/migration/master.xml b/user-service/src/main/resources/db/migration/master.xml new file mode 100644 index 0000000..d889590 --- /dev/null +++ b/user-service/src/main/resources/db/migration/master.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECT * FROM users + INNER JOIN figis + ON users.id = figis.id + + + SELECT * FROM users + INNER JOIN operations + ON users.id = operations.id + + + \ No newline at end of file diff --git a/user-service/src/main/resources/db/migration/sql/create_correct_users.sql b/user-service/src/main/resources/db/migration/sql/create_correct_users.sql new file mode 100644 index 0000000..9ae0dda --- /dev/null +++ b/user-service/src/main/resources/db/migration/sql/create_correct_users.sql @@ -0,0 +1,6 @@ +CREATE TABLE users_table +( + id SERIAL PRIMARY KEY, + token varchar(255), + strategy varchar(255) +) \ No newline at end of file diff --git a/user-service/src/main/resources/db/migration/sql/create_figis.sql b/user-service/src/main/resources/db/migration/sql/create_figis.sql new file mode 100644 index 0000000..647dde0 --- /dev/null +++ b/user-service/src/main/resources/db/migration/sql/create_figis.sql @@ -0,0 +1,5 @@ +CREATE TABLE figis +( + id INTEGER, + figi varchar(255) +) \ No newline at end of file diff --git a/user-service/src/main/resources/db/migration/sql/create_operation.sql b/user-service/src/main/resources/db/migration/sql/create_operation.sql new file mode 100644 index 0000000..fb46079 --- /dev/null +++ b/user-service/src/main/resources/db/migration/sql/create_operation.sql @@ -0,0 +1,8 @@ +CREATE TABLE operations +( + id INT PRIMARY KEY, + payment DOUBLE PRECISION, + price DOUBLE PRECISION, + figi varchar(255), + operationType varchar(255) +) \ No newline at end of file diff --git a/user-service/src/main/resources/db/migration/sql/create_users.sql b/user-service/src/main/resources/db/migration/sql/create_users.sql new file mode 100644 index 0000000..afd081d --- /dev/null +++ b/user-service/src/main/resources/db/migration/sql/create_users.sql @@ -0,0 +1,5 @@ +CREATE TABLE users +( + id SERIAL PRIMARY KEY, + score DOUBLE PRECISION +) \ No newline at end of file