Hermes/CitoyenDAO.cs
2020-09-07 22:24:37 +02:00

154 lines
7.0 KiB
C#

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<Citoyen> ReadCitoyens(SqliteDataReader reader) {
List<Citoyen> citoyens = new List<Citoyen>();
while (reader.Read())
{
citoyens.Add(ReadCitoyen(reader));
}
return citoyens;
}
public static List<Citoyen> 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<Citoyen> 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<Citoyen> 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<Citoyen> 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<Citoyen> 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<Citoyen> 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<Citoyen> 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();
}
}
}