144 lines
5.0 KiB
C#
144 lines
5.0 KiB
C#
using SQLite;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Threading.Tasks;
|
|
using MauiAppStock.Models;
|
|
|
|
namespace MauiAppStock.Data
|
|
{
|
|
public class Database
|
|
{
|
|
private static SingletonConnection db;
|
|
|
|
public static async Task InitializeAsync()
|
|
{
|
|
if (db == null)
|
|
{
|
|
string dbPath = Path.Combine(FileSystem.AppDataDirectory, "MauiAppStock.db3");
|
|
db = SingletonConnection.GetInstance(dbPath);
|
|
// Création des tables si elles n'existent pas
|
|
await db.CreateTableAsync<Appareil>();
|
|
await db.CreateTableAsync<Piece>();
|
|
await db.CreateTableAsync<AppareilPiece>(); // Table de liaison
|
|
}
|
|
}
|
|
|
|
// CRUD pour Appareil
|
|
public static Task<int> AddAppareilAsync(Appareil appareil)
|
|
{
|
|
return db.InsertAsync(appareil);
|
|
}
|
|
|
|
public static Task<List<Appareil>> GetAppareilsAsync()
|
|
{
|
|
return db.Table<Appareil>().ToListAsync();
|
|
}
|
|
|
|
public static Task<int> UpdateAppareilAsync(Appareil appareil)
|
|
{
|
|
return db.UpdateAsync(appareil);
|
|
}
|
|
|
|
public static Task<int> DeleteAppareilAsync(Appareil appareil)
|
|
{
|
|
return db.DeleteAsync(appareil);
|
|
}
|
|
|
|
// CRUD pour Piece
|
|
public static Task<int> AddPieceAsync(Piece piece)
|
|
{
|
|
return db.InsertAsync(piece);
|
|
}
|
|
|
|
public static Task<List<Piece>> GetPiecesAsync()
|
|
{
|
|
return db.Table<Piece>().ToListAsync();
|
|
}
|
|
|
|
public static Task<int> UpdatePieceAsync(Piece piece)
|
|
{
|
|
return db.UpdateAsync(piece);
|
|
}
|
|
|
|
public static Task<int> DeletePieceAsync(Piece piece)
|
|
{
|
|
return db.DeleteAsync(piece);
|
|
}
|
|
|
|
// Liaison entre Appareil et Piece
|
|
public static Task<int> AddAppareilPieceAsync(AppareilPiece appareilPiece)
|
|
{
|
|
return db.InsertAsync(appareilPiece);
|
|
}
|
|
|
|
// Met à jour une association existante
|
|
public static Task<int> UpdateAppareilPieceAsync(AppareilPiece appareilPiece)
|
|
{
|
|
return db.UpdateAsync(appareilPiece);
|
|
}
|
|
|
|
// Supprime une association existante
|
|
public static Task<int> DeleteAppareilPieceAsync(AppareilPiece appareilPiece)
|
|
{
|
|
return db.DeleteAsync(appareilPiece);
|
|
}
|
|
|
|
// Récupérer toutes les pièces associées à un appareil
|
|
public static async Task<List<Piece>> GetPiecesForAppareilAsync(int appareilId)
|
|
{
|
|
var associations = await db.Table<AppareilPiece>().Where(ap => ap.AppareilId == appareilId).ToListAsync();
|
|
var pieces = new List<Piece>();
|
|
foreach (var assoc in associations)
|
|
{
|
|
var piece = await db.Table<Piece>().Where(p => p.Id == assoc.PieceId).FirstOrDefaultAsync();
|
|
if (piece != null)
|
|
{
|
|
// Assigner le flag de recommandation provenant de la table de liaison
|
|
piece.EstRecommandee = assoc.EstRecommandee;
|
|
pieces.Add(piece);
|
|
}
|
|
}
|
|
// Trier pour que les pièces recommandées apparaissent en premier
|
|
return pieces.OrderByDescending(p => p.EstRecommandee).ToList();
|
|
}
|
|
|
|
// Récupérer uniquement les pièces recommandées pour un appareil
|
|
public static async Task<List<Piece>> GetPiecesRecommandeesForAppareilAsync(int appareilId)
|
|
{
|
|
var associations = await db.Table<AppareilPiece>()
|
|
.Where(ap => ap.AppareilId == appareilId && ap.EstRecommandee)
|
|
.ToListAsync();
|
|
var pieces = new List<Piece>();
|
|
foreach (var assoc in associations)
|
|
{
|
|
var piece = await db.Table<Piece>().Where(p => p.Id == assoc.PieceId).FirstOrDefaultAsync();
|
|
if (piece != null)
|
|
pieces.Add(piece);
|
|
}
|
|
return pieces;
|
|
}
|
|
|
|
public static async Task<List<AppareilPiece>> GetAppareilPiecesForAppareilAsync(int appareilId)
|
|
{
|
|
var associations = await db.Table<AppareilPiece>().Where(ap => ap.AppareilId == appareilId).ToListAsync();
|
|
foreach (var assoc in associations)
|
|
{
|
|
var piece = await db.Table<Piece>().Where(p => p.Id == assoc.PieceId).FirstOrDefaultAsync();
|
|
if (piece != null)
|
|
{
|
|
assoc.NomPiece = piece.Nom;
|
|
assoc.DescriptionPiece = piece.Description;
|
|
}
|
|
}
|
|
return associations.OrderByDescending(a => a.EstRecommandee).ToList();
|
|
}
|
|
|
|
public static async Task<AppareilPiece> GetAppareilPieceAsync(int appareilId, int pieceId)
|
|
{
|
|
return await db.Table<AppareilPiece>()
|
|
.Where(ap => ap.AppareilId == appareilId && ap.PieceId == pieceId)
|
|
.FirstOrDefaultAsync();
|
|
}
|
|
}
|
|
}
|