From 74aa3396cf688244dac77026ce0510f67bfbc975 Mon Sep 17 00:00:00 2001 From: AlexeyRogS Date: Wed, 1 Apr 2020 23:20:51 +0300 Subject: [PATCH] L6 --- .../ru/atom/controller/ChatController.java | 11 ++++- .../main/java/ru/atom/dao/DbConnector.java | 8 ++-- .../src/main/java/ru/atom/dao/MessageDao.java | 17 ++++++- .../src/main/java/ru/atom/dao/UserDao.java | 16 ++++++- .../sql/schema/schema-3-transaction.sql.lck | Bin 0 -> 16 bytes .../sql/schema/schema-3-transaction.sql.log | 2 + .../schema-3-transaction.sql.properties | 5 ++ .../schema/schema-3-transaction.sql.script | 43 ++++++++++++++++++ .../test/java/ru/atom/dao/MessageDaoTest.java | 2 +- .../test/java/ru/atom/dao/UserDaoTest.java | 3 +- 10 files changed, 98 insertions(+), 9 deletions(-) create mode 100644 lecture06/src/main/resources/sql/schema/schema-3-transaction.sql.lck create mode 100644 lecture06/src/main/resources/sql/schema/schema-3-transaction.sql.log create mode 100644 lecture06/src/main/resources/sql/schema/schema-3-transaction.sql.properties create mode 100644 lecture06/src/main/resources/sql/schema/schema-3-transaction.sql.script diff --git a/lecture06/src/main/java/ru/atom/controller/ChatController.java b/lecture06/src/main/java/ru/atom/controller/ChatController.java index 3ce7296ee4..b7b8a3188e 100644 --- a/lecture06/src/main/java/ru/atom/controller/ChatController.java +++ b/lecture06/src/main/java/ru/atom/controller/ChatController.java @@ -71,7 +71,16 @@ public ResponseEntity login(@RequestParam("name") String name) { consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) @ResponseStatus(HttpStatus.OK) public ResponseEntity logout(@RequestParam("name") String name) { - throw new UnsupportedOperationException(); + List allUsers = userDao.getAll(); + if (allUsers.stream().noneMatch(l -> l.getLogin().equals(name))) { + return ResponseEntity.badRequest() + .body("No user with name " + name); + } + User user = new User().setLogin(name); + + log.info("[" + name + "] logged out"); + + return ResponseEntity.ok().build(); } diff --git a/lecture06/src/main/java/ru/atom/dao/DbConnector.java b/lecture06/src/main/java/ru/atom/dao/DbConnector.java index 90d1c56728..609aa71498 100644 --- a/lecture06/src/main/java/ru/atom/dao/DbConnector.java +++ b/lecture06/src/main/java/ru/atom/dao/DbConnector.java @@ -17,11 +17,11 @@ class DbConnector { private static final String URL_TEMPLATE = "jdbc:postgresql://%s:%d/%s"; private static final String URL; - private static final String HOST = "54.224.37.210"; + private static final String HOST = "localhost"; private static final int PORT = 5432; - private static final String DB_NAME = "chatdb_atomN"; - private static final String USER = "atomN"; - private static final String PASSWORD = "atomN"; + private static final String DB_NAME = "postgres"; + private static final String USER = "postgres"; + private static final String PASSWORD = "password1997"; static { try { diff --git a/lecture06/src/main/java/ru/atom/dao/MessageDao.java b/lecture06/src/main/java/ru/atom/dao/MessageDao.java index f77766d4ec..21a92abcf7 100644 --- a/lecture06/src/main/java/ru/atom/dao/MessageDao.java +++ b/lecture06/src/main/java/ru/atom/dao/MessageDao.java @@ -26,6 +26,8 @@ public class MessageDao implements Dao { " on m.user = u.id " + "order by m.time"; + private static final String SELECT_ALL_MESSAGES_WHERE = SELECT_ALL_MESSAGES + " where "; + private static final String INSERT_MESSAGE_TEMPLATE = "insert into chat.message (\"user\", time, value) " + "values (%d, now(), '%s')"; @@ -50,7 +52,20 @@ public List getAll() { @Override public List getAllWhere(String... conditions) { - throw new UnsupportedOperationException(); + List messages = new ArrayList<>(); + try (Connection con = DbConnector.getConnection(); + Statement stm = con.createStatement() + ) { + String condition = String.join(" and ", conditions); + ResultSet rs = stm.executeQuery(SELECT_ALL_MESSAGES_WHERE + condition); + while (rs.next()) { + messages.add(mapToMessage(rs)); + } + } catch (SQLException e) { + log.error("Failed to getAll where.", e); + return Collections.emptyList(); + } + return messages; } @Override diff --git a/lecture06/src/main/java/ru/atom/dao/UserDao.java b/lecture06/src/main/java/ru/atom/dao/UserDao.java index 05424d05b9..d48d1ae3e1 100644 --- a/lecture06/src/main/java/ru/atom/dao/UserDao.java +++ b/lecture06/src/main/java/ru/atom/dao/UserDao.java @@ -81,7 +81,21 @@ public void insert(User user) { } public User getByName(String name) { - throw new UnsupportedOperationException(); + User person; + try (Connection con = DbConnector.getConnection(); + Statement stm = con.createStatement() + ) { + ResultSet rs = stm.executeQuery(SELECT_ALL_USERS_WHERE + "chat.user.login = '" + name + "'"); + if (rs.next()) { + return mapToUser(rs); + } else { + log.info("No user with name " + name); + return null; + } + } catch (SQLException e) { + log.error("Failed to getAll where.", e); + return null; + } } private static User mapToUser(ResultSet rs) throws SQLException { diff --git a/lecture06/src/main/resources/sql/schema/schema-3-transaction.sql.lck b/lecture06/src/main/resources/sql/schema/schema-3-transaction.sql.lck new file mode 100644 index 0000000000000000000000000000000000000000..4936529ac316bba00bc695cf266d0b6b6f853011 GIT binary patch literal 16 XcmeYW4)pQyclKsrU@SDZyJrpnBe4Wt literal 0 HcmV?d00001 diff --git a/lecture06/src/main/resources/sql/schema/schema-3-transaction.sql.log b/lecture06/src/main/resources/sql/schema/schema-3-transaction.sql.log new file mode 100644 index 0000000000..78686cc3b5 --- /dev/null +++ b/lecture06/src/main/resources/sql/schema/schema-3-transaction.sql.log @@ -0,0 +1,2 @@ +/*C4*/SET SCHEMA PUBLIC +DISCONNECT diff --git a/lecture06/src/main/resources/sql/schema/schema-3-transaction.sql.properties b/lecture06/src/main/resources/sql/schema/schema-3-transaction.sql.properties new file mode 100644 index 0000000000..281b1caad1 --- /dev/null +++ b/lecture06/src/main/resources/sql/schema/schema-3-transaction.sql.properties @@ -0,0 +1,5 @@ +#HSQL Database Engine 2.4.0 +#Wed Apr 01 19:33:59 UTC 2020 +tx_timestamp=0 +modified=yes +version=2.4.0 diff --git a/lecture06/src/main/resources/sql/schema/schema-3-transaction.sql.script b/lecture06/src/main/resources/sql/schema/schema-3-transaction.sql.script new file mode 100644 index 0000000000..b956d974d4 --- /dev/null +++ b/lecture06/src/main/resources/sql/schema/schema-3-transaction.sql.script @@ -0,0 +1,43 @@ +SET DATABASE UNIQUE NAME HSQLDB71373C41C8 +SET DATABASE GC 0 +SET DATABASE DEFAULT RESULT MEMORY ROWS 0 +SET DATABASE EVENT LOG LEVEL 0 +SET DATABASE TRANSACTION CONTROL LOCKS +SET DATABASE DEFAULT ISOLATION LEVEL READ COMMITTED +SET DATABASE TRANSACTION ROLLBACK ON CONFLICT TRUE +SET DATABASE TEXT TABLE DEFAULTS '' +SET DATABASE SQL NAMES FALSE +SET DATABASE SQL REFERENCES FALSE +SET DATABASE SQL SIZE TRUE +SET DATABASE SQL TYPES FALSE +SET DATABASE SQL TDC DELETE TRUE +SET DATABASE SQL TDC UPDATE TRUE +SET DATABASE SQL CONCAT NULLS TRUE +SET DATABASE SQL UNIQUE NULLS TRUE +SET DATABASE SQL CONVERT TRUNCATE TRUE +SET DATABASE SQL AVG SCALE 0 +SET DATABASE SQL DOUBLE NAN TRUE +SET FILES WRITE DELAY 500 MILLIS +SET FILES BACKUP INCREMENT TRUE +SET FILES CACHE SIZE 10000 +SET FILES CACHE ROWS 50000 +SET FILES SCALE 32 +SET FILES LOB SCALE 32 +SET FILES DEFRAG 0 +SET FILES NIO TRUE +SET FILES NIO SIZE 256 +SET FILES LOG TRUE +SET FILES LOG SIZE 50 +CREATE USER "postgres" PASSWORD DIGEST '922ce8539ca827eb587528c246da710d' +ALTER USER "postgres" SET LOCAL TRUE +CREATE SCHEMA PUBLIC AUTHORIZATION DBA +ALTER SEQUENCE SYSTEM_LOBS.LOB_ID RESTART WITH 1 +SET DATABASE DEFAULT INITIAL SCHEMA PUBLIC +GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.SQL_IDENTIFIER TO PUBLIC +GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.YES_OR_NO TO PUBLIC +GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.TIME_STAMP TO PUBLIC +GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.CARDINAL_NUMBER TO PUBLIC +GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.CHARACTER_DATA TO PUBLIC +GRANT DBA TO "postgres" +SET SCHEMA SYSTEM_LOBS +INSERT INTO BLOCKS VALUES(0,2147483647,0) diff --git a/lecture06/src/test/java/ru/atom/dao/MessageDaoTest.java b/lecture06/src/test/java/ru/atom/dao/MessageDaoTest.java index b4dec412bb..991c29c249 100644 --- a/lecture06/src/test/java/ru/atom/dao/MessageDaoTest.java +++ b/lecture06/src/test/java/ru/atom/dao/MessageDaoTest.java @@ -14,7 +14,7 @@ /** * Created by sergey on 3/25/17. */ -@Ignore + public class MessageDaoTest { private MessageDao messageDao; private String msg ; diff --git a/lecture06/src/test/java/ru/atom/dao/UserDaoTest.java b/lecture06/src/test/java/ru/atom/dao/UserDaoTest.java index b4f4d4c440..b8ebe8ae2d 100644 --- a/lecture06/src/test/java/ru/atom/dao/UserDaoTest.java +++ b/lecture06/src/test/java/ru/atom/dao/UserDaoTest.java @@ -14,7 +14,7 @@ /** * Created by sergey on 3/25/17. */ -@Ignore + public class UserDaoTest { private UserDao userDao; private String login; @@ -34,6 +34,7 @@ public void setUp() throws Exception { @Test public void getAllTest() throws Exception { + System.out.println(userDao.getAll()); assertTrue(userDao.getAll().size() > 0); }