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
58 changes: 56 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.5</version>
<relativePath/> <!-- lookup parent from repository -->
<relativePath/>
</parent>
<groupId>ivan</groupId>
<artifactId>solscanbot</artifactId>
Expand All @@ -29,6 +29,8 @@
<properties>
<maven.checkstyle.plugin.configLocation>checkstyle.xml</maven.checkstyle.plugin.configLocation>
<java.version>21</java.version>
<org.mapstruct.version>1.6.3</org.mapstruct.version>
<lombok.mapstruct.binding.version>0.2.0</lombok.mapstruct.binding.version>
</properties>
<dependencies>
<dependency>
Expand All @@ -55,6 +57,11 @@
<artifactId>telegrambots</artifactId>
<version>6.1.0</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
Expand All @@ -74,7 +81,54 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
<configuration>
<sourceDirectories>
<sourceDirectory>${project.build.sourceDirectory}</sourceDirectory>
<sourceDirectory>${project.build.testSourceDirectory}</sourceDirectory>
</sourceDirectories>
<configLocation>${maven.checkstyle.plugin.configLocation}</configLocation>
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
<linkXRef>false</linkXRef>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>${lombok.mapstruct.binding.version}</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>

</project>
80 changes: 0 additions & 80 deletions src/main/java/ivan/solscanbot/bot/DeFiMonitorBotImpl.java

This file was deleted.

12 changes: 12 additions & 0 deletions src/main/java/ivan/solscanbot/config/MapperConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package ivan.solscanbot.config;

import org.mapstruct.InjectionStrategy;
import org.mapstruct.NullValueCheckStrategy;

@org.mapstruct.MapperConfig(
componentModel = "spring",
injectionStrategy = InjectionStrategy.CONSTRUCTOR,
nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS,
implementationPackage = "<PACKAGE_NAME>.impl"
)public class MapperConfig {
}
9 changes: 9 additions & 0 deletions src/main/java/ivan/solscanbot/config/SchedulingConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package ivan.solscanbot.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;

@Configuration
@EnableScheduling
public class SchedulingConfig {
}
5 changes: 2 additions & 3 deletions src/main/java/ivan/solscanbot/config/TelegramBotConfig.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package ivan.solscanbot.config;

import ivan.solscanbot.bot.DeFiMonitorBotImpl;
import org.springframework.beans.factory.annotation.Value;
import ivan.solscanbot.service.DeFiMonitorBot;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.telegram.telegrambots.meta.TelegramBotsApi;
Expand All @@ -11,7 +10,7 @@
@Configuration
public class TelegramBotConfig {
@Bean
public TelegramBotsApi telegramBotsApi(DeFiMonitorBotImpl bot) throws TelegramApiException {
public TelegramBotsApi telegramBotsApi(DeFiMonitorBot bot) throws TelegramApiException {
TelegramBotsApi botsApi = new TelegramBotsApi(DefaultBotSession.class);
botsApi.registerBot(bot);
return botsApi;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package ivan.solscanbot.dto.external;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

@Data
public class SingleTokenNameResponseDto {
@JsonProperty("token_name")
private String tokenName;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package ivan.solscanbot.dto.external;

import java.util.Set;
import lombok.Data;

@Data
public class TokenNamesResponseDto {
private Set<SingleTokenNameResponseDto> tokens;
}
42 changes: 42 additions & 0 deletions src/main/java/ivan/solscanbot/dto/internal/MonitoredAddress.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package ivan.solscanbot.dto.internal;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.JoinTable;
import jakarta.persistence.ManyToMany;
import java.util.HashSet;
import java.util.Set;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;

@Entity
@Data
@NoArgsConstructor
@SQLDelete(sql = "UPDATE roles SET is_deleted = true WHERE id = ?")
@Where(clause = "is_deleted = false")
public class MonitoredAddress {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String address;
@Column(nullable = false)
private Long chatId;
@ManyToMany
@ToString.Exclude
@EqualsAndHashCode.Exclude
@JoinTable(name = "address_token",
joinColumns = @JoinColumn(name = "address_id"),
inverseJoinColumns = @JoinColumn(name = "token_id"))
private Set<Token> tokens = new HashSet<>();
@Column(name = "is_deleted")
private boolean deleted = false;
}
26 changes: 26 additions & 0 deletions src/main/java/ivan/solscanbot/dto/internal/Token.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package ivan.solscanbot.dto.internal;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;

@Data
@Entity
@NoArgsConstructor
@SQLDelete(sql = "UPDATE roles SET is_deleted = true WHERE id = ?")
@Where(clause = "is_deleted = false")
public class Token {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true, nullable = false, name = "token_name")
private String tokenName;
@Column(name = "is_deleted")
private boolean isDeleted = false;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package ivan.solscanbot.exception;

public class AddressAlreadyExistsException extends RuntimeException {
public AddressAlreadyExistsException(String message) {
super(message);
}

public AddressAlreadyExistsException(String message, Throwable cause) {
super(message, cause);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package ivan.solscanbot.exception;

public class AddressNotMonitoredException extends RuntimeException {

public AddressNotMonitoredException(String message) {
super(message);
}

public AddressNotMonitoredException(String message, Throwable cause) {
super(message, cause);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package ivan.solscanbot.exception;

public class InvalidAddressException extends RuntimeException {
public InvalidAddressException(String message) {
super(message);
}

public InvalidAddressException(String message, Throwable cause) {
super(message, cause);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package ivan.solscanbot.exception;

public class UserNotHaveAnyMonitoredAddressesException extends RuntimeException {
public UserNotHaveAnyMonitoredAddressesException(String message) {
super(message);
}

public UserNotHaveAnyMonitoredAddressesException(String message, Throwable cause) {
super(message, cause);
}
}
11 changes: 11 additions & 0 deletions src/main/java/ivan/solscanbot/mapper/TokenMapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package ivan.solscanbot.mapper;

import ivan.solscanbot.config.MapperConfig;
import ivan.solscanbot.dto.external.SingleTokenNameResponseDto;
import ivan.solscanbot.dto.internal.Token;
import org.mapstruct.Mapper;

@Mapper(config = MapperConfig.class)
public interface TokenMapper {
Token toModel(SingleTokenNameResponseDto dto);
}
14 changes: 0 additions & 14 deletions src/main/java/ivan/solscanbot/model/MonitoredAddress.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ivan.solscanbot.repository;

import ivan.solscanbot.dto.internal.MonitoredAddress;
import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;

public interface MonitoredAddressRepository
extends JpaRepository<MonitoredAddress, Long> {

void deleteByAddressAndChatId(String address, Long chatId);

boolean existsByAddressAndChatId(String address, Long chatId);

List<MonitoredAddress> findByChatId(Long chatId);

Optional<MonitoredAddress> findByAddress(String address);
}
Loading