SVN
This commit is contained in:
172
Managers/NoteManager.cs
Normal file
172
Managers/NoteManager.cs
Normal file
@@ -0,0 +1,172 @@
|
||||
using Microsoft.Data.Sqlite;
|
||||
|
||||
namespace SimPas2_Windows.Managers
|
||||
{
|
||||
public class NoteManager
|
||||
{
|
||||
private readonly string mConnectionString;
|
||||
private readonly string mCulture;
|
||||
|
||||
private string mJpLang;
|
||||
|
||||
public NoteManager(string databasePath, string culture)
|
||||
{
|
||||
mConnectionString = $"Data Source={databasePath}";
|
||||
mCulture = culture;
|
||||
|
||||
mJpLang = "ja-JP";
|
||||
}
|
||||
|
||||
private bool AlreadyExists(string name, int? excludeId = null)
|
||||
{
|
||||
using (SqliteConnection conn = new SqliteConnection(mConnectionString))
|
||||
{
|
||||
conn.Open();
|
||||
SqliteCommand com = conn.CreateCommand();
|
||||
com.CommandText = @"
|
||||
SELECT COUNT(*) FROM Notes
|
||||
WHERE UPPER(Name) = UPPER(@name)";
|
||||
com.Parameters.AddWithValue("@name", name);
|
||||
|
||||
if (excludeId.HasValue)
|
||||
{
|
||||
com.CommandText += " AND Id != @excludeId";
|
||||
com.Parameters.AddWithValue("@excludeId", excludeId.Value);
|
||||
}
|
||||
|
||||
return Convert.ToInt32(com.ExecuteScalar()) > 0;
|
||||
}
|
||||
}
|
||||
|
||||
public void AddNote(string name)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(name))
|
||||
{
|
||||
string err = mCulture == mJpLang
|
||||
? "ファイル名を御入力下さい。"
|
||||
: "Please fill in the filename.";
|
||||
throw new ArgumentException(err);
|
||||
}
|
||||
|
||||
if (AlreadyExists(name))
|
||||
{
|
||||
string err = mCulture == mJpLang
|
||||
? $"ファイル名「{name}」付きメモは既に存在します。"
|
||||
: $"A note with the filename '{name}' already exists.";
|
||||
throw new ArgumentException(err);
|
||||
}
|
||||
|
||||
using (SqliteConnection conn = new SqliteConnection(mConnectionString))
|
||||
{
|
||||
conn.Open();
|
||||
SqliteCommand com = conn.CreateCommand();
|
||||
com.CommandText = @"
|
||||
INSERT INTO Notes (Name)
|
||||
VALUES ($name)";
|
||||
com.Parameters.AddWithValue("$name", name);
|
||||
com.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
|
||||
public bool EditNote(int id, string name)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(name))
|
||||
{
|
||||
string err = mCulture == mJpLang
|
||||
? "ファイル名を御入力下さい。" :
|
||||
"Please fill in the filename.";
|
||||
throw new ArgumentException(err);
|
||||
}
|
||||
|
||||
if (AlreadyExists(name, id))
|
||||
{
|
||||
string err = mCulture == mJpLang
|
||||
? $"ファイル名「{name}」付きメモは既に存在します。"
|
||||
: $"A note with the filename '{name}' already exists.";
|
||||
throw new ArgumentException(err);
|
||||
}
|
||||
|
||||
using (SqliteConnection conn = new SqliteConnection(mConnectionString))
|
||||
{
|
||||
conn.Open();
|
||||
SqliteCommand com = conn.CreateCommand();
|
||||
com.CommandText = @"
|
||||
UPDATE Notes
|
||||
SET Name = $name
|
||||
WHERE Id = $id";
|
||||
com.Parameters.AddWithValue("id", id);
|
||||
com.Parameters.AddWithValue("$name", name);
|
||||
|
||||
return com.ExecuteNonQuery() > 0;
|
||||
}
|
||||
}
|
||||
|
||||
public bool SaveNote(int id, string text)
|
||||
{
|
||||
using (SqliteConnection conn = new SqliteConnection(mConnectionString))
|
||||
{
|
||||
conn.Open();
|
||||
SqliteCommand com = conn.CreateCommand();
|
||||
com.CommandText = @"
|
||||
UPDATE Notes
|
||||
SET Text = @text
|
||||
WHERE Id = @id";
|
||||
com.Parameters.AddWithValue("@id", id);
|
||||
com.Parameters.AddWithValue("@text", text ?? (object)DBNull.Value);
|
||||
|
||||
return com.ExecuteNonQuery() > 0;
|
||||
}
|
||||
}
|
||||
|
||||
public bool DeleteNote(int id)
|
||||
{
|
||||
using (SqliteConnection conn = new SqliteConnection(mConnectionString))
|
||||
{
|
||||
conn.Open();
|
||||
SqliteCommand com = conn.CreateCommand();
|
||||
com.CommandText = "DELETE FROM Notes WHERE Id = $id";
|
||||
com.Parameters.AddWithValue("$id", id);
|
||||
|
||||
return com.ExecuteNonQuery() > 0;
|
||||
}
|
||||
}
|
||||
|
||||
public List<(int Id, string Name, string Text)> GetAll(string keyword = "")
|
||||
{
|
||||
var notes = new List<(int, string, string)>();
|
||||
using (SqliteConnection conn = new SqliteConnection(mConnectionString))
|
||||
{
|
||||
conn.Open();
|
||||
SqliteCommand com = conn.CreateCommand();
|
||||
if (string.IsNullOrWhiteSpace(keyword))
|
||||
{
|
||||
com.CommandText = @"
|
||||
SELECT Id, Name, Text FROM Notes
|
||||
ORDER BY Name ASC";
|
||||
}
|
||||
else
|
||||
{
|
||||
com.CommandText = @"
|
||||
SELECT Id, Name, Text FROM Notes
|
||||
WHERE Name LIKE @keyword
|
||||
ORDER BY Name ASC";
|
||||
com.Parameters.AddWithValue("@keyword", $"%{keyword}%");
|
||||
}
|
||||
|
||||
using (SqliteDataReader reader = com.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
notes.Add((
|
||||
reader.GetInt32(0),
|
||||
reader.GetString(1),
|
||||
reader.IsDBNull(2) ? string.Empty : reader.GetString(2)
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return notes;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user