remove unique check from schema

This commit is contained in:
IC Rainbow
2024-01-04 13:43:40 +02:00
parent 05057d550f
commit 6108cb852e
5 changed files with 12 additions and 9 deletions
+1 -1
View File
@@ -6151,7 +6151,7 @@ getCreateActiveUser st testView = do
loop
Left e -> putStrLn ("database error " <> show e) >> exitFailure
Right user -> do
void . withTransaction st $ \db -> runExceptT $ createNoteFolder db user
void . withTransaction st $ \db -> runExceptT $ createNoteFolder db user >> createNoteFolder db user
pure user
selectUser :: [User] -> IO User
selectUser [user@User {userId}] = do
@@ -23,7 +23,7 @@ m20240102_note_folders =
CREATE INDEX chat_items_note_folder_id ON chat_items(note_folder_id);
CREATE INDEX files_note_folder_id ON files(note_folder_id);
CREATE UNIQUE INDEX note_folders_user_id ON note_folders(user_id); -- drop UNIQUE for more folders per user
CREATE INDEX note_folders_user_id ON note_folders(user_id);
INSERT INTO note_folders (user_id) SELECT user_id FROM users;
|]
+1 -1
View File
@@ -825,4 +825,4 @@ CREATE INDEX idx_msg_deliveries_agent_msg_id ON "msg_deliveries"(
);
CREATE INDEX chat_items_note_folder_id ON chat_items(note_folder_id);
CREATE INDEX files_note_folder_id ON files(note_folder_id);
CREATE UNIQUE INDEX note_folders_user_id ON note_folders(user_id);
CREATE INDEX note_folders_user_id ON note_folders(user_id);
+8 -5
View File
@@ -1,25 +1,28 @@
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Simplex.Chat.Store.NoteFolders where
import Control.Monad.Except (ExceptT (..))
import Control.Monad.Except (ExceptT (..), throwError)
import Control.Monad.IO.Class (liftIO)
import Data.Time (getCurrentTime)
import Database.SQLite.Simple (Only (..))
import Database.SQLite.Simple.QQ (sql)
import Simplex.Chat.Store.Shared (StoreError (..), checkConstraint)
import Simplex.Chat.Store.Shared (StoreError (..))
import Simplex.Chat.Types (NoteFolder (..), NoteFolderId, NoteFolderName, User (..))
import Simplex.Messaging.Agent.Protocol (UserId)
import Simplex.Messaging.Agent.Store.SQLite (firstRow)
import qualified Simplex.Messaging.Agent.Store.SQLite.DB as DB
createNoteFolder :: DB.Connection -> User -> ExceptT StoreError IO ()
createNoteFolder db User {userId} =
checkConstraint SENoteFolderAlreadyCreated . liftIO $
DB.execute db "INSERT INTO note_folders (user_id) VALUES (?)" (Only userId)
createNoteFolder db User {userId} = do
liftIO (DB.query db "SELECT note_folder_id FROM note_folders WHERE user_id = ? LIMIT 1" $ Only userId) >>= \case
[] -> liftIO $ DB.execute db "INSERT INTO note_folders (user_id) VALUES (?)" (Only userId)
Only noteFolderId : _ -> throwError $ SENoteFolderAlreadyCreated {noteFolderId}
getNoteFolderIdByName :: DB.Connection -> User -> NoteFolderName -> ExceptT StoreError IO NoteFolderId
getNoteFolderIdByName db User {userId} ldn =
+1 -1
View File
@@ -69,7 +69,7 @@ data StoreError
| SEDuplicateGroupMember
| SEGroupAlreadyJoined
| SEGroupInvitationNotFound
| SENoteFolderAlreadyCreated
| SENoteFolderAlreadyCreated {noteFolderId :: NoteFolderId}
| SENoteFolderNotFound {noteFolderId :: NoteFolderId}
| SENoteFolderNotFoundByName {noteFolderName :: NoteFolderName}
| SESndFileNotFound {fileId :: FileTransferId}