23 12 25
Сессии работают пользователи добавляются. Плюс сделал автоматические тесты как положенно
This commit is contained in:
parent
ae63a653c8
commit
c515d5287e
@ -66,6 +66,32 @@ public final class SolanaUsersDAO {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------- EXISTS --------------------
|
||||||
|
|
||||||
|
/** Проверка существования по login (case-insensitive) с внешним соединением. Соединение НЕ закрывает. */
|
||||||
|
public boolean existsByLogin(Connection c, String login) throws SQLException {
|
||||||
|
String sql = """
|
||||||
|
SELECT 1
|
||||||
|
FROM solana_users
|
||||||
|
WHERE LOWER(login) = LOWER(?)
|
||||||
|
LIMIT 1
|
||||||
|
""";
|
||||||
|
|
||||||
|
try (PreparedStatement ps = c.prepareStatement(sql)) {
|
||||||
|
ps.setString(1, login);
|
||||||
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
|
return rs.next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Проверка существования по login (case-insensitive) без внешнего соединения. Сам открывает/закрывает. */
|
||||||
|
public boolean existsByLogin(String login) throws SQLException {
|
||||||
|
try (Connection c = db.getConnection()) {
|
||||||
|
return existsByLogin(c, login);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------- SELECT --------------------
|
// -------------------- SELECT --------------------
|
||||||
|
|
||||||
/** Получить по login (case-insensitive) с внешним соединением. Соединение НЕ закрывает. */
|
/** Получить по login (case-insensitive) с внешним соединением. Соединение НЕ закрывает. */
|
||||||
|
|||||||
@ -45,6 +45,18 @@ public class Net_AddUser_Handler implements JsonMessageHandler {
|
|||||||
try {
|
try {
|
||||||
SolanaUsersDAO dao = SolanaUsersDAO.getInstance();
|
SolanaUsersDAO dao = SolanaUsersDAO.getInstance();
|
||||||
|
|
||||||
|
// ✅ Новая логика: если пользователь уже есть — возвращаем понятную ошибку
|
||||||
|
SolanaUserEntry exists = dao.getByLogin(req.getLogin());
|
||||||
|
if (exists != null) {
|
||||||
|
log.info("⚠️ AddUser: user already exists, login={}", req.getLogin());
|
||||||
|
return NetExceptionResponseFactory.error(
|
||||||
|
req,
|
||||||
|
409, // CONFLICT
|
||||||
|
"USER_ALREADY_EXISTS",
|
||||||
|
"Пользователь с таким login уже существует в системе"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
SolanaUserEntry user = new SolanaUserEntry(
|
SolanaUserEntry user = new SolanaUserEntry(
|
||||||
req.getLogin(),
|
req.getLogin(),
|
||||||
req.getBlockchainName(),
|
req.getBlockchainName(),
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -13,19 +13,30 @@ public class AddUserIT {
|
|||||||
try (WsTestClient client = new WsTestClient(TestConfig.WS_URI)) {
|
try (WsTestClient client = new WsTestClient(TestConfig.WS_URI)) {
|
||||||
|
|
||||||
String reqId = "it-adduser-1";
|
String reqId = "it-adduser-1";
|
||||||
String resp = client.request(reqId, JsonBuilders.addUser(reqId), Duration.ofSeconds(5));
|
String reqJson = JsonBuilders.addUser(reqId);
|
||||||
|
|
||||||
|
TestLog.section("AddUserIT: AddUser");
|
||||||
|
TestLog.req("AddUser requestId=" + reqId, reqJson);
|
||||||
|
|
||||||
|
String resp = client.request(reqId, reqJson, Duration.ofSeconds(5));
|
||||||
|
TestLog.resp("AddUser responseId=" + reqId, resp);
|
||||||
|
|
||||||
int st = JsonParsers.status(resp);
|
int st = JsonParsers.status(resp);
|
||||||
|
|
||||||
// ВАЖНО: тут подставь свой реальный код "уже существует", если он не 200.
|
|
||||||
// Я оставляю пример: 409.
|
|
||||||
boolean created = (st == 200);
|
boolean created = (st == 200);
|
||||||
boolean already = (st == 409);
|
boolean already = (st == 409);
|
||||||
|
|
||||||
|
if (already) {
|
||||||
|
String code = JsonParsers.errorCode(resp);
|
||||||
|
// если сервер кладет code в payload.code — парсер должен это поддерживать (см. ниже)
|
||||||
|
assertEquals("USER_ALREADY_EXISTS", code,
|
||||||
|
"Expected errorCode=USER_ALREADY_EXISTS, but got: " + code + ", resp=" + resp);
|
||||||
|
}
|
||||||
|
|
||||||
if (created) {
|
if (created) {
|
||||||
System.out.println("✅ AddUser: создан/добавлен (status=200)");
|
System.out.println("✅ AddUser: создан/добавлен (status=200)");
|
||||||
} else if (already) {
|
} else if (already) {
|
||||||
System.out.println("✅ AddUser: возможно уже есть в базе (status=409)");
|
System.out.println("✅ AddUser: уже есть в системе (status=409, USER_ALREADY_EXISTS)");
|
||||||
} else {
|
} else {
|
||||||
fail("❌ AddUser: неожиданный status=" + st + ", resp=" + resp);
|
fail("❌ AddUser: неожиданный status=" + st + ", resp=" + resp);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -79,4 +79,25 @@ public final class JsonParsers {
|
|||||||
} catch (Exception ignored) {}
|
} catch (Exception ignored) {}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String errorCode(String json) {
|
||||||
|
try {
|
||||||
|
JsonNode root = MAPPER.readTree(json);
|
||||||
|
|
||||||
|
// поддержка старого формата (верхний уровень)
|
||||||
|
if (root.has("errorCode")) return root.get("errorCode").asText();
|
||||||
|
// поддержка нового формата (верхний уровень)
|
||||||
|
if (root.has("code")) return root.get("code").asText();
|
||||||
|
|
||||||
|
JsonNode payload = root.get("payload");
|
||||||
|
if (payload != null) {
|
||||||
|
// поддержка старого формата (внутри payload)
|
||||||
|
if (payload.has("errorCode")) return payload.get("errorCode").asText();
|
||||||
|
// поддержка нового формата (внутри payload)
|
||||||
|
if (payload.has("code")) return payload.get("code").asText();
|
||||||
|
}
|
||||||
|
} catch (Exception ignored) {}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user