Conversation
|
Привет! У тебя сейчас тут очень много закоммиченых файлов которые получились путем автогенерации, например gradle файлы или тестовые репорты |
| } | ||
|
|
||
| @ExceptionHandler(SQLException.class) | ||
| public ResponseEntity<String> handleSQLException(SQLException e) { |
There was a problem hiding this comment.
Довольно опасно отправлять юзеру информацию из SQLException, так как там может содержаться информация о внутреннем устройстве системы, что повлечет к проблемам со стороны безопасности. В этом случае лучше отдавать нейтральное сообщение по типу "Internal Server Error"
| public String createShortLink(@RequestBody String longLink) | ||
| throws IncorrectLongLinkException, BadRepositoryFunctionCallException { | ||
| if(longLink == null || longLink.isBlank()) | ||
| throw new IncorrectLongLinkException(); |
There was a problem hiding this comment.
Будет ли валидация на то, что входная информация является ссылкой? Если текущей проверки достаточно, то хорошо)
| public class LinksEntity { | ||
| @Id | ||
| @Column(name = "SHORT_CODE") | ||
| private String shortCode; |
There was a problem hiding this comment.
Ты не смотрел какого типа в итоге создаются эти поля в SQL? Хватит ли там размера на достаточно длинную ссылку?
| List<String> shortCodes = linksRepository.findShortCodesByLongLink(longLink); | ||
|
|
||
| if (!shortCodes.isEmpty()) | ||
| return shortCodes.get(0); |
There was a problem hiding this comment.
nit: Без фигурных скобок код читается заметно хуже, лучше не пренебрегать ими даже для 1 строчки в блоке
| @@ -0,0 +1,7 @@ | |||
| package org.example.exception; | |||
|
|
|||
| public class BadRepositoryFunctionCallException extends Exception { | |||
There was a problem hiding this comment.
Это и исключение ниже действительно должны быть проверяемыми или все таки их стоит отнести в разряд RuntimeException?
| import java.sql.SQLException; | ||
|
|
||
| @Configuration | ||
| public class JdbcUtils { |
There was a problem hiding this comment.
Обычно все спринговые классы заканчиваются на Configuiration -> JdbcConfiguration
| public class JdbcUtils { | ||
| private static final String DB_URL = "jdbc:h2:~/test"; | ||
| @Bean(value = "connection") | ||
| public Connection getConnection() { |
There was a problem hiding this comment.
А для чего используется этот бин?
Обычно для поддержания соединения используются DataSource, это как раз таки пулы соединений. Из самых популярных есть HikariConnectionPool, почитай про него немного и попробуй использовать тут его
| } | ||
|
|
||
| /*@Test | ||
| void testGetShortLink() throws Exception { |
There was a problem hiding this comment.
Этот тест все ещё нужен или его можно удалить?
| import java.util.Random; | ||
|
|
||
| @Service | ||
| public class MainServiceImpl implements MainService { |
There was a problem hiding this comment.
nit: Названия сервисов желательно должны хорошо отражать то, чем они занимаются
Main звучит довольно нейтрально и схожу понять за что он отвечает сложно
Я бы назвал его LinkService как минимум это бы уже говорило, что сервис занимается обработкой ссылок
| import java.util.List; | ||
|
|
||
| @Repository | ||
| public class OldLinksRepository { |
There was a problem hiding this comment.
Этот класс больше похож на сервис, нежели репозиторий, так как хранит в себе какую-то бизнес логку, а не непосредственно доступ за данными
Попробуй немного переписать код
Репозитории должны хранить в себе только код похода за данными, а проверки с бросками исключений обычно находятся на стороне сервисов
No description provided.