From 4ec5f857ed642260fc039d39137dd5273f57184d Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Mon, 9 Oct 2017 15:57:15 +0200 Subject: [PATCH] feat(EventsDb): import Participants from legacy messages --- src/db/events-db.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/db/events-db.cpp b/src/db/events-db.cpp index df0ff6468..32fe2c2db 100644 --- a/src/db/events-db.cpp +++ b/src/db/events-db.cpp @@ -60,7 +60,7 @@ public: long insertContentType (const string &contentType); long insertEvent (EventLog::Type type, const tm &date); long insertChatRoom (long sipAddressId, const tm &date); - void insertChatRoomParticipant (long chatRoomId, const shared_ptr &participant); + void insertChatRoomParticipant (long chatRoomId, long sipAddressId, bool isAdmin); long insertMessageEvent ( const MessageEventReferences &references, @@ -205,12 +205,18 @@ EventsDb::EventsDb () : AbstractDb(*new EventsDbPrivate) {} return sipAddressId; } - void EventsDbPrivate::insertChatRoomParticipant (long chatRoomId, const shared_ptr &participant) { + void EventsDbPrivate::insertChatRoomParticipant (long chatRoomId, long sipAddressId, bool isAdmin) { soci::session *session = dbSession.getBackendSession(); - long participantId = insertSipAddress(participant->getAddress().asStringUriOnly()); - - *session << "UPDATE chat_room_participant SET is_admin = :isAdmin WHERE sip_address_id = sipAddressId", - soci::use(static_cast(participant->isAdmin())), soci::use(participantId); + soci::statement statement = ( + session->prepare << "UPDATE chat_room_participant SET is_admin = :isAdmin" + " WHERE chat_room_id = :chatRoomId AND sip_address_id = :sipAddressId", + soci::use(static_cast(isAdmin)), soci::use(chatRoomId), soci::use(sipAddressId) + ); + statement.execute(true); + if (statement.get_affected_rows() == 0) + *session << "INSERT INTO chat_room_participant (chat_room_id, sip_address_id, is_admin)" + " VALUES (:chatRoomId, :sipAddressId, :isAdmin)", + soci::use(chatRoomId), soci::use(sipAddressId), soci::use(static_cast(isAdmin)); } long EventsDbPrivate::insertMessageEvent ( @@ -307,6 +313,8 @@ EventsDb::EventsDb () : AbstractDb(*new EventsDbPrivate) {} references.remoteSipAddressId = insertSipAddress(message.get(2)); references.chatRoomId = insertChatRoom(references.remoteSipAddressId, date); + insertChatRoomParticipant(references.chatRoomId, references.remoteSipAddressId, false); + insertMessageEvent ( references, static_cast(state),