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"); } } }