using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace MaBibli.Api.Data.Migrations
{
///
/// Ajoute le rang manuel de la liste d'envies (du plus désiré au moins désiré).
///
///
/// ⚠️ La colonne seule ne suffit pas : à 0 partout, l'ordre retomberait sur l'Id,
/// c'est-à-dire l'ordre d'ajout, et les listes existantes se réordonneraient sous les yeux
/// de leur propriétaire sans qu'il ait rien demandé. Le remplissage ci-dessous reconduit
/// exactement l'ordre affiché jusqu'ici — auteurs renseignés d'abord, puis par auteur,
/// puis par titre — de sorte que la mise à jour ne se voie pas.
///
/// Le rang est personnel, comme toute la table : la numérotation repart de zéro pour
/// chaque Utilisateur, d'où la corrélation sur cette colonne dans la sous-requête.
///
///
public partial class RangDesEnvies : Migration
{
///
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn(
name: "Rang",
table: "LivresSouhaites",
type: "INTEGER",
nullable: false,
defaultValue: 0);
// Row values (a, b) < (c, d) : SQLite les gère depuis la 3.15, et c'est ce qui
// permet d'exprimer « combien de lignes se classaient avant celle-ci » en une
// seule comparaison lexicographique. L'Id ferme le tri : sans lui, deux envies
// de même auteur et même titre recevraient le même rang.
migrationBuilder.Sql("""
UPDATE LivresSouhaites SET Rang = (
SELECT COUNT(*)
FROM LivresSouhaites AS autre
WHERE autre.Utilisateur = LivresSouhaites.Utilisateur
AND (
CASE WHEN autre.AuteurNormalise = '' THEN 1 ELSE 0 END,
autre.AuteurNormalise,
autre.TitreNormalise,
autre.Id
) < (
CASE WHEN LivresSouhaites.AuteurNormalise = '' THEN 1 ELSE 0 END,
LivresSouhaites.AuteurNormalise,
LivresSouhaites.TitreNormalise,
LivresSouhaites.Id
)
);
""");
}
///
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "Rang",
table: "LivresSouhaites");
}
}
}