-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDBManager.cs
More file actions
237 lines (210 loc) · 8.67 KB
/
Copy pathDBManager.cs
File metadata and controls
237 lines (210 loc) · 8.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
using System.Data;
using Microsoft.Data.Sqlite;
namespace lemmikkiAPI_esimerkki
{
public record Owner(int id, string name, string number);
public record Pet(int id, string name, string type, string omistaja_name);
public class DBManager
{
private SqliteConnection dbConnection;
public DBManager(string dbName)
{
dbConnection = new SqliteConnection("Data Source=" + dbName + ".db");
NewTable("Omistajat", new List<(string, string)>() { ("Id", "INTEGER PRIMARY KEY"), ("Name", "STRING NOT NULL"), ("Number", "STRING") });
NewTable("Lemmikit", new List<(string, string)> { ("Id", "INTEGER PRIMARY KEY"), ("Name", "STRING NOT NULL"), ("Type", "STRING"), ("Omistaja_Id", "INTEGER") });
}
public bool NewTable(string tableName, List<(string, string)> columns)
{
if (string.IsNullOrEmpty(tableName)) return false;
string command = "CREATE TABLE IF NOT EXISTS " + tableName + " (";
command += string.Join(",", columns.Select(column => $"{column.Item1} {column.Item2}")) + ")";
using (var sqlcommand = dbConnection.CreateCommand())
{
sqlcommand.CommandText = command;
dbConnection.Open();
sqlcommand.ExecuteNonQuery();
dbConnection.Close();
}
return true;
}
public void PostOmistaja(string name, string number)
{
string command = @"INSERT INTO Omistajat (Name, Number) VALUES ($Name, $Number)";
using (var sqlcommand = dbConnection.CreateCommand())
{
sqlcommand.CommandText = command;
sqlcommand.Parameters.AddWithValue("$Name", name);
sqlcommand.Parameters.AddWithValue("$Number", number);
dbConnection.Open();
sqlcommand.ExecuteNonQuery();
dbConnection.Close();
}
}
public bool PostLemmikki(string name, string type, string omistaja_Name)
{
string command = @"INSERT INTO Lemmikit (Name, Type, Omistaja_Id) VALUES ($Name, $Type, $Omistaja_Id)";
using (var sqlcommand = dbConnection.CreateCommand())
{
sqlcommand.CommandText = command;
sqlcommand.Parameters.AddWithValue("$Name", name);
sqlcommand.Parameters.AddWithValue("$Type", type);
// Get the owner ID
int? omistaja_Id = GetOwnerId(omistaja_Name);
if (omistaja_Id == null)
{
return false; // Owner not found
}
sqlcommand.Parameters.AddWithValue("$Omistaja_Id", omistaja_Id);
dbConnection.Open();
sqlcommand.ExecuteNonQuery();
dbConnection.Close();
return true; // Successfully added pet
}
}
private int? GetOwnerId(string ownerName)
{
string command = "SELECT Id FROM Omistajat WHERE Name = $Name";
using (var sqlcommand = dbConnection.CreateCommand())
{
sqlcommand.CommandText = command;
sqlcommand.Parameters.AddWithValue("$Name", ownerName);
dbConnection.Open();
object result = sqlcommand.ExecuteScalar();
dbConnection.Close();
return result != null ? (int?)Convert.ToInt32(result) : null;
}
}
public void UpdateOmistajaNumber(int ownerId, string newNumber)
{
if (!OwnerExists(ownerId))
{
throw new Exception("ID not found.");
}
string command = @"UPDATE Omistajat SET Number = $newNumber WHERE Id = $ownerId";
using (var sqlcommand = dbConnection.CreateCommand())
{
sqlcommand.CommandText = command;
sqlcommand.Parameters.AddWithValue("$ownerId", ownerId);
sqlcommand.Parameters.AddWithValue("$newNumber", newNumber);
dbConnection.Open();
sqlcommand.ExecuteNonQuery();
dbConnection.Close();
}
}
public object? GetOmistajaNumberFromLemmikkiName(string lemmikkiName)
{
string command = @"SELECT Omistajat.Number FROM Omistajat
LEFT JOIN Lemmikit ON Omistajat.Id=Lemmikit.Omistaja_Id
WHERE Lemmikit.Name=$lemmikkiName";
using (var sqlcommand = dbConnection.CreateCommand())
{
sqlcommand.CommandText = command;
sqlcommand.Parameters.AddWithValue("$lemmikkiName", lemmikkiName);
dbConnection.Open();
object? result = sqlcommand.ExecuteScalar();
dbConnection.Close();
if (result == null)
{
throw new Exception("Invalid pet name."); // Throw an exception if pet name is not found
}
return result;
}
}
public List<Owner> GetAllOwners()
{
var owners = new List<Owner>();
string command = "SELECT * FROM Omistajat";
using (var sqlcommand = dbConnection.CreateCommand())
{
sqlcommand.CommandText = command;
dbConnection.Open();
using (var reader = sqlcommand.ExecuteReader())
{
while (reader.Read())
{
owners.Add(new Owner(reader.GetInt32(0), reader.GetString(1), reader.GetString(2)));
}
}
dbConnection.Close();
}
return owners;
}
public List<Pet> GetAllPets()
{
var pets = new List<Pet>();
string command = "SELECT * FROM Lemmikit";
using (var sqlcommand = dbConnection.CreateCommand())
{
sqlcommand.CommandText = command;
dbConnection.Open();
using (var reader = sqlcommand.ExecuteReader())
{
while (reader.Read())
{
pets.Add(new Pet(reader.GetInt32(0), reader.GetString(1), reader.GetString(2), reader.GetString(3)));
}
}
dbConnection.Close();
}
return pets;
}
public void DeleteOwner(int ownerId)
{
if (!OwnerExists(ownerId))
{
throw new Exception("ID not found.");
}
string command = @"DELETE FROM Omistajat WHERE Id = $ownerId";
using (var sqlcommand = dbConnection.CreateCommand())
{
sqlcommand.CommandText = command;
sqlcommand.Parameters.AddWithValue("$ownerId", ownerId);
dbConnection.Open();
sqlcommand.ExecuteNonQuery();
dbConnection.Close();
}
}
public void DeletePet(int petId)
{
if (!PetExists(petId))
{
throw new Exception("ID not found.");
}
string command = @"DELETE FROM Lemmikit WHERE Id = $petId";
using (var sqlcommand = dbConnection.CreateCommand())
{
sqlcommand.CommandText = command;
sqlcommand.Parameters.AddWithValue("$petId", petId);
dbConnection.Open();
sqlcommand.ExecuteNonQuery();
dbConnection.Close();
}
}
private bool OwnerExists(int ownerId)
{
string command = "SELECT COUNT(*) FROM Omistajat WHERE Id = $ownerId";
using (var sqlcommand = dbConnection.CreateCommand())
{
sqlcommand.CommandText = command;
sqlcommand.Parameters.AddWithValue("$ownerId", ownerId);
dbConnection.Open();
int count = Convert.ToInt32(sqlcommand.ExecuteScalar());
dbConnection.Close();
return count > 0;
}
}
private bool PetExists(int petId)
{
string command = "SELECT COUNT(*) FROM Lemmikit WHERE Id = $petId";
using (var sqlcommand = dbConnection.CreateCommand())
{
sqlcommand.CommandText = command;
sqlcommand.Parameters.AddWithValue("$petId", petId);
dbConnection.Open();
int count = Convert.ToInt32(sqlcommand.ExecuteScalar());
dbConnection.Close();
return count > 0;
}
}
}
}