Skip to content

Commit 1c3ba5a

Browse files
committed
Added docker
1 parent c83f11d commit 1c3ba5a

File tree

7 files changed

+40
-10
lines changed

7 files changed

+40
-10
lines changed

Dockerfile

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
FROM eclipse-temurin:17-noble
2+
WORKDIR demo
3+
4+
COPY target/*.jar vk-ping-pong.jar
5+
COPY target/classes/application.properties application.properties
6+
ENTRYPOINT ["java", "-jar", "vk-ping-pong.jar"]

docker-compose.yaml

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
services:
2+
vk-ping-pong:
3+
image: vk-ping-pong:latest
4+
build:
5+
dockerfile: Dockerfile
6+
restart: on-failure
7+
ports:
8+
- "8080:8080"

src/main/java/ru/mika/vkpingpong/api/VkClient.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import ru.mika.vkpingpong.config.SecretConfig;
66
import ru.mika.vkpingpong.dto.callback.CallbackAPIMessageDTO;
77
import ru.mika.vkpingpong.dto.request.SendMessageRequest;
8+
import ru.mika.vkpingpong.dto.response.SendMessageResponse;
89

910
import java.util.Random;
1011

@@ -22,18 +23,19 @@ public VkClient(@Autowired SecretConfig secretConfig, @Autowired VkRepository vk
2223
}
2324

2425
public String processRequest(CallbackAPIMessageDTO callbackDTO) {
25-
Random rand = new Random();
2626
var message = callbackDTO.getObject().getMessage();
27-
long randomId = Long.parseLong(message.getDate()) * rand.nextInt(10000);
2827
var sendMessageRequest = SendMessageRequest.builder()
2928
.secret(secretConfig.getSecretKey())
3029
.userId(message.getFromId())
31-
.randomId(randomId)
30+
.randomId(message.getId())
3231
.message("Вы сказали: " + message.getText())
3332
.accessToken(secretConfig.getAccessToken())
3433
.v(callbackDTO.getV())
3534
.build();
3635

37-
return vkRepository.send(sendMessageRequest).getResponse();
36+
SendMessageResponse sendMessageResponse = vkRepository.send(sendMessageRequest);
37+
if (sendMessageResponse != null) return sendMessageResponse.getResponse();
38+
else return null;
39+
3840
}
3941
}

src/main/java/ru/mika/vkpingpong/api/VkRepository.java

+17-5
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,44 @@
22

33
import com.fasterxml.jackson.core.type.TypeReference;
44
import com.fasterxml.jackson.databind.ObjectMapper;
5-
import lombok.Getter;
65
import org.springframework.stereotype.Component;
76
import retrofit2.Call;
8-
import retrofit2.Retrofit;
9-
import retrofit2.converter.jackson.JacksonConverterFactory;
7+
import retrofit2.Response;
108
import ru.mika.vkpingpong.dto.request.SendMessageRequest;
119
import ru.mika.vkpingpong.dto.response.SendMessageResponse;
1210

13-
import java.util.Map;
11+
import java.util.*;
1412

1513
@Component
1614
public class VkRepository {
1715

1816
private final VkApiCreator apiCreator;
1917

18+
private final Map<Long, List<Long>> callbacksMap = new HashMap<>();
19+
2020
public VkRepository(VkApiCreator apiCreator) {
2121
this.apiCreator = apiCreator;
2222
}
2323

2424
public SendMessageResponse send(SendMessageRequest request) {
25+
if (callbacksMap.containsKey(request.getUserId())) {
26+
for (Long id: callbacksMap.get(request.getUserId())) {
27+
if (Objects.equals(id, request.getRandomId())) {
28+
return null;
29+
}
30+
}
31+
}
2532
var objectMapper = new ObjectMapper();
2633
Map<String, Object> paramsMap = objectMapper.convertValue(request, new TypeReference<>() {});
2734
try {
2835
VkApi vkApi = apiCreator.create();
2936
Call<SendMessageResponse> responseCall = vkApi.sendMessage(paramsMap);
30-
return responseCall.execute().body();
37+
Response<SendMessageResponse> response = responseCall.execute();
38+
List<Long> randomIdList = callbacksMap.getOrDefault(request.getUserId(), new ArrayList<>());
39+
randomIdList.add(request.getRandomId());
40+
callbacksMap.put(request.getUserId(), randomIdList);
41+
return response.body();
42+
3143
} catch (Exception e) {
3244
e.printStackTrace();
3345
}

src/main/java/ru/mika/vkpingpong/dto/callback/CallbackAPIMessageDTO.java

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public static class CallbackMessageDTO {
3838
Long fromId;
3939
String text;
4040
String date;
41+
Long id;
4142
}
4243
public enum MessageType {
4344
message_new, confirmation

src/test/java/ru/mika/vkpingpong/api/VkClientTest.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ void test_whenProcessRequestWithCorrectMessage_Success() {
4848
verify(vkRepository).send(captor.capture());
4949
assertEquals("V1", captor.getValue().getV());
5050
assertEquals("Вы сказали: test", captor.getValue().getMessage());
51-
assertEquals(0L, captor.getValue().getRandomId());
51+
assertEquals(1L, captor.getValue().getRandomId());
5252
assertEquals(config.getAccessToken(), captor.getValue().getAccessToken());
5353
assertEquals(1L, captor.getValue().getUserId());
5454
assertEquals(config.getSecretKey(), captor.getValue().getSecret());
@@ -66,6 +66,7 @@ CallbackAPIMessageDTO buildCallbackMessageDTO() {
6666
messageDTO.setDate("000");
6767
messageDTO.setText("test");
6868
messageDTO.setFromId(1L);
69+
messageDTO.setId(1L);
6970
objectDTO.setMessage(messageDTO);
7071
mockDTO.setObject(objectDTO);
7172
mockDTO.setV("V1");
Binary file not shown.

0 commit comments

Comments
 (0)