using Microsoft.Data.Sqlite; using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Hermes { public static class CitoyenDAO { private static Citoyen ReadCitoyen(SqliteDataReader reader) { Citoyen citoyen = new Citoyen(reader.GetInt32(0), reader.GetString(1), reader.GetString(2), DateTime.Now, reader.GetString(4), reader.GetString(5), reader.GetInt32(6), reader.GetString(7), reader.GetString(8)); citoyen.DateNaissance = DateTime.ParseExact(reader.GetString(3), "yyyy", CultureInfo.InvariantCulture); return citoyen; } private static List ReadCitoyens(SqliteDataReader reader) { List citoyens = new List(); while (reader.Read()) { citoyens.Add(ReadCitoyen(reader)); } return citoyens; } public static List FetchAll() { SqliteConnection db = DataAccess.GetConnection(); SqliteCommand selectCmd = new SqliteCommand("SELECT id, nom, prenom, date_naissance, adresse, profession, type_residence, mail, tel FROM citoyen", db); SqliteDataReader reader = selectCmd.ExecuteReader(); return ReadCitoyens(reader); } public static List FetchByAgeSup(int age) { SqliteConnection db = DataAccess.GetConnection(); int year = DateTime.Now.Year - age; SqliteCommand selectCmd = new SqliteCommand("SELECT id, nom, prenom, date_naissance, adresse, profession, type_residence, mail, tel FROM citoyen WHERE date_naissance < $year", db); selectCmd.Parameters.AddWithValue("$year", year.ToString()); SqliteDataReader reader = selectCmd.ExecuteReader(); return ReadCitoyens(reader); } public static List FetchByAgeEquals(int age) { SqliteConnection db = DataAccess.GetConnection(); int year = DateTime.Now.Year - age; SqliteCommand selectCmd = new SqliteCommand("SELECT id, nom, prenom, date_naissance, adresse, profession, type_residence, mail, tel FROM citoyen WHERE date_naissance = $year", db); selectCmd.Parameters.AddWithValue("$year", year.ToString()); SqliteDataReader reader = selectCmd.ExecuteReader(); return ReadCitoyens(reader); } public static List FetchByAgeInf(int age) { SqliteConnection db = DataAccess.GetConnection(); int year = DateTime.Now.Year - age; SqliteCommand selectCmd = new SqliteCommand("SELECT id, nom, prenom, date_naissance, adresse, profession, type_residence, mail, tel FROM citoyen WHERE date_naissance > $year", db); selectCmd.Parameters.AddWithValue("$year", year.ToString()); SqliteDataReader reader = selectCmd.ExecuteReader(); return ReadCitoyens(reader); } public static List FetchByProfession(string pattern) { SqliteConnection db = DataAccess.GetConnection(); SqliteCommand selectCmd = new SqliteCommand("SELECT id, nom, prenom, date_naissance, adresse, profession, type_residence, mail, tel FROM citoyen WHERE LOWER(date_naissance) LIKE $pattern", db); selectCmd.Parameters.AddWithValue("$pattern", "%" + pattern.ToLower() + "%"); SqliteDataReader reader = selectCmd.ExecuteReader(); return ReadCitoyens(reader); } public static List FetchByAdresse(string pattern) { SqliteConnection db = DataAccess.GetConnection(); SqliteCommand selectCmd = new SqliteCommand("SELECT id, nom, prenom, date_naissance, adresse, profession, type_residence, mail, tel FROM citoyen WHERE LOWER(adresse) LIKE $pattern", db); selectCmd.Parameters.AddWithValue("$pattern", "%" + pattern.ToLower() + "%"); SqliteDataReader reader = selectCmd.ExecuteReader(); return ReadCitoyens(reader); } public static List FetchByTypeResidence(int type) { SqliteConnection db = DataAccess.GetConnection(); SqliteCommand selectCmd = new SqliteCommand("SELECT id, nom, prenom, date_naissance, adresse, profession, type_residence, mail, tel FROM citoyen WHERE type_residence = $type", db); selectCmd.Parameters.AddWithValue("$type", type); SqliteDataReader reader = selectCmd.ExecuteReader(); return ReadCitoyens(reader); } public static void Add(Citoyen citoyen) { SqliteConnection db = DataAccess.GetConnection(); SqliteCommand insertCmd = new SqliteCommand("INSERT INTO citoyen (nom, prenom, date_naissance, adresse, profession, type_residence, mail, tel) VALUES ($nom, $prenom, $date_naissance, $adresse, $profession, $type_residence, $mail, $tel)", db); insertCmd.Parameters.AddWithValue("$nom", citoyen.Nom); insertCmd.Parameters.AddWithValue("$prenom", citoyen.Prenom); insertCmd.Parameters.AddWithValue("$date_naissance", citoyen.DateNaissance.ToString("yyyy")); insertCmd.Parameters.AddWithValue("$adresse", citoyen.Adresse); insertCmd.Parameters.AddWithValue("$profession", citoyen.Profession); insertCmd.Parameters.AddWithValue("$type_residence", citoyen.TypeResidence); insertCmd.Parameters.AddWithValue("$mail", citoyen.Mail); insertCmd.Parameters.AddWithValue("$tel", citoyen.Tel); insertCmd.ExecuteNonQuery(); } public static void Update(Citoyen citoyen) { SqliteConnection db = DataAccess.GetConnection(); SqliteCommand insertCmd = new SqliteCommand("UPDATE citoyen SET nom = $nom, prenom = $prenom, date_naissance = $date_naissance, adresse = $adresse, profession = $profession, type_residence = $type_residence, mail = $mail, tel = $tel WHERE id = $id", db); insertCmd.Parameters.AddWithValue("$id", citoyen.Id); insertCmd.Parameters.AddWithValue("$nom", citoyen.Nom); insertCmd.Parameters.AddWithValue("$prenom", citoyen.Prenom); insertCmd.Parameters.AddWithValue("$date_naissance", citoyen.DateNaissance.ToString("yyyyMMdd")); insertCmd.Parameters.AddWithValue("$adresse", citoyen.Adresse); insertCmd.Parameters.AddWithValue("$profession", citoyen.Profession); insertCmd.Parameters.AddWithValue("$type_residence", citoyen.TypeResidence); insertCmd.Parameters.AddWithValue("$mail", citoyen.Mail); insertCmd.Parameters.AddWithValue("$tel", citoyen.Tel); insertCmd.ExecuteNonQuery(); } public static void Remove(Citoyen citoyen) { SqliteConnection db = DataAccess.GetConnection(); SqliteCommand insertCmd = new SqliteCommand("DELETE FROM citoyen WHERE id = $id", db); insertCmd.Parameters.AddWithValue("$id", citoyen.Id); insertCmd.ExecuteNonQuery(); } } }