diff --git a/app/src/main/assets/catalog_seed.json b/app/src/main/assets/catalog_seed.json index ab813d8..cbe1cac 100644 --- a/app/src/main/assets/catalog_seed.json +++ b/app/src/main/assets/catalog_seed.json @@ -1,418 +1,3817 @@ -{"version":1,"domains":[ -{"domainId":"grocery","name":"Alimentation & Cuisine","emoji":"🏠","color":"#4CAF50","sortOrder":0,"categories":[ -{"categoryId":"fruits_vegetables","name":"Fruits & Légumes","emoji":"🥗","color":"#8BC34A","sortOrder":0,"items":[ -{"itemId":"pomme","name":"Pomme","emoji":"🍎","aliases":"apple","tags":"fruit"}, -{"itemId":"banane","name":"Banane","emoji":"🍌","aliases":"banana","tags":"fruit"}, -{"itemId":"orange","name":"Orange","emoji":"🍊","tags":"fruit"}, -{"itemId":"citron","name":"Citron","emoji":"🍋","aliases":"lemon","tags":"fruit"}, -{"itemId":"fraise","name":"Fraise","emoji":"🍓","aliases":"strawberry","tags":"fruit"}, -{"itemId":"raisin","name":"Raisin","emoji":"🍇","tags":"fruit"}, -{"itemId":"poire","name":"Poire","emoji":"🍐","tags":"fruit"}, -{"itemId":"mangue","name":"Mangue","emoji":"🥭","tags":"fruit"}, -{"itemId":"ananas","name":"Ananas","emoji":"🍍","tags":"fruit"}, -{"itemId":"kiwi","name":"Kiwi","emoji":"🥝","tags":"fruit"}, -{"itemId":"pasteque","name":"Pastèque","emoji":"🍉","aliases":"watermelon","tags":"fruit"}, -{"itemId":"bleuets","name":"Bleuets","emoji":"🫐","aliases":"myrtilles","tags":"fruit"}, -{"itemId":"tomate","name":"Tomate","emoji":"🍅","aliases":"tomato","tags":"legume"}, -{"itemId":"salade","name":"Salade","emoji":"🥬","aliases":"laitue","tags":"legume"}, -{"itemId":"carotte","name":"Carotte","emoji":"🥕","aliases":"carrot","tags":"legume"}, -{"itemId":"brocoli","name":"Brocoli","emoji":"🥦","tags":"legume"}, -{"itemId":"concombre","name":"Concombre","emoji":"🥒","aliases":"cucumber","tags":"legume"}, -{"itemId":"poivron","name":"Poivron","emoji":"🫑","tags":"legume"}, -{"itemId":"avocat","name":"Avocat","emoji":"🥑","aliases":"avocado","tags":"legume"}, -{"itemId":"oignon","name":"Oignon","emoji":"🧅","aliases":"onion","tags":"legume"}, -{"itemId":"ail","name":"Ail","emoji":"🧄","aliases":"garlic","tags":"legume"}, -{"itemId":"pomme_de_terre","name":"Pomme de terre","emoji":"🥔","aliases":"patate","tags":"legume"}, -{"itemId":"champignon","name":"Champignon","emoji":"🍄","tags":"legume"}, -{"itemId":"epinard","name":"Épinard","emoji":"🥬","aliases":"spinach","tags":"legume"}, -{"itemId":"mais","name":"Maïs","emoji":"🌽","aliases":"corn","tags":"legume"}, -{"itemId":"basilic","name":"Basilic","emoji":"🌿","aliases":"basil","tags":"herbe"}, -{"itemId":"persil","name":"Persil","emoji":"🌿","aliases":"parsley","tags":"herbe"} -]}, -{"categoryId":"bakery","name":"Boulangerie & Pâtisserie","emoji":"🥖","color":"#D4A574","sortOrder":1,"items":[ -{"itemId":"pain_blanc","name":"Pain blanc","emoji":"🍞","tags":"pain"}, -{"itemId":"pain_de_ble","name":"Pain de blé","emoji":"🍞","tags":"pain"}, -{"itemId":"baguette","name":"Baguette","emoji":"🥖","tags":"pain"}, -{"itemId":"croissant","name":"Croissant","emoji":"🥐","tags":"viennoiserie"}, -{"itemId":"muffins","name":"Muffins","emoji":"🧁","tags":"patisserie"}, -{"itemId":"bagels","name":"Bagels","emoji":"🥯","tags":"pain"}, -{"itemId":"tortillas","name":"Tortillas","emoji":"🌯","tags":"pain"}, -{"itemId":"pain_hamburger","name":"Pain hamburger","emoji":"🍔","tags":"pain"}, -{"itemId":"naan","name":"Naan","emoji":"🫓","tags":"pain"}, -{"itemId":"gateau","name":"Gâteau","emoji":"🍰","aliases":"cake","tags":"patisserie"}, -{"itemId":"tarte","name":"Tarte","emoji":"🥧","tags":"patisserie"}, -{"itemId":"beignes","name":"Beignes","emoji":"🍩","aliases":"donuts","tags":"patisserie"} -]}, -{"categoryId":"dairy","name":"Produits Laitiers","emoji":"🥛","color":"#FFF8E1","sortOrder":2,"items":[ -{"itemId":"lait","name":"Lait","emoji":"🥛","aliases":"milk","tags":"laitier"}, -{"itemId":"lait_amande","name":"Lait d'amande","emoji":"🥛","tags":"laitier"}, -{"itemId":"creme","name":"Crème","emoji":"🥛","aliases":"cream","tags":"laitier"}, -{"itemId":"beurre","name":"Beurre","emoji":"🧈","aliases":"butter","tags":"laitier"}, -{"itemId":"margarine","name":"Margarine","emoji":"🧈","tags":"laitier"}, -{"itemId":"fromage_cheddar","name":"Fromage cheddar","emoji":"🧀","tags":"fromage"}, -{"itemId":"fromage_mozzarella","name":"Mozzarella","emoji":"🧀","tags":"fromage"}, -{"itemId":"fromage_brie","name":"Brie","emoji":"🧀","tags":"fromage"}, -{"itemId":"fromage_feta","name":"Feta","emoji":"🧀","tags":"fromage"}, -{"itemId":"yaourt","name":"Yaourt","emoji":"🥣","aliases":"yogurt","tags":"laitier"}, -{"itemId":"yaourt_grec","name":"Yaourt grec","emoji":"🥣","tags":"laitier"}, -{"itemId":"oeufs","name":"Œufs","emoji":"🥚","aliases":"eggs","tags":"laitier"} -]}, -{"categoryId":"meat_fish","name":"Viandes & Poissons","emoji":"🥩","color":"#EF5350","sortOrder":3,"items":[ -{"itemId":"poulet","name":"Poulet","emoji":"🍗","aliases":"chicken","tags":"viande"}, -{"itemId":"boeuf_hache","name":"Bœuf haché","emoji":"🥩","aliases":"ground beef","tags":"viande"}, -{"itemId":"steak","name":"Steak","emoji":"🥩","tags":"viande"}, -{"itemId":"porc","name":"Porc","emoji":"🥓","aliases":"pork","tags":"viande"}, -{"itemId":"bacon","name":"Bacon","emoji":"🥓","tags":"viande"}, -{"itemId":"jambon","name":"Jambon","emoji":"🥓","aliases":"ham","tags":"viande"}, -{"itemId":"saucisses","name":"Saucisses","emoji":"🌭","tags":"viande"}, -{"itemId":"dinde","name":"Dinde","emoji":"🦃","aliases":"turkey","tags":"viande"}, -{"itemId":"saumon","name":"Saumon","emoji":"🐟","aliases":"salmon","tags":"poisson"}, -{"itemId":"thon","name":"Thon","emoji":"🐟","aliases":"tuna","tags":"poisson"}, -{"itemId":"crevettes","name":"Crevettes","emoji":"🦐","aliases":"shrimp","tags":"poisson"}, -{"itemId":"tofu","name":"Tofu","emoji":"🥡","tags":"vegetal"} -]}, -{"categoryId":"pantry","name":"Épicerie & Garde-manger","emoji":"🛒","color":"#FFB74D","sortOrder":4,"items":[ -{"itemId":"pates","name":"Pâtes","emoji":"🍝","aliases":"pasta","tags":"pates"}, -{"itemId":"riz","name":"Riz","emoji":"🍚","aliases":"rice","tags":"feculent"}, -{"itemId":"farine","name":"Farine","emoji":"🌾","aliases":"flour","tags":"boulangerie"}, -{"itemId":"sucre","name":"Sucre","emoji":"🍬","aliases":"sugar","tags":"boulangerie"}, -{"itemId":"huile_olive","name":"Huile d'olive","emoji":"🫒","tags":"huile"}, -{"itemId":"vinaigre","name":"Vinaigre","emoji":"🧴","tags":"condiment"}, -{"itemId":"sauce_tomate","name":"Sauce tomate","emoji":"🍅","tags":"condiment"}, -{"itemId":"ketchup","name":"Ketchup","emoji":"🍅","tags":"condiment"}, -{"itemId":"moutarde","name":"Moutarde","emoji":"🟡","tags":"condiment"}, -{"itemId":"miel","name":"Miel","emoji":"🍯","aliases":"honey","tags":"sucre"}, -{"itemId":"sirop_erable","name":"Sirop d'érable","emoji":"🍯","tags":"sucre"}, -{"itemId":"confiture","name":"Confiture","emoji":"🍓","aliases":"jam","tags":"tartinade"}, -{"itemId":"beurre_arachide","name":"Beurre d'arachide","emoji":"🥜","tags":"tartinade"}, -{"itemId":"cereales","name":"Céréales","emoji":"🥣","tags":"dejeuner"} -]}, -{"categoryId":"spices","name":"Condiments & Épices","emoji":"🌶️","color":"#FF7043","sortOrder":5,"items":[ -{"itemId":"sel","name":"Sel","emoji":"🧂","aliases":"salt","tags":"epice"}, -{"itemId":"poivre","name":"Poivre","emoji":"🧂","aliases":"pepper","tags":"epice"}, -{"itemId":"paprika","name":"Paprika","emoji":"🌶️","tags":"epice"}, -{"itemId":"cumin","name":"Cumin","emoji":"🌶️","tags":"epice"}, -{"itemId":"curry","name":"Curry","emoji":"🌶️","tags":"epice"}, -{"itemId":"cannelle","name":"Cannelle","emoji":"🌶️","aliases":"cinnamon","tags":"epice"}, -{"itemId":"origan","name":"Origan","emoji":"🌿","tags":"herbe"}, -{"itemId":"thym","name":"Thym","emoji":"🌿","tags":"herbe"}, -{"itemId":"romarin","name":"Romarin","emoji":"🌿","tags":"herbe"} -]}, -{"categoryId":"frozen","name":"Surgelés","emoji":"🧊","color":"#90CAF9","sortOrder":6,"items":[ -{"itemId":"pizza_surgelee","name":"Pizza surgelée","emoji":"🍕","tags":"surgele"}, -{"itemId":"frites_surgelees","name":"Frites surgelées","emoji":"🍟","tags":"surgele"}, -{"itemId":"creme_glacee","name":"Crème glacée","emoji":"🍨","aliases":"ice cream","tags":"surgele"}, -{"itemId":"legumes_surgeles","name":"Légumes surgelés","emoji":"🥦","tags":"surgele"}, -{"itemId":"nuggets","name":"Nuggets","emoji":"🍗","tags":"surgele"} -]}, -{"categoryId":"snacks","name":"Snacks & Confiseries","emoji":"🍿","color":"#FFCA28","sortOrder":7,"items":[ -{"itemId":"chips","name":"Chips","emoji":"🥔","aliases":"croustilles","tags":"snack"}, -{"itemId":"popcorn","name":"Pop-corn","emoji":"🍿","tags":"snack"}, -{"itemId":"chocolat","name":"Chocolat","emoji":"🍫","tags":"chocolat"}, -{"itemId":"biscuits","name":"Biscuits","emoji":"🍪","aliases":"cookies","tags":"snack"}, -{"itemId":"bonbons","name":"Bonbons","emoji":"🍬","aliases":"candy","tags":"confiserie"}, -{"itemId":"gomme","name":"Gomme","emoji":"🍬","tags":"confiserie"} -]}, -{"categoryId":"beverages","name":"Boissons","emoji":"🥤","color":"#42A5F5","sortOrder":8,"items":[ -{"itemId":"eau","name":"Eau","emoji":"💧","aliases":"water","tags":"boisson"}, -{"itemId":"jus_orange","name":"Jus d'orange","emoji":"🧃","tags":"jus"}, -{"itemId":"jus_pomme","name":"Jus de pomme","emoji":"🧃","tags":"jus"}, -{"itemId":"coca_cola","name":"Coca-Cola","emoji":"🥤","aliases":"coke","tags":"soda"}, -{"itemId":"cafe","name":"Café","emoji":"☕","aliases":"coffee","tags":"cafe"}, -{"itemId":"the","name":"Thé","emoji":"🍵","aliases":"tea","tags":"the"}, -{"itemId":"biere","name":"Bière","emoji":"🍺","aliases":"beer","tags":"alcool"}, -{"itemId":"vin_rouge","name":"Vin rouge","emoji":"🍷","tags":"alcool"} -]} -]}, -{"domainId":"pharmacy","name":"Santé & Pharmacie","emoji":"💊","color":"#E91E63","sortOrder":1,"categories":[ -{"categoryId":"medications","name":"Médicaments","emoji":"💊","color":"#EF5350","sortOrder":0,"items":[ -{"itemId":"acetaminophene","name":"Acétaminophène","emoji":"💊","aliases":"tylenol","tags":"medicament"}, -{"itemId":"ibuprofene","name":"Ibuprofène","emoji":"💊","aliases":"advil","tags":"medicament"}, -{"itemId":"aspirine","name":"Aspirine","emoji":"💊","tags":"medicament"}, -{"itemId":"sirop_toux","name":"Sirop contre la toux","emoji":"💊","tags":"rhume"}, -{"itemId":"antihistaminique","name":"Antihistaminique","emoji":"💊","aliases":"benadryl","tags":"allergie"}, -{"itemId":"pansements","name":"Pansements","emoji":"🩹","aliases":"band-aid","tags":"premiers_soins"}, -{"itemId":"thermometre","name":"Thermomètre","emoji":"🌡️","tags":"medical"} -]}, -{"categoryId":"hygiene","name":"Hygiène","emoji":"🧴","color":"#26C6DA","sortOrder":1,"items":[ -{"itemId":"savon","name":"Savon","emoji":"🧼","aliases":"soap","tags":"hygiene"}, -{"itemId":"shampooing","name":"Shampooing","emoji":"🧴","aliases":"shampoo","tags":"hygiene"}, -{"itemId":"revitalisant","name":"Revitalisant","emoji":"🧴","aliases":"conditioner","tags":"hygiene"}, -{"itemId":"dentifrice","name":"Dentifrice","emoji":"🦷","aliases":"toothpaste","tags":"hygiene"}, -{"itemId":"brosse_dents","name":"Brosse à dents","emoji":"🪥","tags":"hygiene"}, -{"itemId":"deodorant","name":"Déodorant","emoji":"🧴","tags":"hygiene"}, -{"itemId":"rasoir","name":"Rasoir","emoji":"🪒","tags":"hygiene"}, -{"itemId":"papier_mouchoir","name":"Papier mouchoir","emoji":"🤧","aliases":"kleenex","tags":"hygiene"} -]}, -{"categoryId":"baby_care","name":"Bébé","emoji":"👶","color":"#FFCDD2","sortOrder":2,"items":[ -{"itemId":"couches","name":"Couches","emoji":"👶","aliases":"diapers","tags":"bebe"}, -{"itemId":"lingettes_bebe","name":"Lingettes bébé","emoji":"🧻","tags":"bebe"}, -{"itemId":"lait_maternise","name":"Lait maternisé","emoji":"🍼","aliases":"formula","tags":"bebe"}, -{"itemId":"biberons","name":"Biberons","emoji":"🍼","tags":"bebe"}, -{"itemId":"purees_bebe","name":"Purée bébé","emoji":"🍎","tags":"bebe"} -]}, -{"categoryId":"supplements","name":"Vitamines","emoji":"💪","color":"#FFB300","sortOrder":3,"items":[ -{"itemId":"multivitamines","name":"Multivitamines","emoji":"💊","tags":"vitamine"}, -{"itemId":"vitamine_c","name":"Vitamine C","emoji":"💊","tags":"vitamine"}, -{"itemId":"vitamine_d","name":"Vitamine D","emoji":"💊","tags":"vitamine"}, -{"itemId":"omega_3","name":"Oméga-3","emoji":"💊","tags":"supplement"}, -{"itemId":"probiotiques","name":"Probiotiques","emoji":"💊","tags":"supplement"} -]} -]}, -{"domainId":"hardware","name":"Rénovation & Bricolage","emoji":"🔧","color":"#FF9800","sortOrder":2,"categories":[ -{"categoryId":"tools","name":"Outillage","emoji":"🔨","color":"#FFA726","sortOrder":0,"items":[ -{"itemId":"marteau","name":"Marteau","emoji":"🔨","aliases":"hammer","tags":"outil"}, -{"itemId":"tournevis","name":"Tournevis","emoji":"🔧","aliases":"screwdriver","tags":"outil"}, -{"itemId":"perceuse","name":"Perceuse","emoji":"🔧","aliases":"drill","tags":"outil"}, -{"itemId":"scie","name":"Scie","emoji":"🪚","aliases":"saw","tags":"outil"}, -{"itemId":"niveau","name":"Niveau","emoji":"📏","tags":"outil"}, -{"itemId":"ruban_mesurer","name":"Ruban à mesurer","emoji":"📏","tags":"outil"}, -{"itemId":"pinces","name":"Pinces","emoji":"🔧","aliases":"pliers","tags":"outil"}, -{"itemId":"escabeau","name":"Escabeau","emoji":"🪜","tags":"outil"}, -{"itemId":"boite_outils","name":"Boîte à outils","emoji":"🧰","tags":"outil"} -]}, -{"categoryId":"hardware_supplies","name":"Quincaillerie","emoji":"🔩","color":"#FB8C00","sortOrder":1,"items":[ -{"itemId":"vis","name":"Vis","emoji":"🔩","aliases":"screws","tags":"fixation"}, -{"itemId":"clous","name":"Clous","emoji":"🔩","aliases":"nails","tags":"fixation"}, -{"itemId":"chevilles","name":"Chevilles","emoji":"🔩","tags":"fixation"}, -{"itemId":"colle","name":"Colle","emoji":"🧴","aliases":"glue","tags":"adhesif"}, -{"itemId":"duct_tape","name":"Ruban adhésif","emoji":"🩹","tags":"adhesif"}, -{"itemId":"wd40","name":"WD-40","emoji":"🧴","tags":"lubrifiant"} -]}, -{"categoryId":"paint","name":"Peinture","emoji":"🎨","color":"#AB47BC","sortOrder":2,"items":[ -{"itemId":"peinture","name":"Peinture","emoji":"🎨","aliases":"paint","tags":"peinture"}, -{"itemId":"pinceau","name":"Pinceau","emoji":"🖌️","tags":"peinture"}, -{"itemId":"rouleau","name":"Rouleau","emoji":"🖌️","tags":"peinture"}, -{"itemId":"papier_sable","name":"Papier sablé","emoji":"📄","aliases":"sandpaper","tags":"peinture"} -]}, -{"categoryId":"electrical","name":"Électricité","emoji":"⚡","color":"#FFEE58","sortOrder":3,"items":[ -{"itemId":"ampoule_led","name":"Ampoule LED","emoji":"💡","tags":"eclairage"}, -{"itemId":"prise_electrique","name":"Prise","emoji":"🔌","tags":"electrique"}, -{"itemId":"interrupteur","name":"Interrupteur","emoji":"💡","tags":"electrique"}, -{"itemId":"rallonge","name":"Rallonge","emoji":"🔌","tags":"electrique"} -]}, -{"categoryId":"garden","name":"Jardin","emoji":"🌱","color":"#7CB342","sortOrder":4,"items":[ -{"itemId":"terreau","name":"Terreau","emoji":"🌱","tags":"jardin"}, -{"itemId":"engrais","name":"Engrais","emoji":"🌱","tags":"jardin"}, -{"itemId":"pots_fleurs","name":"Pots de fleurs","emoji":"🪴","tags":"jardin"}, -{"itemId":"boyau_arrosage","name":"Boyau d'arrosage","emoji":"🌱","tags":"jardin"}, -{"itemId":"bbq","name":"BBQ","emoji":"🍖","tags":"exterieur"}, -{"itemId":"propane","name":"Propane","emoji":"🔥","tags":"exterieur"} -]} -]}, -{"domainId":"technology","name":"Technologie","emoji":"💻","color":"#2196F3","sortOrder":3,"categories":[ -{"categoryId":"computers","name":"Informatique","emoji":"💻","color":"#42A5F5","sortOrder":0,"items":[ -{"itemId":"ordi_portable","name":"Ordinateur portable","emoji":"💻","aliases":"laptop","tags":"tech"}, -{"itemId":"clavier","name":"Clavier","emoji":"⌨️","tags":"tech"}, -{"itemId":"souris","name":"Souris","emoji":"🖱️","tags":"tech"}, -{"itemId":"casque_ecoute","name":"Casque d'écoute","emoji":"🎧","tags":"tech"}, -{"itemId":"cle_usb","name":"Clé USB","emoji":"💾","tags":"tech"}, -{"itemId":"cable_hdmi","name":"Câble HDMI","emoji":"🔌","tags":"tech"}, -{"itemId":"imprimante","name":"Imprimante","emoji":"🖨️","tags":"tech"} -]}, -{"categoryId":"phones","name":"Téléphonie","emoji":"📱","color":"#5C6BC0","sortOrder":1,"items":[ -{"itemId":"etui_telephone","name":"Étui de téléphone","emoji":"📱","tags":"tech"}, -{"itemId":"chargeur","name":"Chargeur","emoji":"🔌","tags":"tech"}, -{"itemId":"power_bank","name":"Batterie externe","emoji":"🔋","tags":"tech"}, -{"itemId":"ecouteurs_sans_fil","name":"Écouteurs sans fil","emoji":"🎧","aliases":"airpods","tags":"tech"} -]}, -{"categoryId":"appliances","name":"Électroménager","emoji":"🍳","color":"#78909C","sortOrder":2,"items":[ -{"itemId":"refrigerateur","name":"Réfrigérateur","emoji":"🧊","aliases":"fridge","tags":"electromenager"}, -{"itemId":"micro_ondes","name":"Micro-ondes","emoji":"📡","tags":"electromenager"}, -{"itemId":"cafetiere","name":"Cafetière","emoji":"☕","tags":"electromenager"}, -{"itemId":"bouilloire","name":"Bouilloire","emoji":"☕","tags":"electromenager"}, -{"itemId":"grille_pain","name":"Grille-pain","emoji":"🍞","aliases":"toaster","tags":"electromenager"}, -{"itemId":"aspirateur","name":"Aspirateur","emoji":"🧹","tags":"electromenager"}, -{"itemId":"ventilateur","name":"Ventilateur","emoji":"💨","tags":"electromenager"} -]}, -{"categoryId":"batteries_power","name":"Piles","emoji":"🔋","color":"#FFA726","sortOrder":3,"items":[ -{"itemId":"piles_aa","name":"Piles AA","emoji":"🔋","tags":"pile"}, -{"itemId":"piles_aaa","name":"Piles AAA","emoji":"🔋","tags":"pile"}, -{"itemId":"pile_9v","name":"Pile 9V","emoji":"🔋","tags":"pile"} -]} -]}, -{"domainId":"clothing","name":"Mode","emoji":"👕","color":"#9C27B0","sortOrder":4,"categories":[ -{"categoryId":"men_clothing","name":"Vêtements Homme","emoji":"👔","color":"#5C6BC0","sortOrder":0,"items":[ -{"itemId":"tshirt_homme","name":"T-shirt","emoji":"👕","tags":"mode"}, -{"itemId":"chemise","name":"Chemise","emoji":"👔","tags":"mode"}, -{"itemId":"pantalon_homme","name":"Pantalon","emoji":"👖","tags":"mode"}, -{"itemId":"jeans_homme","name":"Jeans","emoji":"👖","tags":"mode"}, -{"itemId":"chaussettes","name":"Chaussettes","emoji":"🧦","tags":"mode"} -]}, -{"categoryId":"women_clothing","name":"Vêtements Femme","emoji":"👗","color":"#EC407A","sortOrder":1,"items":[ -{"itemId":"robe","name":"Robe","emoji":"👗","tags":"mode"}, -{"itemId":"jupe","name":"Jupe","emoji":"👗","tags":"mode"}, -{"itemId":"blouse","name":"Blouse","emoji":"👚","tags":"mode"}, -{"itemId":"legging","name":"Legging","emoji":"👖","tags":"mode"} -]}, -{"categoryId":"shoes","name":"Chaussures","emoji":"👟","color":"#8D6E63","sortOrder":2,"items":[ -{"itemId":"souliers_course","name":"Souliers de course","emoji":"👟","tags":"chaussure"}, -{"itemId":"bottes_hiver","name":"Bottes d'hiver","emoji":"🥾","tags":"chaussure"}, -{"itemId":"sandales","name":"Sandales","emoji":"👡","tags":"chaussure"} -]}, -{"categoryId":"accessories","name":"Accessoires","emoji":"👜","color":"#AB47BC","sortOrder":3,"items":[ -{"itemId":"sac_main","name":"Sac à main","emoji":"👜","tags":"accessoire"}, -{"itemId":"montre","name":"Montre","emoji":"⌚","tags":"accessoire"}, -{"itemId":"lunettes_soleil","name":"Lunettes de soleil","emoji":"🕶️","tags":"accessoire"}, -{"itemId":"sac_a_dos","name":"Sac à dos","emoji":"🎒","tags":"accessoire"} -]} -]}, -{"domainId":"home","name":"Maison & Décoration","emoji":"🏡","color":"#795548","sortOrder":5,"categories":[ -{"categoryId":"furniture","name":"Meubles","emoji":"🛋️","color":"#A1887F","sortOrder":0,"items":[ -{"itemId":"canape","name":"Canapé","emoji":"🛋️","aliases":"sofa","tags":"meuble"}, -{"itemId":"chaises","name":"Chaises","emoji":"🪑","tags":"meuble"}, -{"itemId":"table_manger","name":"Table à manger","emoji":"🪑","tags":"meuble"}, -{"itemId":"lit","name":"Lit","emoji":"🛏️","tags":"meuble"}, -{"itemId":"matelas","name":"Matelas","emoji":"🛏️","tags":"meuble"} -]}, -{"categoryId":"decor","name":"Décoration","emoji":"🖼️","color":"#FFCA28","sortOrder":1,"items":[ -{"itemId":"cadre_photo","name":"Cadre photo","emoji":"🖼️","tags":"decor"}, -{"itemId":"miroir","name":"Miroir","emoji":"🪞","tags":"decor"}, -{"itemId":"bougie","name":"Bougie","emoji":"🕯️","tags":"decor"}, -{"itemId":"coussin","name":"Coussin","emoji":"🛋️","tags":"decor"}, -{"itemId":"tapis","name":"Tapis","emoji":"🟫","tags":"decor"}, -{"itemId":"rideau","name":"Rideau","emoji":"🪟","tags":"decor"}, -{"itemId":"lampe","name":"Lampe","emoji":"💡","tags":"decor"} -]}, -{"categoryId":"kitchen_tools","name":"Ustensiles","emoji":"🍳","color":"#FF7043","sortOrder":2,"items":[ -{"itemId":"casserole","name":"Casserole","emoji":"🍲","tags":"ustensile"}, -{"itemId":"poele","name":"Poêle","emoji":"🍳","tags":"ustensile"}, -{"itemId":"couteau_chef","name":"Couteau de chef","emoji":"🔪","tags":"ustensile"}, -{"itemId":"planche_decouper","name":"Planche à découper","emoji":"🔪","tags":"ustensile"}, -{"itemId":"spatule","name":"Spatule","emoji":"🍳","tags":"ustensile"} -]}, -{"categoryId":"bedding","name":"Literie & Salle de Bain","emoji":"🛏️","color":"#B39DDB","sortOrder":3,"items":[ -{"itemId":"draps","name":"Draps","emoji":"🛏️","tags":"literie"}, -{"itemId":"oreiller","name":"Oreiller","emoji":"🛏️","tags":"literie"}, -{"itemId":"couette","name":"Couette","emoji":"🛏️","tags":"literie"}, -{"itemId":"serviettes_bain","name":"Serviettes de bain","emoji":"🛁","tags":"salle_de_bain"} -]} -]}, -{"domainId":"pets","name":"Animaux","emoji":"🐾","color":"#8BC34A","sortOrder":6,"categories":[ -{"categoryId":"pet_food","name":"Alimentation","emoji":"🐕","color":"#9CCC65","sortOrder":0,"items":[ -{"itemId":"croquettes_chien","name":"Croquettes chien","emoji":"🐶","tags":"animal"}, -{"itemId":"croquettes_chat","name":"Croquettes chat","emoji":"🐱","tags":"animal"}, -{"itemId":"nourriture_humide_chat","name":"Nourriture humide chat","emoji":"🐈","tags":"animal"}, -{"itemId":"gateries_chien","name":"Gâteries chien","emoji":"🦴","tags":"animal"} -]}, -{"categoryId":"pet_accessories","name":"Accessoires","emoji":"🎾","color":"#AED581","sortOrder":1,"items":[ -{"itemId":"laisse","name":"Laisse","emoji":"🐕","aliases":"leash","tags":"animal"}, -{"itemId":"collier_animal","name":"Collier","emoji":"🐕","tags":"animal"}, -{"itemId":"bol_animal","name":"Bol","emoji":"🥣","tags":"animal"}, -{"itemId":"jouet_animal","name":"Jouet","emoji":"🎾","tags":"animal"}, -{"itemId":"litiere","name":"Litière","emoji":"🐈","tags":"animal"} -]} -]}, -{"domainId":"auto","name":"Auto","emoji":"🚗","color":"#607D8B","sortOrder":7,"categories":[ -{"categoryId":"auto_maintenance","name":"Entretien Auto","emoji":"🔧","color":"#78909C","sortOrder":0,"items":[ -{"itemId":"huile_moteur","name":"Huile moteur","emoji":"🛢️","tags":"auto"}, -{"itemId":"liquide_lave_glace","name":"Liquide lave-glace","emoji":"🧴","tags":"auto"}, -{"itemId":"antigel","name":"Antigel","emoji":"🧴","tags":"auto"}, -{"itemId":"essuie_glace","name":"Essuie-glace","emoji":"🚗","tags":"auto"}, -{"itemId":"grattoir","name":"Grattoir à glace","emoji":"❄️","tags":"auto"} -]}, -{"categoryId":"auto_accessories","name":"Accessoires Auto","emoji":"🚙","color":"#90A4AE","sortOrder":1,"items":[ -{"itemId":"chargeur_auto","name":"Chargeur auto","emoji":"🔌","tags":"auto"}, -{"itemId":"siege_auto_enfant","name":"Siège d'auto enfant","emoji":"👶","tags":"auto"}, -{"itemId":"tapis_auto","name":"Tapis d'auto","emoji":"🚗","tags":"auto"} -]} -]}, -{"domainId":"leisure","name":"Loisirs & Sports","emoji":"⚽","color":"#FF5722","sortOrder":8,"categories":[ -{"categoryId":"sports","name":"Articles de Sport","emoji":"⚽","color":"#FF7043","sortOrder":0,"items":[ -{"itemId":"ballon_soccer","name":"Ballon de soccer","emoji":"⚽","tags":"sport"}, -{"itemId":"tapis_yoga","name":"Tapis de yoga","emoji":"🧘","tags":"sport"}, -{"itemId":"halteres","name":"Haltères","emoji":"🏋️","tags":"sport"}, -{"itemId":"bouteille_sport","name":"Bouteille de sport","emoji":"🍶","tags":"sport"}, -{"itemId":"corde_a_sauter","name":"Corde à sauter","emoji":"🤸","tags":"sport"} -]}, -{"categoryId":"camping","name":"Camping","emoji":"⛺","color":"#8BC34A","sortOrder":1,"items":[ -{"itemId":"tente","name":"Tente","emoji":"⛺","tags":"camping"}, -{"itemId":"sac_couchage","name":"Sac de couchage","emoji":"🛌","tags":"camping"}, -{"itemId":"lampe_frontale","name":"Lampe frontale","emoji":"🔦","tags":"camping"}, -{"itemId":"glaciere","name":"Glacière","emoji":"🧊","aliases":"cooler","tags":"camping"}, -{"itemId":"insectifuge","name":"Insectifuge","emoji":"🦟","tags":"camping"} -]}, -{"categoryId":"books_stationery","name":"Livres & Papeterie","emoji":"📚","color":"#7986CB","sortOrder":2,"items":[ -{"itemId":"livre","name":"Livre","emoji":"📚","aliases":"book","tags":"papeterie"}, -{"itemId":"cahier","name":"Cahier","emoji":"📓","aliases":"notebook","tags":"papeterie"}, -{"itemId":"stylo","name":"Stylo","emoji":"🖊️","aliases":"pen","tags":"papeterie"}, -{"itemId":"crayon","name":"Crayon","emoji":"✏️","aliases":"pencil","tags":"papeterie"}, -{"itemId":"surligneur","name":"Surligneur","emoji":"🖍️","tags":"papeterie"}, -{"itemId":"calculatrice","name":"Calculatrice","emoji":"🔢","tags":"papeterie"} -]} -]}, -{"domainId":"cleaning","name":"Entretien & Ménage","emoji":"🧹","color":"#00BCD4","sortOrder":9,"categories":[ -{"categoryId":"cleaning_products","name":"Produits Ménagers","emoji":"🧴","color":"#26C6DA","sortOrder":0,"items":[ -{"itemId":"nettoyant_tout_usage","name":"Nettoyant tout usage","emoji":"🧴","tags":"menage"}, -{"itemId":"nettoyant_vitres","name":"Nettoyant à vitres","emoji":"🧴","aliases":"windex","tags":"menage"}, -{"itemId":"javellisant","name":"Javellisant","emoji":"🧴","aliases":"javel","tags":"menage"}, -{"itemId":"desinfectant","name":"Désinfectant","emoji":"🧴","aliases":"lysol","tags":"menage"}, -{"itemId":"nettoyant_plancher","name":"Nettoyant plancher","emoji":"🧴","tags":"menage"}, -{"itemId":"deboucheur","name":"Déboucheur","emoji":"🚿","tags":"menage"} -]}, -{"categoryId":"laundry","name":"Lessive","emoji":"👕","color":"#80DEEA","sortOrder":1,"items":[ -{"itemId":"detergent","name":"Détergent à lessive","emoji":"🧺","aliases":"laundry detergent","tags":"lessive"}, -{"itemId":"assouplissant","name":"Assouplissant","emoji":"🧺","aliases":"fabric softener","tags":"lessive"}, -{"itemId":"feuilles_secheuse","name":"Feuilles pour sécheuse","emoji":"🧺","tags":"lessive"}, -{"itemId":"detachant","name":"Détachant","emoji":"🧴","tags":"lessive"} -]}, -{"categoryId":"disposables","name":"Articles Jetables","emoji":"🧻","color":"#4DD0E1","sortOrder":2,"items":[ -{"itemId":"papier_toilette","name":"Papier toilette","emoji":"🧻","aliases":"toilet paper","tags":"jetable"}, -{"itemId":"essuie_tout","name":"Essuie-tout","emoji":"🧻","aliases":"paper towel","tags":"jetable"}, -{"itemId":"sacs_poubelle","name":"Sacs poubelle","emoji":"🗑️","aliases":"trash bags","tags":"jetable"}, -{"itemId":"sacs_ziploc","name":"Sacs Ziploc","emoji":"🗑️","tags":"jetable"}, -{"itemId":"papier_aluminium","name":"Papier aluminium","emoji":"📦","aliases":"aluminum foil","tags":"jetable"}, -{"itemId":"pellicule_plastique","name":"Pellicule plastique","emoji":"📦","aliases":"plastic wrap","tags":"jetable"}, -{"itemId":"papier_parchemin","name":"Papier parchemin","emoji":"📦","tags":"jetable"} -]}, -{"categoryId":"cleaning_tools","name":"Outils de Ménage","emoji":"🧹","color":"#26C6DA","sortOrder":3,"items":[ -{"itemId":"balai","name":"Balai","emoji":"🧹","aliases":"broom","tags":"menage"}, -{"itemId":"vadrouille","name":"Vadrouille","emoji":"🧹","aliases":"mop|moppe","tags":"menage"}, -{"itemId":"seau","name":"Seau","emoji":"🪣","aliases":"bucket","tags":"menage"}, -{"itemId":"eponges","name":"Éponges","emoji":"🧽","aliases":"sponges","tags":"menage"}, -{"itemId":"chiffons","name":"Chiffons","emoji":"🧽","aliases":"rags","tags":"menage"}, -{"itemId":"gants_menage","name":"Gants de ménage","emoji":"🧤","tags":"menage"} -]} -]}, -{"domainId":"gifts_events","name":"Fêtes & Cadeaux","emoji":"🎁","color":"#E91E63","sortOrder":10,"categories":[ -{"categoryId":"party","name":"Articles de Fête","emoji":"🎉","color":"#F06292","sortOrder":0,"items":[ -{"itemId":"ballons","name":"Ballons","emoji":"🎈","aliases":"balloons","tags":"fete"}, -{"itemId":"banniere","name":"Bannière","emoji":"🎊","tags":"fete"}, -{"itemId":"bougies_anniversaire","name":"Bougies d'anniversaire","emoji":"🕯️","tags":"fete"}, -{"itemId":"chapeaux_fete","name":"Chapeaux de fête","emoji":"🎉","tags":"fete"}, -{"itemId":"nappes_fete","name":"Nappes de fête","emoji":"🎉","tags":"fete"} -]}, -{"categoryId":"gift_wrap","name":"Emballage Cadeaux","emoji":"🎀","color":"#EC407A","sortOrder":1,"items":[ -{"itemId":"papier_emballage","name":"Papier d'emballage","emoji":"🎁","tags":"cadeau"}, -{"itemId":"sac_cadeau","name":"Sac cadeau","emoji":"🎁","tags":"cadeau"}, -{"itemId":"ruban","name":"Ruban","emoji":"🎀","tags":"cadeau"}, -{"itemId":"carte_voeux","name":"Carte de vœux","emoji":"💌","aliases":"greeting card","tags":"cadeau"} -]}, -{"categoryId":"seasonal","name":"Articles Saisonniers","emoji":"🎄","color":"#EF5350","sortOrder":2,"items":[ -{"itemId":"sapin_noel","name":"Sapin de Noël","emoji":"🎄","tags":"saisonnier"}, -{"itemId":"boules_noel","name":"Boules de Noël","emoji":"🎄","tags":"saisonnier"}, -{"itemId":"lumieres_noel","name":"Lumières de Noël","emoji":"💡","tags":"saisonnier"}, -{"itemId":"sel_deglacer","name":"Sel à déglacer","emoji":"❄️","tags":"saisonnier"}, -{"itemId":"pelle_neige","name":"Pelle à neige","emoji":"🪚","aliases":"snow shovel","tags":"saisonnier"} -]} -]}, -{"domainId":"office_school","name":"Bureau & École","emoji":"📎","color":"#3F51B5","sortOrder":11,"categories":[ -{"categoryId":"school_supplies","name":"Fournitures Scolaires","emoji":"🎒","color":"#5C6BC0","sortOrder":0,"items":[ -{"itemId":"sac_ecole","name":"Sac d'école","emoji":"🎒","aliases":"backpack","tags":"ecole"}, -{"itemId":"etui_crayons","name":"Étui à crayons","emoji":"✏️","tags":"ecole"}, -{"itemId":"cartable","name":"Cartable","emoji":"📁","tags":"ecole"}, -{"itemId":"feuilles_mobiles","name":"Feuilles mobiles","emoji":"📄","tags":"ecole"}, -{"itemId":"crayons_couleur","name":"Crayons de couleur","emoji":"🖍️","tags":"ecole"}, -{"itemId":"baton_colle","name":"Bâton de colle","emoji":"🧴","aliases":"glue stick","tags":"ecole"}, -{"itemId":"regle","name":"Règle","emoji":"📏","aliases":"ruler","tags":"ecole"} -]}, -{"categoryId":"office","name":"Fournitures Bureau","emoji":"🖨️","color":"#7986CB","sortOrder":1,"items":[ -{"itemId":"papier_imprimante","name":"Papier d'imprimante","emoji":"📄","tags":"bureau"}, -{"itemId":"enveloppes","name":"Enveloppes","emoji":"✉️","tags":"bureau"}, -{"itemId":"agrafeuse","name":"Agrafeuse","emoji":"📎","aliases":"stapler","tags":"bureau"}, -{"itemId":"trombones","name":"Trombones","emoji":"📎","aliases":"paper clips","tags":"bureau"}, -{"itemId":"post_it","name":"Post-it","emoji":"📝","tags":"bureau"}, -{"itemId":"agenda","name":"Agenda","emoji":"📅","aliases":"planner","tags":"bureau"} -]} -]} -]} +{ +"version":3, +"domains":[ +{ +"domainId":"grocery", +"name":"Alimentation & Cuisine", +"emoji":"🏠", +"color":"#4CAF50", +"sortOrder":0, +"categories":[ +{ +"categoryId":"fruits_vegetables", +"name":"Fruits & Légumes", +"emoji":"🥗", +"color":"#8BC34A", +"sortOrder":0, +"items":[ +{ +"itemId":"pomme", +"name":"Pomme", +"emoji":"🍎", +"aliases":"apple|apples|pommes", +"tags":"fruit" +}, +{ +"itemId":"banane", +"name":"Banane", +"emoji":"🍌", +"aliases":"banana|bananas", +"tags":"fruit" +}, +{ +"itemId":"orange", +"name":"Orange", +"emoji":"🍊", +"aliases":"oranges", +"tags":"fruit" +}, +{ +"itemId":"citron", +"name":"Citron", +"emoji":"🍋", +"aliases":"lemon", +"tags":"fruit" +}, +{ +"itemId":"fraise", +"name":"Fraise", +"emoji":"🍓", +"aliases":"strawberry|strawberries", +"tags":"fruit" +}, +{ +"itemId":"raisin", +"name":"Raisin", +"emoji":"🍇", +"aliases":"grapes", +"tags":"fruit" +}, +{ +"itemId":"poire", +"name":"Poire", +"emoji":"🍐", +"aliases":"pear|pears|poires", +"tags":"fruit" +}, +{ +"itemId":"tomate", +"name":"Tomate", +"emoji":"🍅", +"aliases":"tomatoes", +"tags":"legume" +}, +{ +"itemId":"salade", +"name":"Salade", +"emoji":"🥬", +"aliases":"lettuce|salad", +"tags":"legume" +}, +{ +"itemId":"carotte", +"name":"Carotte", +"emoji":"🥕", +"aliases":"carrots|carrotte", +"tags":"legume" +}, +{ +"itemId":"brocoli", +"name":"Brocoli", +"emoji":"🥦", +"aliases":"broccoli", +"tags":"legume" +}, +{ +"itemId":"concombre", +"name":"Concombre", +"emoji":"🥒", +"aliases":"cucumber", +"tags":"legume" +}, +{ +"itemId":"poivron", +"name":"Poivron", +"emoji":"🫑", +"aliases":"bell pepper|bell peppers", +"tags":"legume" +}, +{ +"itemId":"avocat", +"name":"Avocat", +"emoji":"🥑", +"aliases":"avocado", +"tags":"legume" +}, +{ +"itemId":"oignon", +"name":"Oignon", +"emoji":"🧅", +"aliases":"onions", +"tags":"legume" +}, +{ +"itemId":"ail", +"name":"Ail", +"emoji":"🧄", +"aliases":"garlic", +"tags":"legume" +}, +{ +"itemId":"pomme_de_terre", +"name":"Pomme de terre", +"emoji":"🥔", +"aliases":"patate|patates|potatoes", +"tags":"legume" +}, +{ +"itemId":"champignon", +"name":"Champignon", +"emoji":"🍄", +"aliases":"mushrooms|champignons", +"tags":"legume" +}, +{ +"itemId":"epinard", +"name":"Épinard", +"emoji":"🥬", +"aliases":"spinach", +"tags":"legume" +}, +{ +"itemId":"ananas", +"name":"Ananas", +"emoji":"🍍", +"aliases":"pineapple", +"tags":"fruit" +}, +{ +"itemId":"peche", +"name":"Pêche", +"emoji":"🍑", +"aliases":"peach", +"tags":"fruit" +}, +{ +"itemId":"cerise", +"name":"Cerise", +"emoji":"🍒", +"aliases":"cherries", +"tags":"fruit" +}, +{ +"itemId":"kiwi", +"name":"Kiwi", +"emoji":"🥝", +"aliases":"kiwi fruit|kiwis", +"tags":"fruit" +}, +{ +"itemId":"mangue", +"name":"Mangue", +"emoji":"🥭", +"aliases":"mangoes", +"tags":"fruit" +}, +{ +"itemId":"melon", +"name":"Melon", +"emoji":"🍈", +"aliases":"melon", +"tags":"fruit" +}, +{ +"itemId":"pasteque", +"name":"Pastèque", +"emoji":"🍉", +"aliases":"watermelon", +"tags":"fruit" +}, +{ +"itemId":"noix_de_coco", +"name":"Noix de coco", +"emoji":"🥥", +"aliases":"coconut", +"tags":"fruit" +}, +{ +"itemId":"aubergine", +"name":"Aubergine", +"emoji":"🍆", +"aliases":"eggplant", +"tags":"legume" +}, +{ +"itemId":"mais", +"name":"Maïs", +"emoji":"🌽", +"aliases":"sweet corn|corncobs|corn cobs", +"tags":"legume" +}, +{ +"itemId":"piment", +"name":"Piment", +"emoji":"🌶️", +"aliases":"chillies|chili|piment jaune", +"tags":"legume" +}, +{ +"itemId":"courgette", +"name":"Courgette", +"emoji":"🥒", +"aliases":"zucchini", +"tags":"legume" +}, +{ +"itemId":"chou_fleur", +"name":"Chou-fleur", +"emoji":"🥦", +"aliases":"cauliflower", +"tags":"legume" +}, +{ +"itemId":"chou", +"name":"Chou", +"emoji":"🥬", +"aliases":"cabbage", +"tags":"legume" +}, +{ +"itemId":"navet", +"name":"Navet", +"emoji":"🥕", +"aliases":"turnip", +"tags":"legume" +}, +{ +"itemId":"radis", +"name":"Radis", +"emoji":"🥕", +"aliases":"radish", +"tags":"legume" +}, +{ +"itemId":"poireau", +"name":"Poireau", +"emoji":"🥬", +"aliases":"leek|leeks", +"tags":"legume" +}, +{ +"itemId":"celeri", +"name":"Céleri", +"emoji":"🥬", +"aliases":"celery", +"tags":"legume" +}, +{ +"itemId":"haricots_verts", +"name":"Haricots verts", +"emoji":"🫛", +"aliases":"green beans", +"tags":"legume" +}, +{ +"itemId":"petits_pois", +"name":"Petits pois", +"emoji":"🫛", +"aliases":"peas", +"tags":"legume" +}, +{ +"itemId":"basilic", +"name":"Basilic", +"emoji":"🌿", +"aliases":"basil", +"tags":"herbe" +}, +{ +"itemId":"persil", +"name":"Persil", +"emoji":"🌿", +"aliases":"parsley", +"tags":"herbe" +}, +{ +"itemId":"menthe", +"name":"Menthe", +"emoji":"🌿", +"aliases":"mint", +"tags":"herbe" +}, +{ +"itemId":"framboises", +"name":"Framboises", +"emoji":"🍓", +"aliases":"raspberries", +"tags":"fruit" +}, +{ +"itemId":"mures", +"name":"Mûres", +"emoji":"🫐", +"aliases":"blackberries", +"tags":"fruit" +}, +{ +"itemId":"abricot", +"name":"Abricot", +"emoji":"🍑", +"aliases":"apricot", +"tags":"fruit" +}, +{ +"itemId":"prune", +"name":"Prune", +"emoji":"🍑", +"aliases":"prunes", +"tags":"fruit" +}, +{ +"itemId":"figue", +"name":"Figue", +"emoji":"🍇", +"aliases":"figs", +"tags":"fruit" +}, +{ +"itemId":"datte", +"name":"Datte", +"emoji":"🍇", +"aliases":"dates", +"tags":"fruit" +}, +{ +"itemId":"grenade", +"name":"Grenade", +"emoji":"🍎", +"aliases":"pomegranate|pomme grenade", +"tags":"fruit" +}, +{ +"itemId":"acai", +"name":"Açaï", +"emoji":"🫐", +"aliases":"acai|açaí|açaí berries|acai berries", +"tags":"fruit" +}, +{ +"itemId":"artichaut", +"name":"Artichaut", +"emoji":"🥬", +"aliases":"artichokes", +"tags":"legume" +}, +{ +"itemId":"roquette", +"name":"Roquette", +"emoji":"🥬", +"aliases":"arugula", +"tags":"legume" +}, +{ +"itemId":"asperge", +"name":"Asperge", +"emoji":"🥬", +"aliases":"asparagus", +"tags":"legume" +}, +{ +"itemId":"betterave", +"name":"Betterave", +"emoji":"🫐", +"aliases":"beetroot|betterave", +"tags":"legume" +}, +{ +"itemId":"myrtilles", +"name":"Myrtilles", +"emoji":"🫐", +"aliases":"blueberries|bleuets", +"tags":"fruit" +}, +{ +"itemId":"bok_choy", +"name":"Bok choy", +"emoji":"🥬", +"aliases":"chinese cabbage", +"tags":"legume" +}, +{ +"itemId":"chou_de_bruxelles", +"name":"Chou de Bruxelles", +"emoji":"🥬", +"aliases":"brussels sprouts|chou bruxelles", +"tags":"legume" +}, +{ +"itemId":"courge_butternut", +"name":"Courge butternut", +"emoji":"🎃", +"aliases":"butternut pumpkin|butternut squash", +"tags":"legume" +}, +{ +"itemId":"chou_frise", +"name":"Chou frisé", +"emoji":"🥬", +"aliases":"kale|chard|chou frisé", +"tags":"legume" +}, +{ +"itemId":"poiree", +"name":"Poirée", +"emoji":"🥬", +"aliases":"swiss chard", +"tags":"legume" +}, +{ +"itemId":"tomate_cerise", +"name":"Tomate cerise", +"emoji":"🍅", +"aliases":"cherry tomatoes", +"tags":"legume" +}, +{ +"itemId":"chataigne", +"name":"Châtaigne", +"emoji":"🌰", +"aliases":"chestnuts", +"tags":"legume" +}, +{ +"itemId":"chicoree", +"name":"Chicorée", +"emoji":"🥬", +"aliases":"chicory", +"tags":"legume" +}, +{ +"itemId":"ciboulette", +"name":"Ciboulette", +"emoji":"🌿", +"aliases":"chives", +"tags":"herbe" +}, +{ +"itemId":"coriandre", +"name":"Coriandre", +"emoji":"🌿", +"aliases":"cilantro", +"tags":"herbe" +}, +{ +"itemId":"clementine", +"name":"Clémentine", +"emoji":"🍊", +"aliases":"clementine|clementines", +"tags":"fruit" +}, +{ +"itemId":"canneberge", +"name":"Canneberge", +"emoji":"🫐", +"aliases":"cranberries", +"tags":"fruit" +}, +{ +"itemId":"cresson", +"name":"Cresson", +"emoji":"🥬", +"aliases":"cress", +"tags":"legume" +}, +{ +"itemId":"crudites", +"name":"Crudités", +"emoji":"🥗", +"aliases":"crudites", +"tags":"legume" +}, +{ +"itemId":"groseille", +"name":"Groseille", +"emoji":"🍇", +"aliases":"currants", +"tags":"fruit" +}, +{ +"itemId":"aneth", +"name":"Aneth", +"emoji":"🌿", +"aliases":"dill", +"tags":"herbe" +}, +{ +"itemId":"pamplemousse", +"name":"Pamplemousse", +"emoji":"🍊", +"aliases":"grapefruit", +"tags":"fruit" +}, +{ +"itemId":"citronnelle", +"name":"Citronnelle", +"emoji":"🌿", +"aliases":"lemongrass", +"tags":"herbe" +}, +{ +"itemId":"mirabelle", +"name":"Mirabelle", +"emoji":"🍑", +"aliases":"mirabelles", +"tags":"fruit" +}, +{ +"itemId":"pitaya", +"name":"Pitaya", +"emoji":"🐉", +"aliases":"dragon fruit|fruit dragon", +"tags":"fruit" +}, +{ +"itemId":"echalote", +"name":"Échalote", +"emoji":"🧅", +"aliases":"shallots|échalotes", +"tags":"legume" +}, +{ +"itemId":"edamame", +"name":"Edamame", +"emoji":"🫛", +"tags":"legume" +}, +{ +"itemId":"fenouil", +"name":"Fenouil", +"emoji":"🥬", +"aliases":"fennel", +"tags":"legume" +}, +{ +"itemId":"feve", +"name":"Fève", +"emoji":"🫛", +"aliases":"fèves|fava bean|broad bean", +"tags":"legume" +}, +{ +"itemId":"feve_verte", +"name":"Fève verte", +"emoji":"🫛", +"aliases":"fèves vertes", +"tags":"legume" +}, +{ +"itemId":"graines_de_lin", +"name":"Graines de lin", +"emoji":"🌾", +"aliases":"flaxseed|linseed", +"tags":"legume" +}, +{ +"itemId":"fruit", +"name":"Fruit", +"emoji":"🍎", +"aliases":"fruits", +"tags":"fruit" +}, +{ +"itemId":"plateau_fruits", +"name":"Plateau fruits", +"emoji":"🍎", +"aliases":"fruit platter", +"tags":"fruit" +}, +{ +"itemId":"plateau_legumes", +"name":"Plateau légumes", +"emoji":"🥗", +"aliases":"vegetable platter", +"tags":"legume" +}, +{ +"itemId":"baies_de_goji", +"name":"Baies de goji", +"emoji":"🍇", +"aliases":"goji berries", +"tags":"fruit" +}, +{ +"itemId":"groseille_a_maquereau", +"name":"Groseille à maquereau", +"emoji":"🍇", +"aliases":"gooseberries", +"tags":"fruit" +}, +{ +"itemId":"goyave", +"name":"Goyave", +"emoji":"🥭", +"aliases":"guava", +"tags":"fruit" +}, +{ +"itemId":"citrouille_halloween", +"name":"Citrouille Halloween", +"emoji":"🎃", +"aliases":"halloween pumpkin", +"tags":"legume" +}, +{ +"itemId":"herbes", +"name":"Herbes", +"emoji":"🌿", +"aliases":"herbs", +"tags":"herbe" +}, +{ +"itemId":"citrouille_hokkaido", +"name":"Citrouille Hokkaido", +"emoji":"🎃", +"aliases":"hokkaido pumpkin", +"tags":"legume" +}, +{ +"itemId":"melon_vert", +"name":"Melon vert", +"emoji":"🍈", +"aliases":"honeydew melon", +"tags":"fruit" +}, +{ +"itemId":"mache", +"name":"Mâche", +"emoji":"🥬", +"aliases":"lamb's lettuce|corn salad", +"tags":"legume" +}, +{ +"itemId":"citron_vert", +"name":"Citron vert", +"emoji":"🍋", +"aliases":"lime|limes", +"tags":"fruit" +}, +{ +"itemId":"litchi", +"name":"Litchi", +"emoji":"🥭", +"aliases":"lychee|lychees", +"tags":"fruit" +}, +{ +"itemId":"mandarine", +"name":"Mandarine", +"emoji":"🍊", +"aliases":"mandarins|mandarin", +"tags":"fruit" +}, +{ +"itemId":"marjolaine", +"name":"Marjolaine", +"emoji":"🌿", +"aliases":"marjoram", +"tags":"herbe" +}, +{ +"itemId":"nectarine", +"name":"Nectarine", +"emoji":"🍑", +"aliases":"nectarines", +"tags":"fruit" +}, +{ +"itemId":"oignon_rouge", +"name":"Oignon rouge", +"emoji":"🧅", +"aliases":"red onion", +"tags":"legume" +}, +{ +"itemId":"oignon_vert", +"name":"Oignon vert", +"emoji":"🧅", +"aliases":"green onion|spring onion|scallions", +"tags":"legume" +}, +{ +"itemId":"olive", +"name":"Olive", +"emoji":"🫒", +"aliases":"olives", +"tags":"legume" +}, +{ +"itemId":"papaye", +"name":"Papaye", +"emoji":"🥭", +"aliases":"papaya", +"tags":"fruit" +}, +{ +"itemId":"panais", +"name":"Panais", +"emoji":"🥕", +"aliases":"parsnips", +"tags":"legume" +}, +{ +"itemId":"fruit_de_la_passion", +"name":"Fruit de la passion", +"emoji":"🍇", +"aliases":"passion fruit", +"tags":"fruit" +}, +{ +"itemId":"patate_douce", +"name":"Patate douce", +"emoji":"🍠", +"aliases":"sweet potatoes|patate douce", +"tags":"legume" +}, +{ +"itemId":"patates_parisiennes", +"name":"Patates parisiennes", +"emoji":"🥔", +"aliases":"patates parisienne", +"tags":"legume" +}, +{ +"itemId":"pousse_de_pois", +"name":"Pousse de pois", +"emoji":"🌱", +"aliases":"pea eggplant", +"tags":"legume" +}, +{ +"itemId":"pourpier", +"name":"Pourpier", +"emoji":"🥬", +"aliases":"purslane", +"tags":"legume" +}, +{ +"itemId":"coing", +"name":"Coing", +"emoji":"🍏", +"aliases":"quinces", +"tags":"fruit" +}, +{ +"itemId":"chou_rouge", +"name":"Chou rouge", +"emoji":"🥬", +"aliases":"red cabbage", +"tags":"legume" +}, +{ +"itemId":"rhubarbe", +"name":"Rhubarbe", +"emoji":"🥬", +"aliases":"rhubarb", +"tags":"legume" +}, +{ +"itemId":"sauge", +"name":"Sauge", +"emoji":"🌿", +"aliases":"sage", +"tags":"herbe" +}, +{ +"itemId":"salade_au_chou", +"name":"Salade au chou", +"emoji":"🥗", +"aliases":"coleslaw", +"tags":"legume" +}, +{ +"itemId":"chou_de_milan", +"name":"Chou de Milan", +"emoji":"🥬", +"aliases":"savoy cabbage", +"tags":"legume" +}, +{ +"itemId":"courge", +"name":"Courge", +"emoji":"🎃", +"aliases":"squash", +"tags":"legume" +}, +{ +"itemId":"carambole", +"name":"Carambole", +"emoji":"⭐", +"aliases":"star fruit", +"tags":"fruit" +}, +{ +"itemId":"tomates_sechees", +"name":"Tomates séchées", +"emoji":"🍅", +"aliases":"sun-dried tomatoes", +"tags":"legume" +}, +{ +"itemId":"basilic_thai", +"name":"Basilic thaï", +"emoji":"🌿", +"aliases":"thai basil", +"tags":"herbe" +}, +{ +"itemId":"thym", +"name":"Thym", +"emoji":"🌿", +"aliases":"thyme", +"tags":"herbe" +}, +{ +"itemId":"tomates_savoura", +"name":"Tomates Savoura", +"emoji":"🍅", +"aliases":"savoura tomatoes", +"tags":"legume" +}, +{ +"itemId":"herbe_de_ble", +"name":"Herbe de blé", +"emoji":"🌾", +"aliases":"wheatgrass", +"tags":"herbe" +}, +{ +"itemId":"salsifis_noir", +"name":"Salsifis noir", +"emoji":"🥔", +"aliases":"black salsify", +"tags":"legume" +}, +{ +"itemId":"girolles", +"name":"Girolles", +"emoji":"🍄", +"aliases":"chanterelles", +"tags":"legume" +}, +{ +"itemId":"orange_sanguine", +"name":"Orange sanguine", +"emoji":"🍊", +"aliases":"blood orange", +"tags":"fruit" +}, +{ +"itemId":"baies", +"name":"Baies", +"emoji":"🫐", +"aliases":"berries", +"tags":"fruit" +} +] +}, +{ +"categoryId":"bakery", +"name":"Boulangerie & Pâtisserie", +"emoji":"🥖", +"color":"#D4A574", +"sortOrder":1, +"items":[ +{ +"itemId":"pain_blanc", +"name":"Pain blanc", +"emoji":"🍞", +"tags":"pain" +}, +{ +"itemId":"pain_de_ble", +"name":"Pain de blé", +"emoji":"🍞", +"tags":"pain" +}, +{ +"itemId":"baguette", +"name":"Baguette", +"emoji":"🥖", +"tags":"pain" +}, +{ +"itemId":"croissant", +"name":"Croissant", +"emoji":"🥐", +"tags":"viennoiserie" +}, +{ +"itemId":"muffins", +"name":"Muffins", +"emoji":"🧁", +"tags":"patisserie" +}, +{ +"itemId":"bagels", +"name":"Bagels", +"emoji":"🥯", +"tags":"pain" +}, +{ +"itemId":"tortillas", +"name":"Tortillas", +"emoji":"🌯", +"tags":"pain" +}, +{ +"itemId":"pain_hamburger", +"name":"Pain hamburger", +"emoji":"🍔", +"tags":"pain" +}, +{ +"itemId":"naan", +"name":"Naan", +"emoji":"🫓", +"tags":"pain" +}, +{ +"itemId":"gateau", +"name":"Gâteau", +"emoji":"🍰", +"aliases":"cake", +"tags":"patisserie" +}, +{ +"itemId":"tarte", +"name":"Tarte", +"emoji":"🥧", +"tags":"patisserie" +}, +{ +"itemId":"beignes", +"name":"Beignes", +"emoji":"🍩", +"aliases":"donuts", +"tags":"patisserie" +}, +{ +"itemId":"bagel_briana", +"name":"Bagel briana", +"emoji":"🥯", +"tags":"bagel" +}, +{ +"itemId":"biscuits_breton_sans_gluten", +"name":"Biscuits breton sans gluten", +"emoji":"🍪", +"tags":"biscuit" +}, +{ +"itemId":"biscuits_feuille_derable", +"name":"Biscuits Feuille D'Érable", +"emoji":"🍁", +"tags":"biscuit" +}, +{ +"itemId":"biscuits_sans_gluten", +"name":"Biscuits sans gluten", +"emoji":"🍪", +"tags":"biscuit" +}, +{ +"itemId":"biscuits_swiss", +"name":"Biscuits swiss", +"emoji":"🍪", +"tags":"biscuit" +}, +{ +"itemId":"bread", +"name":"Bread", +"emoji":"🍞", +"tags":"pain" +}, +{ +"itemId":"buns", +"name":"Buns", +"emoji":"🍞", +"tags":"pain" +}, +{ +"itemId":"crispbread", +"name":"Crispbread", +"emoji":"🍘", +"tags":"biscuit" +}, +{ +"itemId":"croute_a_tarte", +"name":"Croûte à tarte", +"emoji":"🥧", +"tags":"patisserie" +}, +{ +"itemId":"dinner_rolls", +"name":"Dinner Rolls", +"emoji":"🍞", +"tags":"pain" +}, +{ +"itemId":"donuts", +"name":"Donuts", +"emoji":"🍩", +"tags":"patisserie" +}, +{ +"itemId":"fond_de_tarte", +"name":"Fond de tarte", +"emoji":"🥧", +"tags":"patisserie" +}, +{ +"itemId":"galette_tortilla", +"name":"Galette tortilla", +"emoji":"🌯", +"tags":"pain" +}, +{ +"itemId":"gateau_mille_feuilles", +"name":"Gâteau mille feuilles", +"emoji":"🍰", +"tags":"patisserie" +}, +{ +"itemId":"gaufres", +"name":"Gaufres", +"emoji":"🧇", +"tags":"patisserie" +}, +{ +"itemId":"muffins_anglais", +"name":"Muffins Anglais", +"emoji":"🥯", +"tags":"pain" +}, +{ +"itemId":"pain_baguette", +"name":"Pain Baguette", +"emoji":"🥖", +"tags":"pain" +}, +{ +"itemId":"pain_blanc_sans_lactose", +"name":"Pain Blanc Sans Lactose", +"emoji":"🍞", +"tags":"pain" +}, +{ +"itemId":"pain_bon_matin", +"name":"Pain Bon Matin", +"emoji":"🍞", +"tags":"pain" +}, +{ +"itemId":"pain_briana", +"name":"Pain Briana", +"emoji":"🍞", +"tags":"pain" +}, +{ +"itemId":"pain_brun", +"name":"Pain brun", +"emoji":"🍞", +"tags":"pain" +}, +{ +"itemId":"pain_burgers", +"name":"Pain burgers", +"emoji":"🍔", +"tags":"pain" +}, +{ +"itemId":"pain_burgers_sans_gluten", +"name":"Pain burgers sans gluten", +"emoji":"🍔", +"tags":"pain" +}, +{ +"itemId":"pain_croute", +"name":"Pain Croûte", +"emoji":"🍞", +"tags":"pain" +}, +{ +"itemId":"pain_croute_sans_gluten", +"name":"Pain croûté sans gluten", +"emoji":"🍞", +"tags":"pain" +}, +{ +"itemId":"pain_hamburger_sans_gluten", +"name":"Pain hamburger sans gluten", +"emoji":"🍔", +"tags":"pain" +}, +{ +"itemId":"pain_hot_dog", +"name":"Pain Hot Dog", +"emoji":"🌭", +"tags":"pain" +}, +{ +"itemId":"pain_italien", +"name":"Pain Italien", +"emoji":"🥖", +"tags":"pain" +}, +{ +"itemId":"pain_sans_gluten", +"name":"Pain Sans Gluten", +"emoji":"🍞", +"tags":"pain" +}, +{ +"itemId":"pain_sans_lactose", +"name":"Pain Sans Lactose", +"emoji":"🍞", +"tags":"pain" +}, +{ +"itemId":"pain_sous_marin", +"name":"Pain Sous Marin", +"emoji":"🥖", +"tags":"pain" +}, +{ +"itemId":"pains_grand_mere", +"name":"Pains Grand Mère", +"emoji":"🍞", +"tags":"pain" +}, +{ +"itemId":"pancakes_mix", +"name":"Pancakes mix", +"emoji":"🥞", +"tags":"patisserie" +}, +{ +"itemId":"petit_pain_sandwich", +"name":"Petit Pain Sandwich", +"emoji":"🥪", +"tags":"pain" +}, +{ +"itemId":"petit_pain_sous_marin", +"name":"Petit Pain Sous Marin", +"emoji":"🥖", +"tags":"pain" +}, +{ +"itemId":"pie", +"name":"Pie", +"emoji":"🥧", +"tags":"patisserie" +}, +{ +"itemId":"pizza_dough", +"name":"Pizza dough", +"emoji":"🍕", +"tags":"patisserie" +}, +{ +"itemId":"pizza_sans_gluten", +"name":"Pizza sans gluten", +"emoji":"🍕", +"tags":"patisserie" +}, +{ +"itemId":"puff_pastry", +"name":"Puff pastry", +"emoji":"🥐", +"tags":"patisserie" +}, +{ +"itemId":"pumpkin_pie", +"name":"Pumpkin Pie", +"emoji":"🥧", +"tags":"patisserie" +}, +{ +"itemId":"rolls", +"name":"Rolls", +"emoji":"🍞", +"tags":"pain" +}, +{ +"itemId":"scones", +"name":"Scones", +"emoji":"🧁", +"tags":"patisserie" +}, +{ +"itemId":"sliced_bread", +"name":"Sliced bread", +"emoji":"🍞", +"tags":"pain" +}, +{ +"itemId":"toast", +"name":"Toast", +"emoji":"🍞", +"tags":"pain" +}, +{ +"itemId":"toast_melba", +"name":"Toast melba", +"emoji":"🍞", +"tags":"pain" +}, +{ +"itemId":"tortilla", +"name":"Tortilla", +"emoji":"🌯", +"tags":"pain" +}, +{ +"itemId":"vol_au_vent", +"name":"Vol au vent", +"emoji":"🥐", +"tags":"patisserie" +}, +{ +"itemId":"waffles", +"name":"Waffles", +"emoji":"🧇", +"tags":"patisserie" +} +] +}, +{ +"categoryId":"dairy", +"name":"Produits Laitiers", +"emoji":"🥛", +"color":"#FFF8E1", +"sortOrder":2, +"items":[ +{ +"itemId":"lait", +"name":"Lait", +"emoji":"🥛", +"aliases":"milk", +"tags":"laitier" +}, +{ +"itemId":"lait_amande", +"name":"Lait d'amande", +"emoji":"🥛", +"tags":"laitier" +}, +{ +"itemId":"creme", +"name":"Crème", +"emoji":"🥛", +"aliases":"cream", +"tags":"laitier" +}, +{ +"itemId":"beurre", +"name":"Beurre", +"emoji":"🧈", +"aliases":"butter", +"tags":"laitier" +}, +{ +"itemId":"margarine", +"name":"Margarine", +"emoji":"🧈", +"tags":"laitier" +}, +{ +"itemId":"fromage_cheddar", +"name":"Fromage cheddar", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_mozzarella", +"name":"Mozzarella", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_brie", +"name":"Brie", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_feta", +"name":"Feta", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"yaourt", +"name":"Yaourt", +"emoji":"🥣", +"aliases":"yogurt", +"tags":"laitier" +}, +{ +"itemId":"yaourt_grec", +"name":"Yaourt grec", +"emoji":"🥣", +"tags":"laitier" +}, +{ +"itemId":"oeufs", +"name":"Œufs", +"emoji":"🥚", +"aliases":"eggs", +"tags":"laitier" +}, +{ +"itemId":"beurre_sans_lactose", +"name":"Beurre Sans Lactose", +"emoji":"🧈", +"tags":"beurre" +}, +{ +"itemId":"butter", +"name":"Butter", +"emoji":"🧈", +"tags":"beurre" +}, +{ +"itemId":"cream", +"name":"Cream", +"emoji":"🥛", +"tags":"creme" +}, +{ +"itemId":"cream_cheese", +"name":"Cream cheese", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"creme_10", +"name":"Crème 10%", +"emoji":"🥛", +"tags":"creme" +}, +{ +"itemId":"creme_a_cafe", +"name":"Crème à café", +"emoji":"🥛", +"tags":"creme" +}, +{ +"itemId":"creme_fraiche", +"name":"Creme fraiche", +"emoji":"🥛", +"tags":"creme" +}, +{ +"itemId":"creme_glacee", +"name":"Crème Glacée", +"emoji":"🍨", +"tags":"creme" +}, +{ +"itemId":"creme_glacee_sans_lactose", +"name":"Crème glacée Sans Lactose", +"emoji":"🍨", +"tags":"creme" +}, +{ +"itemId":"creme_glacee_sans_lactose_au_chocolat", +"name":"Crème Glacée Sans Lactose Au Chocolat", +"emoji":"🍨", +"tags":"creme" +}, +{ +"itemId":"creme_sans_lactose", +"name":"Crème Sans Lactose", +"emoji":"🥛", +"tags":"creme" +}, +{ +"itemId":"creme_sure", +"name":"Crème Sure", +"emoji":"🥛", +"tags":"creme" +}, +{ +"itemId":"sour_cream", +"name":"Sour cream", +"emoji":"🥛", +"tags":"creme" +}, +{ +"itemId":"blue_cheese", +"name":"Blue cheese", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"cheddar", +"name":"Cheddar", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"cheese", +"name":"Cheese", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"cottage_cheese", +"name":"Cottage cheese", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"crotte_de_fromage", +"name":"Crotte De Fromage", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"demi_lune", +"name":"Demi Lune", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fondue_fromage", +"name":"Fondue Fromage", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"frite_du_petit_quebec", +"name":"Frite du petit Québec", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage", +"name":"Fromage", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_a_tartiner", +"name":"Fromage à tartiner", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_briana", +"name":"Fromage Briana", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_chevre", +"name":"Fromage chèvre", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_chevre_confiture", +"name":"Fromage Chèvre Confiture", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_cottage", +"name":"Fromage Cottage", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_cottage_sans_lactose", +"name":"fromage cottage sans lactose", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_de_chevre", +"name":"Fromage de chèvre", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_deja_rappe", +"name":"Fromage Déjà Rappé", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_en_grains", +"name":"Fromage en grains", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_en_tranches", +"name":"fromage en tranches", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_mozzarella_1", +"name":"Fromage Mozzarella", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_philadelphia", +"name":"Fromage Philadelphia", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_philadelphia_sans_lactose", +"name":"Fromage Philadelphia sans lactose", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_quick_quick", +"name":"Fromage Quick Quick", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_rape_briana", +"name":"Fromage Rapé Briana", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_rape_sans_lactose", +"name":"Fromage rapé sans lactose", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_riviera", +"name":"Fromage Riviera", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_sans_lactose", +"name":"Fromage Sans Lactose", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_suisse", +"name":"Fromage suisse", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_tex_mex", +"name":"Fromage tex mex", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"fromage_vache_qui_rit", +"name":"Fromage Vache Qui Rit", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"gorgonzola", +"name":"Gorgonzola", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"grated_cheese", +"name":"Grated cheese", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"grilled_cheese", +"name":"Grilled cheese", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"mascarpone", +"name":"Mascarpone", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"parmesan", +"name":"Parmesan", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"parmesan_sans_lactose", +"name":"Parmesan sans lactose", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"quark", +"name":"Quark", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"ricotta", +"name":"Ricotta", +"emoji":"🧀", +"tags":"fromage" +}, +{ +"itemId":"lait_avoine", +"name":"Lait avoine", +"emoji":"🥛", +"tags":"laitier" +}, +{ +"itemId":"lait_avoine_lunch", +"name":"Lait avoine lunch", +"emoji":"🥛", +"tags":"laitier" +}, +{ +"itemId":"lait_avoine_lunch_chocolat", +"name":"Lait avoine lunch chocolat", +"emoji":"🥛", +"tags":"laitier" +}, +{ +"itemId":"lait_chocolat", +"name":"Lait Chocolat", +"emoji":"🥛", +"tags":"laitier" +}, +{ +"itemId":"lait_chocolat_lunch", +"name":"Lait Chocolat Lunch", +"emoji":"🥛", +"tags":"laitier" +}, +{ +"itemId":"lait_chocolat_sans_lactose", +"name":"Lait Chocolat Sans Lactose", +"emoji":"🥛", +"tags":"laitier" +}, +{ +"itemId":"lait_condense_coco", +"name":"Lait condensé coco", +"emoji":"🥛", +"tags":"laitier" +}, +{ +"itemId":"lait_sans_lactose", +"name":"Lait Sans Lactose", +"emoji":"🥛", +"tags":"laitier" +}, +{ +"itemId":"lait_soya_lunch", +"name":"Lait Soya Lunch", +"emoji":"🥛", +"tags":"laitier" +}, +{ +"itemId":"lait_soya_sensationnel_nature", +"name":"Lait Soya Sensationnel Nature", +"emoji":"🥛", +"tags":"laitier" +}, +{ +"itemId":"milk", +"name":"Milk", +"emoji":"🥛", +"tags":"laitier" +}, +{ +"itemId":"soy_milk", +"name":"Soy Milk", +"emoji":"🥛", +"tags":"laitier" +}, +{ +"itemId":"soy_yogurt", +"name":"Soy yogurt", +"emoji":"🥣", +"tags":"yogourt" +}, +{ +"itemId":"yogourt_iogo_vanille", +"name":"Yogourt iogo Vanille", +"emoji":"🥣", +"tags":"yogourt" +}, +{ +"itemId":"yogourt_logo_vanille_sans_lactose", +"name":"Yogourt logo vanille sans lactose", +"emoji":"🥣", +"tags":"yogourt" +}, +{ +"itemId":"yogourt_sans_lactose", +"name":"Yogourt Sans Lactose", +"emoji":"🥣", +"tags":"yogourt" +}, +{ +"itemId":"yogurt", +"name":"Yogurt", +"emoji":"🥣", +"tags":"yogourt" +} +] +}, +{ +"categoryId":"meat_fish", +"name":"Viandes & Poissons", +"emoji":"🥩", +"color":"#EF5350", +"sortOrder":3, +"items":[ +{ +"itemId":"poulet", +"name":"Poulet", +"emoji":"🍗", +"aliases":"chicken", +"tags":"viande" +}, +{ +"itemId":"boeuf_hache", +"name":"Bœuf haché", +"emoji":"🥩", +"aliases":"ground beef", +"tags":"viande" +}, +{ +"itemId":"steak", +"name":"Steak", +"emoji":"🥩", +"tags":"viande" +}, +{ +"itemId":"porc", +"name":"Porc", +"emoji":"🥓", +"aliases":"pork", +"tags":"viande" +}, +{ +"itemId":"bacon", +"name":"Bacon", +"emoji":"🥓", +"tags":"viande" +}, +{ +"itemId":"jambon", +"name":"Jambon", +"emoji":"🥓", +"aliases":"ham", +"tags":"viande" +}, +{ +"itemId":"saucisses", +"name":"Saucisses", +"emoji":"🌭", +"tags":"viande" +}, +{ +"itemId":"dinde", +"name":"Dinde", +"emoji":"🦃", +"aliases":"turkey", +"tags":"viande" +}, +{ +"itemId":"saumon", +"name":"Saumon", +"emoji":"🐟", +"aliases":"salmon", +"tags":"poisson" +}, +{ +"itemId":"thon", +"name":"Thon", +"emoji":"🐟", +"aliases":"tuna", +"tags":"poisson" +}, +{ +"itemId":"crevettes", +"name":"Crevettes", +"emoji":"🦐", +"aliases":"shrimp", +"tags":"poisson" +}, +{ +"itemId":"tofu", +"name":"Tofu", +"emoji":"🥡", +"tags":"vegetal" +} +] +}, +{ +"categoryId":"pantry", +"name":"Épicerie & Garde-manger", +"emoji":"🛒", +"color":"#FFB74D", +"sortOrder":4, +"items":[ +{ +"itemId":"pates", +"name":"Pâtes", +"emoji":"🍝", +"aliases":"pasta", +"tags":"pates" +}, +{ +"itemId":"riz", +"name":"Riz", +"emoji":"🍚", +"aliases":"rice", +"tags":"feculent" +}, +{ +"itemId":"farine", +"name":"Farine", +"emoji":"🌾", +"aliases":"flour", +"tags":"boulangerie" +}, +{ +"itemId":"sucre", +"name":"Sucre", +"emoji":"🍬", +"aliases":"sugar", +"tags":"boulangerie" +}, +{ +"itemId":"huile_olive", +"name":"Huile d'olive", +"emoji":"🫒", +"tags":"huile" +}, +{ +"itemId":"vinaigre", +"name":"Vinaigre", +"emoji":"🧴", +"tags":"condiment" +}, +{ +"itemId":"sauce_tomate", +"name":"Sauce tomate", +"emoji":"🍅", +"tags":"condiment" +}, +{ +"itemId":"ketchup", +"name":"Ketchup", +"emoji":"🍅", +"tags":"condiment" +}, +{ +"itemId":"moutarde", +"name":"Moutarde", +"emoji":"🟡", +"tags":"condiment" +}, +{ +"itemId":"miel", +"name":"Miel", +"emoji":"🍯", +"aliases":"honey", +"tags":"sucre" +}, +{ +"itemId":"sirop_erable", +"name":"Sirop d'érable", +"emoji":"🍯", +"tags":"sucre" +}, +{ +"itemId":"confiture", +"name":"Confiture", +"emoji":"🍓", +"aliases":"jam", +"tags":"tartinade" +}, +{ +"itemId":"beurre_arachide", +"name":"Beurre d'arachide", +"emoji":"🥜", +"tags":"tartinade" +}, +{ +"itemId":"cereales", +"name":"Céréales", +"emoji":"🥣", +"tags":"dejeuner" +} +] +}, +{ +"categoryId":"spices", +"name":"Condiments & Épices", +"emoji":"🌶️", +"color":"#FF7043", +"sortOrder":5, +"items":[ +{ +"itemId":"sel", +"name":"Sel", +"emoji":"🧂", +"aliases":"salt", +"tags":"epice" +}, +{ +"itemId":"poivre", +"name":"Poivre", +"emoji":"🧂", +"aliases":"pepper", +"tags":"epice" +}, +{ +"itemId":"paprika", +"name":"Paprika", +"emoji":"🌶️", +"tags":"epice" +}, +{ +"itemId":"cumin", +"name":"Cumin", +"emoji":"🌶️", +"tags":"epice" +}, +{ +"itemId":"curry", +"name":"Curry", +"emoji":"🌶️", +"tags":"epice" +}, +{ +"itemId":"cannelle", +"name":"Cannelle", +"emoji":"🌶️", +"aliases":"cinnamon", +"tags":"epice" +}, +{ +"itemId":"origan", +"name":"Origan", +"emoji":"🌿", +"tags":"herbe" +}, +{ +"itemId":"thym", +"name":"Thym", +"emoji":"🌿", +"tags":"herbe" +}, +{ +"itemId":"romarin", +"name":"Romarin", +"emoji":"🌿", +"tags":"herbe" +} +] +}, +{ +"categoryId":"frozen", +"name":"Surgelés", +"emoji":"🧊", +"color":"#90CAF9", +"sortOrder":6, +"items":[ +{ +"itemId":"pizza_surgelee", +"name":"Pizza surgelée", +"emoji":"🍕", +"tags":"surgele" +}, +{ +"itemId":"frites_surgelees", +"name":"Frites surgelées", +"emoji":"🍟", +"tags":"surgele" +}, +{ +"itemId":"creme_glacee", +"name":"Crème glacée", +"emoji":"🍨", +"aliases":"ice cream", +"tags":"surgele" +}, +{ +"itemId":"legumes_surgeles", +"name":"Légumes surgelés", +"emoji":"🥦", +"tags":"surgele" +}, +{ +"itemId":"nuggets", +"name":"Nuggets", +"emoji":"🍗", +"tags":"surgele" +} +] +}, +{ +"categoryId":"snacks", +"name":"Snacks & Confiseries", +"emoji":"🍿", +"color":"#FFCA28", +"sortOrder":7, +"items":[ +{ +"itemId":"chips", +"name":"Chips", +"emoji":"🥔", +"aliases":"croustilles", +"tags":"snack" +}, +{ +"itemId":"popcorn", +"name":"Pop-corn", +"emoji":"🍿", +"tags":"snack" +}, +{ +"itemId":"chocolat", +"name":"Chocolat", +"emoji":"🍫", +"tags":"chocolat" +}, +{ +"itemId":"biscuits", +"name":"Biscuits", +"emoji":"🍪", +"aliases":"cookies", +"tags":"snack" +}, +{ +"itemId":"bonbons", +"name":"Bonbons", +"emoji":"🍬", +"aliases":"candy", +"tags":"confiserie" +}, +{ +"itemId":"gomme", +"name":"Gomme", +"emoji":"🍬", +"tags":"confiserie" +} +] +}, +{ +"categoryId":"beverages", +"name":"Boissons", +"emoji":"🥤", +"color":"#42A5F5", +"sortOrder":8, +"items":[ +{ +"itemId":"eau", +"name":"Eau", +"emoji":"💧", +"aliases":"water", +"tags":"boisson" +}, +{ +"itemId":"jus_orange", +"name":"Jus d'orange", +"emoji":"🧃", +"tags":"jus" +}, +{ +"itemId":"jus_pomme", +"name":"Jus de pomme", +"emoji":"🧃", +"tags":"jus" +}, +{ +"itemId":"coca_cola", +"name":"Coca-Cola", +"emoji":"🥤", +"aliases":"coke", +"tags":"soda" +}, +{ +"itemId":"cafe", +"name":"Café", +"emoji":"☕", +"aliases":"coffee", +"tags":"cafe" +}, +{ +"itemId":"the", +"name":"Thé", +"emoji":"🍵", +"aliases":"tea", +"tags":"the" +}, +{ +"itemId":"biere", +"name":"Bière", +"emoji":"🍺", +"aliases":"beer", +"tags":"alcool" +}, +{ +"itemId":"vin_rouge", +"name":"Vin rouge", +"emoji":"🍷", +"tags":"alcool" +} +] +} +] +}, +{ +"domainId":"pharmacy", +"name":"Santé & Pharmacie", +"emoji":"💊", +"color":"#E91E63", +"sortOrder":1, +"categories":[ +{ +"categoryId":"medications", +"name":"Médicaments", +"emoji":"💊", +"color":"#EF5350", +"sortOrder":0, +"items":[ +{ +"itemId":"acetaminophene", +"name":"Acétaminophène", +"emoji":"💊", +"aliases":"tylenol", +"tags":"medicament" +}, +{ +"itemId":"ibuprofene", +"name":"Ibuprofène", +"emoji":"💊", +"aliases":"advil", +"tags":"medicament" +}, +{ +"itemId":"aspirine", +"name":"Aspirine", +"emoji":"💊", +"tags":"medicament" +}, +{ +"itemId":"sirop_toux", +"name":"Sirop contre la toux", +"emoji":"💊", +"tags":"rhume" +}, +{ +"itemId":"antihistaminique", +"name":"Antihistaminique", +"emoji":"💊", +"aliases":"benadryl", +"tags":"allergie" +}, +{ +"itemId":"pansements", +"name":"Pansements", +"emoji":"🩹", +"aliases":"band-aid", +"tags":"premiers_soins" +}, +{ +"itemId":"thermometre", +"name":"Thermomètre", +"emoji":"🌡️", +"tags":"medical" +} +] +}, +{ +"categoryId":"hygiene", +"name":"Hygiène", +"emoji":"🧴", +"color":"#26C6DA", +"sortOrder":1, +"items":[ +{ +"itemId":"savon", +"name":"Savon", +"emoji":"🧼", +"aliases":"soap", +"tags":"hygiene" +}, +{ +"itemId":"shampooing", +"name":"Shampooing", +"emoji":"🧴", +"aliases":"shampoo", +"tags":"hygiene" +}, +{ +"itemId":"revitalisant", +"name":"Revitalisant", +"emoji":"🧴", +"aliases":"conditioner", +"tags":"hygiene" +}, +{ +"itemId":"dentifrice", +"name":"Dentifrice", +"emoji":"🦷", +"aliases":"toothpaste", +"tags":"hygiene" +}, +{ +"itemId":"brosse_dents", +"name":"Brosse à dents", +"emoji":"🪥", +"tags":"hygiene" +}, +{ +"itemId":"deodorant", +"name":"Déodorant", +"emoji":"🧴", +"tags":"hygiene" +}, +{ +"itemId":"rasoir", +"name":"Rasoir", +"emoji":"🪒", +"tags":"hygiene" +}, +{ +"itemId":"papier_mouchoir", +"name":"Papier mouchoir", +"emoji":"🤧", +"aliases":"kleenex", +"tags":"hygiene" +} +] +}, +{ +"categoryId":"baby_care", +"name":"Bébé", +"emoji":"👶", +"color":"#FFCDD2", +"sortOrder":2, +"items":[ +{ +"itemId":"couches", +"name":"Couches", +"emoji":"👶", +"aliases":"diapers", +"tags":"bebe" +}, +{ +"itemId":"lingettes_bebe", +"name":"Lingettes bébé", +"emoji":"🧻", +"tags":"bebe" +}, +{ +"itemId":"lait_maternise", +"name":"Lait maternisé", +"emoji":"🍼", +"aliases":"formula", +"tags":"bebe" +}, +{ +"itemId":"biberons", +"name":"Biberons", +"emoji":"🍼", +"tags":"bebe" +}, +{ +"itemId":"purees_bebe", +"name":"Purée bébé", +"emoji":"🍎", +"tags":"bebe" +} +] +}, +{ +"categoryId":"supplements", +"name":"Vitamines", +"emoji":"💪", +"color":"#FFB300", +"sortOrder":3, +"items":[ +{ +"itemId":"multivitamines", +"name":"Multivitamines", +"emoji":"💊", +"tags":"vitamine" +}, +{ +"itemId":"vitamine_c", +"name":"Vitamine C", +"emoji":"💊", +"tags":"vitamine" +}, +{ +"itemId":"vitamine_d", +"name":"Vitamine D", +"emoji":"💊", +"tags":"vitamine" +}, +{ +"itemId":"omega_3", +"name":"Oméga-3", +"emoji":"💊", +"tags":"supplement" +}, +{ +"itemId":"probiotiques", +"name":"Probiotiques", +"emoji":"💊", +"tags":"supplement" +} +] +} +] +}, +{ +"domainId":"hardware", +"name":"Rénovation & Bricolage", +"emoji":"🔧", +"color":"#FF9800", +"sortOrder":2, +"categories":[ +{ +"categoryId":"tools", +"name":"Outillage", +"emoji":"🔨", +"color":"#FFA726", +"sortOrder":0, +"items":[ +{ +"itemId":"marteau", +"name":"Marteau", +"emoji":"🔨", +"aliases":"hammer", +"tags":"outil" +}, +{ +"itemId":"tournevis", +"name":"Tournevis", +"emoji":"🔧", +"aliases":"screwdriver", +"tags":"outil" +}, +{ +"itemId":"perceuse", +"name":"Perceuse", +"emoji":"🔧", +"aliases":"drill", +"tags":"outil" +}, +{ +"itemId":"scie", +"name":"Scie", +"emoji":"🪚", +"aliases":"saw", +"tags":"outil" +}, +{ +"itemId":"niveau", +"name":"Niveau", +"emoji":"📏", +"tags":"outil" +}, +{ +"itemId":"ruban_mesurer", +"name":"Ruban à mesurer", +"emoji":"📏", +"tags":"outil" +}, +{ +"itemId":"pinces", +"name":"Pinces", +"emoji":"🔧", +"aliases":"pliers", +"tags":"outil" +}, +{ +"itemId":"escabeau", +"name":"Escabeau", +"emoji":"🪜", +"tags":"outil" +}, +{ +"itemId":"boite_outils", +"name":"Boîte à outils", +"emoji":"🧰", +"tags":"outil" +} +] +}, +{ +"categoryId":"hardware_supplies", +"name":"Quincaillerie", +"emoji":"🔩", +"color":"#FB8C00", +"sortOrder":1, +"items":[ +{ +"itemId":"vis", +"name":"Vis", +"emoji":"🔩", +"aliases":"screws", +"tags":"fixation" +}, +{ +"itemId":"clous", +"name":"Clous", +"emoji":"🔩", +"aliases":"nails", +"tags":"fixation" +}, +{ +"itemId":"chevilles", +"name":"Chevilles", +"emoji":"🔩", +"tags":"fixation" +}, +{ +"itemId":"colle", +"name":"Colle", +"emoji":"🧴", +"aliases":"glue", +"tags":"adhesif" +}, +{ +"itemId":"duct_tape", +"name":"Ruban adhésif", +"emoji":"🩹", +"tags":"adhesif" +}, +{ +"itemId":"wd40", +"name":"WD-40", +"emoji":"🧴", +"tags":"lubrifiant" +} +] +}, +{ +"categoryId":"paint", +"name":"Peinture", +"emoji":"🎨", +"color":"#AB47BC", +"sortOrder":2, +"items":[ +{ +"itemId":"peinture", +"name":"Peinture", +"emoji":"🎨", +"aliases":"paint", +"tags":"peinture" +}, +{ +"itemId":"pinceau", +"name":"Pinceau", +"emoji":"🖌️", +"tags":"peinture" +}, +{ +"itemId":"rouleau", +"name":"Rouleau", +"emoji":"🖌️", +"tags":"peinture" +}, +{ +"itemId":"papier_sable", +"name":"Papier sablé", +"emoji":"📄", +"aliases":"sandpaper", +"tags":"peinture" +} +] +}, +{ +"categoryId":"electrical", +"name":"Électricité", +"emoji":"⚡", +"color":"#FFEE58", +"sortOrder":3, +"items":[ +{ +"itemId":"ampoule_led", +"name":"Ampoule LED", +"emoji":"💡", +"tags":"eclairage" +}, +{ +"itemId":"prise_electrique", +"name":"Prise", +"emoji":"🔌", +"tags":"electrique" +}, +{ +"itemId":"interrupteur", +"name":"Interrupteur", +"emoji":"💡", +"tags":"electrique" +}, +{ +"itemId":"rallonge", +"name":"Rallonge", +"emoji":"🔌", +"tags":"electrique" +} +] +}, +{ +"categoryId":"garden", +"name":"Jardin", +"emoji":"🌱", +"color":"#7CB342", +"sortOrder":4, +"items":[ +{ +"itemId":"terreau", +"name":"Terreau", +"emoji":"🌱", +"tags":"jardin" +}, +{ +"itemId":"engrais", +"name":"Engrais", +"emoji":"🌱", +"tags":"jardin" +}, +{ +"itemId":"pots_fleurs", +"name":"Pots de fleurs", +"emoji":"🪴", +"tags":"jardin" +}, +{ +"itemId":"boyau_arrosage", +"name":"Boyau d'arrosage", +"emoji":"🌱", +"tags":"jardin" +}, +{ +"itemId":"bbq", +"name":"BBQ", +"emoji":"🍖", +"tags":"exterieur" +}, +{ +"itemId":"propane", +"name":"Propane", +"emoji":"🔥", +"tags":"exterieur" +} +] +} +] +}, +{ +"domainId":"technology", +"name":"Technologie", +"emoji":"💻", +"color":"#2196F3", +"sortOrder":3, +"categories":[ +{ +"categoryId":"computers", +"name":"Informatique", +"emoji":"💻", +"color":"#42A5F5", +"sortOrder":0, +"items":[ +{ +"itemId":"ordi_portable", +"name":"Ordinateur portable", +"emoji":"💻", +"aliases":"laptop", +"tags":"tech" +}, +{ +"itemId":"clavier", +"name":"Clavier", +"emoji":"⌨️", +"tags":"tech" +}, +{ +"itemId":"souris", +"name":"Souris", +"emoji":"🖱️", +"tags":"tech" +}, +{ +"itemId":"casque_ecoute", +"name":"Casque d'écoute", +"emoji":"🎧", +"tags":"tech" +}, +{ +"itemId":"cle_usb", +"name":"Clé USB", +"emoji":"💾", +"tags":"tech" +}, +{ +"itemId":"cable_hdmi", +"name":"Câble HDMI", +"emoji":"🔌", +"tags":"tech" +}, +{ +"itemId":"imprimante", +"name":"Imprimante", +"emoji":"🖨️", +"tags":"tech" +} +] +}, +{ +"categoryId":"phones", +"name":"Téléphonie", +"emoji":"📱", +"color":"#5C6BC0", +"sortOrder":1, +"items":[ +{ +"itemId":"etui_telephone", +"name":"Étui de téléphone", +"emoji":"📱", +"tags":"tech" +}, +{ +"itemId":"chargeur", +"name":"Chargeur", +"emoji":"🔌", +"tags":"tech" +}, +{ +"itemId":"power_bank", +"name":"Batterie externe", +"emoji":"🔋", +"tags":"tech" +}, +{ +"itemId":"ecouteurs_sans_fil", +"name":"Écouteurs sans fil", +"emoji":"🎧", +"aliases":"airpods", +"tags":"tech" +} +] +}, +{ +"categoryId":"appliances", +"name":"Électroménager", +"emoji":"🍳", +"color":"#78909C", +"sortOrder":2, +"items":[ +{ +"itemId":"refrigerateur", +"name":"Réfrigérateur", +"emoji":"🧊", +"aliases":"fridge", +"tags":"electromenager" +}, +{ +"itemId":"micro_ondes", +"name":"Micro-ondes", +"emoji":"📡", +"tags":"electromenager" +}, +{ +"itemId":"cafetiere", +"name":"Cafetière", +"emoji":"☕", +"tags":"electromenager" +}, +{ +"itemId":"bouilloire", +"name":"Bouilloire", +"emoji":"☕", +"tags":"electromenager" +}, +{ +"itemId":"grille_pain", +"name":"Grille-pain", +"emoji":"🍞", +"aliases":"toaster", +"tags":"electromenager" +}, +{ +"itemId":"aspirateur", +"name":"Aspirateur", +"emoji":"🧹", +"tags":"electromenager" +}, +{ +"itemId":"ventilateur", +"name":"Ventilateur", +"emoji":"💨", +"tags":"electromenager" +} +] +}, +{ +"categoryId":"batteries_power", +"name":"Piles", +"emoji":"🔋", +"color":"#FFA726", +"sortOrder":3, +"items":[ +{ +"itemId":"piles_aa", +"name":"Piles AA", +"emoji":"🔋", +"tags":"pile" +}, +{ +"itemId":"piles_aaa", +"name":"Piles AAA", +"emoji":"🔋", +"tags":"pile" +}, +{ +"itemId":"pile_9v", +"name":"Pile 9V", +"emoji":"🔋", +"tags":"pile" +} +] +} +] +}, +{ +"domainId":"clothing", +"name":"Mode", +"emoji":"👕", +"color":"#9C27B0", +"sortOrder":4, +"categories":[ +{ +"categoryId":"men_clothing", +"name":"Vêtements Homme", +"emoji":"👔", +"color":"#5C6BC0", +"sortOrder":0, +"items":[ +{ +"itemId":"tshirt_homme", +"name":"T-shirt", +"emoji":"👕", +"tags":"mode" +}, +{ +"itemId":"chemise", +"name":"Chemise", +"emoji":"👔", +"tags":"mode" +}, +{ +"itemId":"pantalon_homme", +"name":"Pantalon", +"emoji":"👖", +"tags":"mode" +}, +{ +"itemId":"jeans_homme", +"name":"Jeans", +"emoji":"👖", +"tags":"mode" +}, +{ +"itemId":"chaussettes", +"name":"Chaussettes", +"emoji":"🧦", +"tags":"mode" +} +] +}, +{ +"categoryId":"women_clothing", +"name":"Vêtements Femme", +"emoji":"👗", +"color":"#EC407A", +"sortOrder":1, +"items":[ +{ +"itemId":"robe", +"name":"Robe", +"emoji":"👗", +"tags":"mode" +}, +{ +"itemId":"jupe", +"name":"Jupe", +"emoji":"👗", +"tags":"mode" +}, +{ +"itemId":"blouse", +"name":"Blouse", +"emoji":"👚", +"tags":"mode" +}, +{ +"itemId":"legging", +"name":"Legging", +"emoji":"👖", +"tags":"mode" +} +] +}, +{ +"categoryId":"shoes", +"name":"Chaussures", +"emoji":"👟", +"color":"#8D6E63", +"sortOrder":2, +"items":[ +{ +"itemId":"souliers_course", +"name":"Souliers de course", +"emoji":"👟", +"tags":"chaussure" +}, +{ +"itemId":"bottes_hiver", +"name":"Bottes d'hiver", +"emoji":"🥾", +"tags":"chaussure" +}, +{ +"itemId":"sandales", +"name":"Sandales", +"emoji":"👡", +"tags":"chaussure" +} +] +}, +{ +"categoryId":"accessories", +"name":"Accessoires", +"emoji":"👜", +"color":"#AB47BC", +"sortOrder":3, +"items":[ +{ +"itemId":"sac_main", +"name":"Sac à main", +"emoji":"👜", +"tags":"accessoire" +}, +{ +"itemId":"montre", +"name":"Montre", +"emoji":"⌚", +"tags":"accessoire" +}, +{ +"itemId":"lunettes_soleil", +"name":"Lunettes de soleil", +"emoji":"🕶️", +"tags":"accessoire" +}, +{ +"itemId":"sac_a_dos", +"name":"Sac à dos", +"emoji":"🎒", +"tags":"accessoire" +} +] +} +] +}, +{ +"domainId":"home", +"name":"Maison & Décoration", +"emoji":"🏡", +"color":"#795548", +"sortOrder":5, +"categories":[ +{ +"categoryId":"furniture", +"name":"Meubles", +"emoji":"🛋️", +"color":"#A1887F", +"sortOrder":0, +"items":[ +{ +"itemId":"canape", +"name":"Canapé", +"emoji":"🛋️", +"aliases":"sofa", +"tags":"meuble" +}, +{ +"itemId":"chaises", +"name":"Chaises", +"emoji":"🪑", +"tags":"meuble" +}, +{ +"itemId":"table_manger", +"name":"Table à manger", +"emoji":"🪑", +"tags":"meuble" +}, +{ +"itemId":"lit", +"name":"Lit", +"emoji":"🛏️", +"tags":"meuble" +}, +{ +"itemId":"matelas", +"name":"Matelas", +"emoji":"🛏️", +"tags":"meuble" +} +] +}, +{ +"categoryId":"decor", +"name":"Décoration", +"emoji":"🖼️", +"color":"#FFCA28", +"sortOrder":1, +"items":[ +{ +"itemId":"cadre_photo", +"name":"Cadre photo", +"emoji":"🖼️", +"tags":"decor" +}, +{ +"itemId":"miroir", +"name":"Miroir", +"emoji":"🪞", +"tags":"decor" +}, +{ +"itemId":"bougie", +"name":"Bougie", +"emoji":"🕯️", +"tags":"decor" +}, +{ +"itemId":"coussin", +"name":"Coussin", +"emoji":"🛋️", +"tags":"decor" +}, +{ +"itemId":"tapis", +"name":"Tapis", +"emoji":"🟫", +"tags":"decor" +}, +{ +"itemId":"rideau", +"name":"Rideau", +"emoji":"🪟", +"tags":"decor" +}, +{ +"itemId":"lampe", +"name":"Lampe", +"emoji":"💡", +"tags":"decor" +} +] +}, +{ +"categoryId":"kitchen_tools", +"name":"Ustensiles", +"emoji":"🍳", +"color":"#FF7043", +"sortOrder":2, +"items":[ +{ +"itemId":"casserole", +"name":"Casserole", +"emoji":"🍲", +"tags":"ustensile" +}, +{ +"itemId":"poele", +"name":"Poêle", +"emoji":"🍳", +"tags":"ustensile" +}, +{ +"itemId":"couteau_chef", +"name":"Couteau de chef", +"emoji":"🔪", +"tags":"ustensile" +}, +{ +"itemId":"planche_decouper", +"name":"Planche à découper", +"emoji":"🔪", +"tags":"ustensile" +}, +{ +"itemId":"spatule", +"name":"Spatule", +"emoji":"🍳", +"tags":"ustensile" +} +] +}, +{ +"categoryId":"bedding", +"name":"Literie & Salle de Bain", +"emoji":"🛏️", +"color":"#B39DDB", +"sortOrder":3, +"items":[ +{ +"itemId":"draps", +"name":"Draps", +"emoji":"🛏️", +"tags":"literie" +}, +{ +"itemId":"oreiller", +"name":"Oreiller", +"emoji":"🛏️", +"tags":"literie" +}, +{ +"itemId":"couette", +"name":"Couette", +"emoji":"🛏️", +"tags":"literie" +}, +{ +"itemId":"serviettes_bain", +"name":"Serviettes de bain", +"emoji":"🛁", +"tags":"salle_de_bain" +} +] +} +] +}, +{ +"domainId":"pets", +"name":"Animaux", +"emoji":"🐾", +"color":"#8BC34A", +"sortOrder":6, +"categories":[ +{ +"categoryId":"pet_food", +"name":"Alimentation", +"emoji":"🐕", +"color":"#9CCC65", +"sortOrder":0, +"items":[ +{ +"itemId":"croquettes_chien", +"name":"Croquettes chien", +"emoji":"🐶", +"tags":"animal" +}, +{ +"itemId":"croquettes_chat", +"name":"Croquettes chat", +"emoji":"🐱", +"tags":"animal" +}, +{ +"itemId":"nourriture_humide_chat", +"name":"Nourriture humide chat", +"emoji":"🐈", +"tags":"animal" +}, +{ +"itemId":"gateries_chien", +"name":"Gâteries chien", +"emoji":"🦴", +"tags":"animal" +} +] +}, +{ +"categoryId":"pet_accessories", +"name":"Accessoires", +"emoji":"🎾", +"color":"#AED581", +"sortOrder":1, +"items":[ +{ +"itemId":"laisse", +"name":"Laisse", +"emoji":"🐕", +"aliases":"leash", +"tags":"animal" +}, +{ +"itemId":"collier_animal", +"name":"Collier", +"emoji":"🐕", +"tags":"animal" +}, +{ +"itemId":"bol_animal", +"name":"Bol", +"emoji":"🥣", +"tags":"animal" +}, +{ +"itemId":"jouet_animal", +"name":"Jouet", +"emoji":"🎾", +"tags":"animal" +}, +{ +"itemId":"litiere", +"name":"Litière", +"emoji":"🐈", +"tags":"animal" +} +] +} +] +}, +{ +"domainId":"auto", +"name":"Auto", +"emoji":"🚗", +"color":"#607D8B", +"sortOrder":7, +"categories":[ +{ +"categoryId":"auto_maintenance", +"name":"Entretien Auto", +"emoji":"🔧", +"color":"#78909C", +"sortOrder":0, +"items":[ +{ +"itemId":"huile_moteur", +"name":"Huile moteur", +"emoji":"🛢️", +"tags":"auto" +}, +{ +"itemId":"liquide_lave_glace", +"name":"Liquide lave-glace", +"emoji":"🧴", +"tags":"auto" +}, +{ +"itemId":"antigel", +"name":"Antigel", +"emoji":"🧴", +"tags":"auto" +}, +{ +"itemId":"essuie_glace", +"name":"Essuie-glace", +"emoji":"🚗", +"tags":"auto" +}, +{ +"itemId":"grattoir", +"name":"Grattoir à glace", +"emoji":"❄️", +"tags":"auto" +} +] +}, +{ +"categoryId":"auto_accessories", +"name":"Accessoires Auto", +"emoji":"🚙", +"color":"#90A4AE", +"sortOrder":1, +"items":[ +{ +"itemId":"chargeur_auto", +"name":"Chargeur auto", +"emoji":"🔌", +"tags":"auto" +}, +{ +"itemId":"siege_auto_enfant", +"name":"Siège d'auto enfant", +"emoji":"👶", +"tags":"auto" +}, +{ +"itemId":"tapis_auto", +"name":"Tapis d'auto", +"emoji":"🚗", +"tags":"auto" +} +] +} +] +}, +{ +"domainId":"leisure", +"name":"Loisirs & Sports", +"emoji":"⚽", +"color":"#FF5722", +"sortOrder":8, +"categories":[ +{ +"categoryId":"sports", +"name":"Articles de Sport", +"emoji":"⚽", +"color":"#FF7043", +"sortOrder":0, +"items":[ +{ +"itemId":"ballon_soccer", +"name":"Ballon de soccer", +"emoji":"⚽", +"tags":"sport" +}, +{ +"itemId":"tapis_yoga", +"name":"Tapis de yoga", +"emoji":"🧘", +"tags":"sport" +}, +{ +"itemId":"halteres", +"name":"Haltères", +"emoji":"🏋️", +"tags":"sport" +}, +{ +"itemId":"bouteille_sport", +"name":"Bouteille de sport", +"emoji":"🍶", +"tags":"sport" +}, +{ +"itemId":"corde_a_sauter", +"name":"Corde à sauter", +"emoji":"🤸", +"tags":"sport" +} +] +}, +{ +"categoryId":"camping", +"name":"Camping", +"emoji":"⛺", +"color":"#8BC34A", +"sortOrder":1, +"items":[ +{ +"itemId":"tente", +"name":"Tente", +"emoji":"⛺", +"tags":"camping" +}, +{ +"itemId":"sac_couchage", +"name":"Sac de couchage", +"emoji":"🛌", +"tags":"camping" +}, +{ +"itemId":"lampe_frontale", +"name":"Lampe frontale", +"emoji":"🔦", +"tags":"camping" +}, +{ +"itemId":"glaciere", +"name":"Glacière", +"emoji":"🧊", +"aliases":"cooler", +"tags":"camping" +}, +{ +"itemId":"insectifuge", +"name":"Insectifuge", +"emoji":"🦟", +"tags":"camping" +} +] +}, +{ +"categoryId":"books_stationery", +"name":"Livres & Papeterie", +"emoji":"📚", +"color":"#7986CB", +"sortOrder":2, +"items":[ +{ +"itemId":"livre", +"name":"Livre", +"emoji":"📚", +"aliases":"book", +"tags":"papeterie" +}, +{ +"itemId":"cahier", +"name":"Cahier", +"emoji":"📓", +"aliases":"notebook", +"tags":"papeterie" +}, +{ +"itemId":"stylo", +"name":"Stylo", +"emoji":"🖊️", +"aliases":"pen", +"tags":"papeterie" +}, +{ +"itemId":"crayon", +"name":"Crayon", +"emoji":"✏️", +"aliases":"pencil", +"tags":"papeterie" +}, +{ +"itemId":"surligneur", +"name":"Surligneur", +"emoji":"🖍️", +"tags":"papeterie" +}, +{ +"itemId":"calculatrice", +"name":"Calculatrice", +"emoji":"🔢", +"tags":"papeterie" +} +] +} +] +}, +{ +"domainId":"cleaning", +"name":"Entretien & Ménage", +"emoji":"🧹", +"color":"#00BCD4", +"sortOrder":9, +"categories":[ +{ +"categoryId":"cleaning_products", +"name":"Produits Ménagers", +"emoji":"🧴", +"color":"#26C6DA", +"sortOrder":0, +"items":[ +{ +"itemId":"nettoyant_tout_usage", +"name":"Nettoyant tout usage", +"emoji":"🧴", +"tags":"menage" +}, +{ +"itemId":"nettoyant_vitres", +"name":"Nettoyant à vitres", +"emoji":"🧴", +"aliases":"windex", +"tags":"menage" +}, +{ +"itemId":"javellisant", +"name":"Javellisant", +"emoji":"🧴", +"aliases":"javel", +"tags":"menage" +}, +{ +"itemId":"desinfectant", +"name":"Désinfectant", +"emoji":"🧴", +"aliases":"lysol", +"tags":"menage" +}, +{ +"itemId":"nettoyant_plancher", +"name":"Nettoyant plancher", +"emoji":"🧴", +"tags":"menage" +}, +{ +"itemId":"deboucheur", +"name":"Déboucheur", +"emoji":"🚿", +"tags":"menage" +} +] +}, +{ +"categoryId":"laundry", +"name":"Lessive", +"emoji":"👕", +"color":"#80DEEA", +"sortOrder":1, +"items":[ +{ +"itemId":"detergent", +"name":"Détergent à lessive", +"emoji":"🧺", +"aliases":"laundry detergent", +"tags":"lessive" +}, +{ +"itemId":"assouplissant", +"name":"Assouplissant", +"emoji":"🧺", +"aliases":"fabric softener", +"tags":"lessive" +}, +{ +"itemId":"feuilles_secheuse", +"name":"Feuilles pour sécheuse", +"emoji":"🧺", +"tags":"lessive" +}, +{ +"itemId":"detachant", +"name":"Détachant", +"emoji":"🧴", +"tags":"lessive" +} +] +}, +{ +"categoryId":"disposables", +"name":"Articles Jetables", +"emoji":"🧻", +"color":"#4DD0E1", +"sortOrder":2, +"items":[ +{ +"itemId":"papier_toilette", +"name":"Papier toilette", +"emoji":"🧻", +"aliases":"toilet paper", +"tags":"jetable" +}, +{ +"itemId":"essuie_tout", +"name":"Essuie-tout", +"emoji":"🧻", +"aliases":"paper towel", +"tags":"jetable" +}, +{ +"itemId":"sacs_poubelle", +"name":"Sacs poubelle", +"emoji":"🗑️", +"aliases":"trash bags", +"tags":"jetable" +}, +{ +"itemId":"sacs_ziploc", +"name":"Sacs Ziploc", +"emoji":"🗑️", +"tags":"jetable" +}, +{ +"itemId":"papier_aluminium", +"name":"Papier aluminium", +"emoji":"📦", +"aliases":"aluminum foil", +"tags":"jetable" +}, +{ +"itemId":"pellicule_plastique", +"name":"Pellicule plastique", +"emoji":"📦", +"aliases":"plastic wrap", +"tags":"jetable" +}, +{ +"itemId":"papier_parchemin", +"name":"Papier parchemin", +"emoji":"📦", +"tags":"jetable" +} +] +}, +{ +"categoryId":"cleaning_tools", +"name":"Outils de Ménage", +"emoji":"🧹", +"color":"#26C6DA", +"sortOrder":3, +"items":[ +{ +"itemId":"balai", +"name":"Balai", +"emoji":"🧹", +"aliases":"broom", +"tags":"menage" +}, +{ +"itemId":"vadrouille", +"name":"Vadrouille", +"emoji":"🧹", +"aliases":"mop|moppe", +"tags":"menage" +}, +{ +"itemId":"seau", +"name":"Seau", +"emoji":"🪣", +"aliases":"bucket", +"tags":"menage" +}, +{ +"itemId":"eponges", +"name":"Éponges", +"emoji":"🧽", +"aliases":"sponges", +"tags":"menage" +}, +{ +"itemId":"chiffons", +"name":"Chiffons", +"emoji":"🧽", +"aliases":"rags", +"tags":"menage" +}, +{ +"itemId":"gants_menage", +"name":"Gants de ménage", +"emoji":"🧤", +"tags":"menage" +} +] +} +] +}, +{ +"domainId":"gifts_events", +"name":"Fêtes & Cadeaux", +"emoji":"🎁", +"color":"#E91E63", +"sortOrder":10, +"categories":[ +{ +"categoryId":"party", +"name":"Articles de Fête", +"emoji":"🎉", +"color":"#F06292", +"sortOrder":0, +"items":[ +{ +"itemId":"ballons", +"name":"Ballons", +"emoji":"🎈", +"aliases":"balloons", +"tags":"fete" +}, +{ +"itemId":"banniere", +"name":"Bannière", +"emoji":"🎊", +"tags":"fete" +}, +{ +"itemId":"bougies_anniversaire", +"name":"Bougies d'anniversaire", +"emoji":"🕯️", +"tags":"fete" +}, +{ +"itemId":"chapeaux_fete", +"name":"Chapeaux de fête", +"emoji":"🎉", +"tags":"fete" +}, +{ +"itemId":"nappes_fete", +"name":"Nappes de fête", +"emoji":"🎉", +"tags":"fete" +} +] +}, +{ +"categoryId":"gift_wrap", +"name":"Emballage Cadeaux", +"emoji":"🎀", +"color":"#EC407A", +"sortOrder":1, +"items":[ +{ +"itemId":"papier_emballage", +"name":"Papier d'emballage", +"emoji":"🎁", +"tags":"cadeau" +}, +{ +"itemId":"sac_cadeau", +"name":"Sac cadeau", +"emoji":"🎁", +"tags":"cadeau" +}, +{ +"itemId":"ruban", +"name":"Ruban", +"emoji":"🎀", +"tags":"cadeau" +}, +{ +"itemId":"carte_voeux", +"name":"Carte de vœux", +"emoji":"💌", +"aliases":"greeting card", +"tags":"cadeau" +} +] +}, +{ +"categoryId":"seasonal", +"name":"Articles Saisonniers", +"emoji":"🎄", +"color":"#EF5350", +"sortOrder":2, +"items":[ +{ +"itemId":"sapin_noel", +"name":"Sapin de Noël", +"emoji":"🎄", +"tags":"saisonnier" +}, +{ +"itemId":"boules_noel", +"name":"Boules de Noël", +"emoji":"🎄", +"tags":"saisonnier" +}, +{ +"itemId":"lumieres_noel", +"name":"Lumières de Noël", +"emoji":"💡", +"tags":"saisonnier" +}, +{ +"itemId":"sel_deglacer", +"name":"Sel à déglacer", +"emoji":"❄️", +"tags":"saisonnier" +}, +{ +"itemId":"pelle_neige", +"name":"Pelle à neige", +"emoji":"🪚", +"aliases":"snow shovel", +"tags":"saisonnier" +} +] +} +] +}, +{ +"domainId":"office_school", +"name":"Bureau & École", +"emoji":"📎", +"color":"#3F51B5", +"sortOrder":11, +"categories":[ +{ +"categoryId":"school_supplies", +"name":"Fournitures Scolaires", +"emoji":"🎒", +"color":"#5C6BC0", +"sortOrder":0, +"items":[ +{ +"itemId":"sac_ecole", +"name":"Sac d'école", +"emoji":"🎒", +"aliases":"backpack", +"tags":"ecole" +}, +{ +"itemId":"etui_crayons", +"name":"Étui à crayons", +"emoji":"✏️", +"tags":"ecole" +}, +{ +"itemId":"cartable", +"name":"Cartable", +"emoji":"📁", +"tags":"ecole" +}, +{ +"itemId":"feuilles_mobiles", +"name":"Feuilles mobiles", +"emoji":"📄", +"tags":"ecole" +}, +{ +"itemId":"crayons_couleur", +"name":"Crayons de couleur", +"emoji":"🖍️", +"tags":"ecole" +}, +{ +"itemId":"baton_colle", +"name":"Bâton de colle", +"emoji":"🧴", +"aliases":"glue stick", +"tags":"ecole" +}, +{ +"itemId":"regle", +"name":"Règle", +"emoji":"📏", +"aliases":"ruler", +"tags":"ecole" +} +] +}, +{ +"categoryId":"office", +"name":"Fournitures Bureau", +"emoji":"🖨️", +"color":"#7986CB", +"sortOrder":1, +"items":[ +{ +"itemId":"papier_imprimante", +"name":"Papier d'imprimante", +"emoji":"📄", +"tags":"bureau" +}, +{ +"itemId":"enveloppes", +"name":"Enveloppes", +"emoji":"✉️", +"tags":"bureau" +}, +{ +"itemId":"agrafeuse", +"name":"Agrafeuse", +"emoji":"📎", +"aliases":"stapler", +"tags":"bureau" +}, +{ +"itemId":"trombones", +"name":"Trombones", +"emoji":"📎", +"aliases":"paper clips", +"tags":"bureau" +}, +{ +"itemId":"post_it", +"name":"Post-it", +"emoji":"📝", +"tags":"bureau" +}, +{ +"itemId":"agenda", +"name":"Agenda", +"emoji":"📅", +"aliases":"planner", +"tags":"bureau" +} +] +} +] +} +] +} diff --git a/app/src/main/java/com/safebite/app/data/local/seed/CatalogSeedManager.kt b/app/src/main/java/com/safebite/app/data/local/seed/CatalogSeedManager.kt index 5073d9c..d8e747e 100644 --- a/app/src/main/java/com/safebite/app/data/local/seed/CatalogSeedManager.kt +++ b/app/src/main/java/com/safebite/app/data/local/seed/CatalogSeedManager.kt @@ -29,11 +29,19 @@ class CatalogSeedManager @Inject constructor( private val moshi: Moshi ) { suspend fun seedIfNeeded() = withContext(Dispatchers.IO) { - val existing = catalogDao.getDomainCount() - Log.i(TAG, "Catalog seed check: existing domains = $existing") - if (existing > 0) return@withContext + val prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE) + val storedVersion = prefs.getInt(PREF_SEED_VERSION, 0) + val jsonVersion = runCatching { + val json = context.assets.open(SEED_ASSET).bufferedReader().use { it.readText() } + moshi.adapter(CatalogSeed::class.java).fromJson(json)?.version ?: 0 + }.getOrElse { 0 } + Log.i(TAG, "Catalog seed check: storedVersion=$storedVersion, jsonVersion=$jsonVersion") + if (jsonVersion <= storedVersion) return@withContext runCatching { seedFromJson() } - .onSuccess { Log.i(TAG, "Catalog seeded successfully") } + .onSuccess { + Log.i(TAG, "Catalog seeded successfully v$jsonVersion") + prefs.edit().putInt(PREF_SEED_VERSION, jsonVersion).apply() + } .onFailure { Log.e(TAG, "Catalog seed failed: ${it.message}", it) Timber.e(it, "Catalog seed failed") @@ -102,5 +110,7 @@ class CatalogSeedManager @Inject constructor( companion object { private const val SEED_ASSET = "catalog_seed.json" private const val TAG = "CatalogSeedManager" + private const val PREFS_NAME = "catalog_seed_prefs" + private const val PREF_SEED_VERSION = "seed_version" } } diff --git a/app/src/main/java/com/safebite/app/domain/engine/CatalogProvider.kt b/app/src/main/java/com/safebite/app/domain/engine/CatalogProvider.kt index c4f535c..693e1a2 100644 --- a/app/src/main/java/com/safebite/app/domain/engine/CatalogProvider.kt +++ b/app/src/main/java/com/safebite/app/domain/engine/CatalogProvider.kt @@ -50,60 +50,130 @@ class CatalogProvider @Inject constructor() { /** Liste plate du catalogue. */ val items: List = buildList { // Fruits & Légumes - add(CatalogItem("Pomme", "Fruits & Légumes", "🍎", listOf("apple"))) - add(CatalogItem("Banane", "Fruits & Légumes", "🍌", listOf("banana"))) - add(CatalogItem("Orange", "Fruits & Légumes", "🍊")) - add(CatalogItem("Citron", "Fruits & Légumes", "🍋")) - add(CatalogItem("Fraise", "Fruits & Légumes", "🍓", listOf("strawberry"))) - add(CatalogItem("Raisin", "Fruits & Légumes", "🍇")) - add(CatalogItem("Poire", "Fruits & Légumes", "🍐")) - add(CatalogItem("Tomate", "Fruits & Légumes", "🍅")) - add(CatalogItem("Salade", "Fruits & Légumes", "🥬")) - add(CatalogItem("Carotte", "Fruits & Légumes", "🥕")) - add(CatalogItem("Brocoli", "Fruits & Légumes", "🥦")) - add(CatalogItem("Concombre", "Fruits & Légumes", "🥒")) - add(CatalogItem("Poivron", "Fruits & Légumes", "🫑")) - add(CatalogItem("Avocat", "Fruits & Légumes", "🥑")) - add(CatalogItem("Oignon", "Fruits & Légumes", "🧅")) - add(CatalogItem("Ail", "Fruits & Légumes", "🧄")) - add(CatalogItem("Pomme de terre", "Fruits & Légumes", "🥔", listOf("patate"))) - add(CatalogItem("Champignon", "Fruits & Légumes", "🍄")) - add(CatalogItem("Épinard", "Fruits & Légumes", "🥬")) - add(CatalogItem("Ananas", "Fruits & Légumes", "🍍")) - add(CatalogItem("Pêche", "Fruits & Légumes", "🍑")) - add(CatalogItem("Cerise", "Fruits & Légumes", "🍒")) - add(CatalogItem("Kiwi", "Fruits & Légumes", "🥝")) - add(CatalogItem("Mangue", "Fruits & Légumes", "🥭")) - add(CatalogItem("Melon", "Fruits & Légumes", "🍈")) - add(CatalogItem("Pastèque", "Fruits & Légumes", "🍉")) - add(CatalogItem("Noix de coco", "Fruits & Légumes", "🥥")) - add(CatalogItem("Aubergine", "Fruits & Légumes", "🍆")) - add(CatalogItem("Maïs", "Fruits & Légumes", "🌽")) - add(CatalogItem("Piment", "Fruits & Légumes", "🌶️")) - add(CatalogItem("Courgette", "Fruits & Légumes", "🥒")) - add(CatalogItem("Chou-fleur", "Fruits & Légumes", "🥦")) - add(CatalogItem("Chou", "Fruits & Légumes", "🥬")) - add(CatalogItem("Betterave", "Fruits & Légumes", "🫐")) - add(CatalogItem("Radis", "Fruits & Légumes", "🥕")) - add(CatalogItem("Navet", "Fruits & Légumes", "🥕")) - add(CatalogItem("Poireau", "Fruits & Légumes", "🥬")) - add(CatalogItem("Céleri", "Fruits & Légumes", "🥬")) - add(CatalogItem("Haricots verts", "Fruits & Légumes", "🫛")) - add(CatalogItem("Petits pois", "Fruits & Légumes", "🫛")) - add(CatalogItem("Artichaut", "Fruits & Légumes", "🥬")) - add(CatalogItem("Asperge", "Fruits & Légumes", "🥬")) - add(CatalogItem("Basilic", "Fruits & Légumes", "🌿")) - add(CatalogItem("Persil", "Fruits & Légumes", "🌿")) - add(CatalogItem("Coriandre", "Fruits & Légumes", "🌿")) - add(CatalogItem("Menthe", "Fruits & Légumes", "🌿")) - add(CatalogItem("Myrtilles", "Fruits & Légumes", "🫐")) - add(CatalogItem("Framboises", "Fruits & Légumes", "🍓")) - add(CatalogItem("Mûres", "Fruits & Légumes", "🫐")) - add(CatalogItem("Abricot", "Fruits & Légumes", "🍑")) - add(CatalogItem("Prune", "Fruits & Légumes", "🍑")) - add(CatalogItem("Figue", "Fruits & Légumes", "🍇")) - add(CatalogItem("Datte", "Fruits & Légumes", "🍇")) - add(CatalogItem("Grenade", "Fruits & Légumes", "🍎")) + add(CatalogItem("Pomme", "Fruits & Légumes", "🍎", listOf("apple", "apples", "pommes"))) + add(CatalogItem("Banane", "Fruits & Légumes", "🍌", listOf("banana", "bananas"))) + add(CatalogItem("Orange", "Fruits & Légumes", "🍊", listOf("oranges"))) + add(CatalogItem("Citron", "Fruits & Légumes", "🍋", listOf("lemon"))) + add(CatalogItem("Fraise", "Fruits & Légumes", "🍓", listOf("strawberry", "strawberries"))) + add(CatalogItem("Raisin", "Fruits & Légumes", "🍇", listOf("grapes"))) + add(CatalogItem("Poire", "Fruits & Légumes", "🍐", listOf("pear", "pears", "poires"))) + add(CatalogItem("Tomate", "Fruits & Légumes", "🍅", listOf("tomatoes"))) + add(CatalogItem("Salade", "Fruits & Légumes", "🥬", listOf("lettuce", "salad"))) + add(CatalogItem("Carotte", "Fruits & Légumes", "🥕", listOf("carrots", "carrotte"))) + add(CatalogItem("Brocoli", "Fruits & Légumes", "🥦", listOf("broccoli"))) + add(CatalogItem("Concombre", "Fruits & Légumes", "🥒", listOf("cucumber"))) + add(CatalogItem("Poivron", "Fruits & Légumes", "🫑", listOf("bell pepper", "bell peppers"))) + add(CatalogItem("Avocat", "Fruits & Légumes", "🥑", listOf("avocado"))) + add(CatalogItem("Oignon", "Fruits & Légumes", "🧅", listOf("onions"))) + add(CatalogItem("Ail", "Fruits & Légumes", "🧄", listOf("garlic"))) + add(CatalogItem("Pomme de terre", "Fruits & Légumes", "🥔", listOf("patate", "patates", "potatoes"))) + add(CatalogItem("Champignon", "Fruits & Légumes", "🍄", listOf("mushrooms", "champignons"))) + add(CatalogItem("Épinard", "Fruits & Légumes", "🥬", listOf("spinach"))) + add(CatalogItem("Ananas", "Fruits & Légumes", "🍍", listOf("pineapple"))) + add(CatalogItem("Pêche", "Fruits & Légumes", "🍑", listOf("peach"))) + add(CatalogItem("Cerise", "Fruits & Légumes", "🍒", listOf("cherries"))) + add(CatalogItem("Kiwi", "Fruits & Légumes", "🥝", listOf("kiwi fruit", "kiwis"))) + add(CatalogItem("Mangue", "Fruits & Légumes", "🥭", listOf("mangoes"))) + add(CatalogItem("Melon", "Fruits & Légumes", "🍈", listOf("melon"))) + add(CatalogItem("Pastèque", "Fruits & Légumes", "🍉", listOf("watermelon"))) + add(CatalogItem("Noix de coco", "Fruits & Légumes", "🥥", listOf("coconut"))) + add(CatalogItem("Aubergine", "Fruits & Légumes", "🍆", listOf("eggplant"))) + add(CatalogItem("Maïs", "Fruits & Légumes", "🌽", listOf("sweet corn", "corncobs", "corn cobs"))) + add(CatalogItem("Piment", "Fruits & Légumes", "🌶️", listOf("chillies", "chili", "piment jaune"))) + add(CatalogItem("Courgette", "Fruits & Légumes", "🥒", listOf("zucchini"))) + add(CatalogItem("Chou-fleur", "Fruits & Légumes", "🥦", listOf("cauliflower"))) + add(CatalogItem("Chou", "Fruits & Légumes", "🥬", listOf("cabbage"))) + add(CatalogItem("Navet", "Fruits & Légumes", "🥕", listOf("turnip"))) + add(CatalogItem("Radis", "Fruits & Légumes", "🥕", listOf("radish"))) + add(CatalogItem("Poireau", "Fruits & Légumes", "🥬", listOf("leek", "leeks"))) + add(CatalogItem("Céleri", "Fruits & Légumes", "🥬", listOf("celery"))) + add(CatalogItem("Haricots verts", "Fruits & Légumes", "🫛", listOf("green beans"))) + add(CatalogItem("Petits pois", "Fruits & Légumes", "🫛", listOf("peas"))) + add(CatalogItem("Basilic", "Fruits & Légumes", "🌿", listOf("basil"))) + add(CatalogItem("Persil", "Fruits & Légumes", "🌿", listOf("parsley"))) + add(CatalogItem("Menthe", "Fruits & Légumes", "🌿", listOf("mint"))) + add(CatalogItem("Framboises", "Fruits & Légumes", "🍓", listOf("raspberries"))) + add(CatalogItem("Mûres", "Fruits & Légumes", "🫐", listOf("blackberries"))) + add(CatalogItem("Abricot", "Fruits & Légumes", "🍑", listOf("apricot"))) + add(CatalogItem("Prune", "Fruits & Légumes", "🍑", listOf("prunes"))) + add(CatalogItem("Figue", "Fruits & Légumes", "🍇", listOf("figs"))) + add(CatalogItem("Datte", "Fruits & Légumes", "🍇", listOf("dates"))) + add(CatalogItem("Grenade", "Fruits & Légumes", "🍎", listOf("pomegranate", "pomme grenade"))) + add(CatalogItem("Açaï", "Fruits & Légumes", "🫐", listOf("acai", "açaí", "açaí berries", "acai berries"))) + add(CatalogItem("Artichaut", "Fruits & Légumes", "🥬", listOf("artichokes"))) + add(CatalogItem("Roquette", "Fruits & Légumes", "🥬", listOf("arugula"))) + add(CatalogItem("Asperge", "Fruits & Légumes", "🥬", listOf("asparagus"))) + add(CatalogItem("Betterave", "Fruits & Légumes", "🫐", listOf("beetroot", "betterave"))) + add(CatalogItem("Myrtilles", "Fruits & Légumes", "🫐", listOf("blueberries", "bleuets"))) + add(CatalogItem("Bok choy", "Fruits & Légumes", "🥬", listOf("chinese cabbage"))) + add(CatalogItem("Chou de Bruxelles", "Fruits & Légumes", "🥬", listOf("brussels sprouts", "chou bruxelles"))) + add(CatalogItem("Courge butternut", "Fruits & Légumes", "🎃", listOf("butternut pumpkin", "butternut squash"))) + add(CatalogItem("Chou frisé", "Fruits & Légumes", "🥬", listOf("kale", "chard", "chou frisé"))) + add(CatalogItem("Poirée", "Fruits & Légumes", "🥬", listOf("swiss chard"))) + add(CatalogItem("Tomate cerise", "Fruits & Légumes", "🍅", listOf("cherry tomatoes"))) + add(CatalogItem("Châtaigne", "Fruits & Légumes", "🌰", listOf("chestnuts"))) + add(CatalogItem("Chicorée", "Fruits & Légumes", "🥬", listOf("chicory"))) + add(CatalogItem("Ciboulette", "Fruits & Légumes", "🌿", listOf("chives"))) + add(CatalogItem("Coriandre", "Fruits & Légumes", "🌿", listOf("cilantro"))) + add(CatalogItem("Clémentine", "Fruits & Légumes", "🍊", listOf("clementine", "clementines"))) + add(CatalogItem("Canneberge", "Fruits & Légumes", "🫐", listOf("cranberries"))) + add(CatalogItem("Cresson", "Fruits & Légumes", "🥬", listOf("cress"))) + add(CatalogItem("Crudités", "Fruits & Légumes", "🥗", listOf("crudites"))) + add(CatalogItem("Groseille", "Fruits & Légumes", "🍇", listOf("currants"))) + add(CatalogItem("Aneth", "Fruits & Légumes", "🌿", listOf("dill"))) + add(CatalogItem("Pamplemousse", "Fruits & Légumes", "🍊", listOf("grapefruit"))) + add(CatalogItem("Citronnelle", "Fruits & Légumes", "🌿", listOf("lemongrass"))) + add(CatalogItem("Mirabelle", "Fruits & Légumes", "🍑", listOf("mirabelles"))) + add(CatalogItem("Pitaya", "Fruits & Légumes", "🐉", listOf("dragon fruit", "fruit dragon"))) + add(CatalogItem("Échalote", "Fruits & Légumes", "🧅", listOf("shallots", "échalotes"))) + add(CatalogItem("Edamame", "Fruits & Légumes", "🫛")) + add(CatalogItem("Fenouil", "Fruits & Légumes", "🥬", listOf("fennel"))) + add(CatalogItem("Fève", "Fruits & Légumes", "🫛", listOf("fèves", "fava bean", "broad bean"))) + add(CatalogItem("Fève verte", "Fruits & Légumes", "🫛", listOf("fèves vertes"))) + add(CatalogItem("Graines de lin", "Fruits & Légumes", "🌾", listOf("flaxseed", "linseed"))) + add(CatalogItem("Fruit", "Fruits & Légumes", "🍎", listOf("fruits"))) + add(CatalogItem("Plateau fruits", "Fruits & Légumes", "🍎", listOf("fruit platter"))) + add(CatalogItem("Plateau légumes", "Fruits & Légumes", "🥗", listOf("vegetable platter"))) + add(CatalogItem("Baies de goji", "Fruits & Légumes", "🍇", listOf("goji berries"))) + add(CatalogItem("Groseille à maquereau", "Fruits & Légumes", "🍇", listOf("gooseberries"))) + add(CatalogItem("Goyave", "Fruits & Légumes", "🥭", listOf("guava"))) + add(CatalogItem("Citrouille Halloween", "Fruits & Légumes", "🎃", listOf("halloween pumpkin"))) + add(CatalogItem("Herbes", "Fruits & Légumes", "🌿", listOf("herbs"))) + add(CatalogItem("Citrouille Hokkaido", "Fruits & Légumes", "🎃", listOf("hokkaido pumpkin"))) + add(CatalogItem("Melon vert", "Fruits & Légumes", "🍈", listOf("honeydew melon"))) + add(CatalogItem("Mâche", "Fruits & Légumes", "🥬", listOf("lamb's lettuce", "corn salad"))) + add(CatalogItem("Citron vert", "Fruits & Légumes", "🍋", listOf("lime", "limes"))) + add(CatalogItem("Litchi", "Fruits & Légumes", "🥭", listOf("lychee", "lychees"))) + add(CatalogItem("Mandarine", "Fruits & Légumes", "🍊", listOf("mandarins", "mandarin"))) + add(CatalogItem("Marjolaine", "Fruits & Légumes", "🌿", listOf("marjoram"))) + add(CatalogItem("Nectarine", "Fruits & Légumes", "🍑", listOf("nectarines"))) + add(CatalogItem("Oignon rouge", "Fruits & Légumes", "🧅", listOf("red onion"))) + add(CatalogItem("Oignon vert", "Fruits & Légumes", "🧅", listOf("green onion", "spring onion", "scallions"))) + add(CatalogItem("Olive", "Fruits & Légumes", "🫒", listOf("olives"))) + add(CatalogItem("Papaye", "Fruits & Légumes", "🥭", listOf("papaya"))) + add(CatalogItem("Panais", "Fruits & Légumes", "🥕", listOf("parsnips"))) + add(CatalogItem("Fruit de la passion", "Fruits & Légumes", "🍇", listOf("passion fruit"))) + add(CatalogItem("Patate douce", "Fruits & Légumes", "🍠", listOf("sweet potatoes", "patate douce"))) + add(CatalogItem("Patates parisiennes", "Fruits & Légumes", "🥔", listOf("patates parisienne"))) + add(CatalogItem("Pousse de pois", "Fruits & Légumes", "🌱", listOf("pea eggplant"))) + add(CatalogItem("Pourpier", "Fruits & Légumes", "🥬", listOf("purslane"))) + add(CatalogItem("Coing", "Fruits & Légumes", "🍏", listOf("quinces"))) + add(CatalogItem("Chou rouge", "Fruits & Légumes", "🥬", listOf("red cabbage"))) + add(CatalogItem("Rhubarbe", "Fruits & Légumes", "🥬", listOf("rhubarb"))) + add(CatalogItem("Sauge", "Fruits & Légumes", "🌿", listOf("sage"))) + add(CatalogItem("Salade au chou", "Fruits & Légumes", "🥗", listOf("coleslaw"))) + add(CatalogItem("Chou de Milan", "Fruits & Légumes", "🥬", listOf("savoy cabbage"))) + add(CatalogItem("Courge", "Fruits & Légumes", "🎃", listOf("squash"))) + add(CatalogItem("Carambole", "Fruits & Légumes", "⭐", listOf("star fruit"))) + add(CatalogItem("Tomates séchées", "Fruits & Légumes", "🍅", listOf("sun-dried tomatoes"))) + add(CatalogItem("Basilic thaï", "Fruits & Légumes", "🌿", listOf("thai basil"))) + add(CatalogItem("Thym", "Fruits & Légumes", "🌿", listOf("thyme"))) + add(CatalogItem("Tomates Savoura", "Fruits & Légumes", "🍅", listOf("savoura tomatoes"))) + add(CatalogItem("Herbe de blé", "Fruits & Légumes", "🌾", listOf("wheatgrass"))) + add(CatalogItem("Salsifis noir", "Fruits & Légumes", "🥕", listOf("black salsify"))) + add(CatalogItem("Girolles", "Fruits & Légumes", "🍄", listOf("chanterelles"))) + add(CatalogItem("Orange sanguine", "Fruits & Légumes", "🍊", listOf("blood orange"))) + add(CatalogItem("Baies", "Fruits & Légumes", "🫐", listOf("berries"))) // Boulangerie add(CatalogItem("Pain", "Boulangerie", "🍞", listOf("baguette"))) @@ -124,6 +194,54 @@ class CatalogProvider @Inject constructor() { add(CatalogItem("Éclair", "Boulangerie", "🍰")) add(CatalogItem("Tarte", "Boulangerie", "🥧")) add(CatalogItem("Gâteau", "Boulangerie", "🍰")) + add(CatalogItem("Bagel briana", "Boulangerie", "🥯")) + add(CatalogItem("Biscuits breton sans gluten", "Boulangerie", "🍪")) + add(CatalogItem("Biscuits Feuille D'Érable", "Boulangerie", "🍁")) + add(CatalogItem("Biscuits sans gluten", "Boulangerie", "🍪")) + add(CatalogItem("Biscuits swiss", "Boulangerie", "🍪")) + add(CatalogItem("Bread", "Boulangerie", "🍞")) + add(CatalogItem("Buns", "Boulangerie", "🍞")) + add(CatalogItem("Crispbread", "Boulangerie", "🍘")) + add(CatalogItem("Croûte à tarte", "Boulangerie", "🥧")) + add(CatalogItem("Dinner Rolls", "Boulangerie", "🍞")) + add(CatalogItem("Fond de tarte", "Boulangerie", "🥧")) + add(CatalogItem("Galette tortilla", "Boulangerie", "🌯")) + add(CatalogItem("Gâteau mille feuilles", "Boulangerie", "🍰")) + add(CatalogItem("Gaufres", "Boulangerie", "🧇")) + add(CatalogItem("Muffins Anglais", "Boulangerie", "🥯")) + add(CatalogItem("Pain Baguette", "Boulangerie", "🥖")) + add(CatalogItem("Pain Blanc", "Boulangerie", "🍞")) + add(CatalogItem("Pain Blanc Sans Lactose", "Boulangerie", "🍞")) + add(CatalogItem("Pain Bon Matin", "Boulangerie", "🍞")) + add(CatalogItem("Pain Briana", "Boulangerie", "🍞")) + add(CatalogItem("Pain brun", "Boulangerie", "🍞")) + add(CatalogItem("Pain burgers", "Boulangerie", "🍔")) + add(CatalogItem("Pain burgers sans gluten", "Boulangerie", "🍔")) + add(CatalogItem("Pain Croûte", "Boulangerie", "🍞")) + add(CatalogItem("Pain croûté sans gluten", "Boulangerie", "🍞")) + add(CatalogItem("Pain hamburger sans gluten", "Boulangerie", "🍔")) + add(CatalogItem("Pain Hot Dog", "Boulangerie", "🌭")) + add(CatalogItem("Pain Italien", "Boulangerie", "🥖")) + add(CatalogItem("Pain Sans Gluten", "Boulangerie", "🍞")) + add(CatalogItem("Pain Sans Lactose", "Boulangerie", "🍞")) + add(CatalogItem("Pain Sous Marin", "Boulangerie", "🥖")) + add(CatalogItem("Pains Grand Mère", "Boulangerie", "🍞")) + add(CatalogItem("Pancakes mix", "Boulangerie", "🥞")) + add(CatalogItem("Petit Pain Sandwich", "Boulangerie", "🥪")) + add(CatalogItem("Petit Pain Sous Marin", "Boulangerie", "🥖")) + add(CatalogItem("Pie", "Boulangerie", "🥧")) + add(CatalogItem("Pizza dough", "Boulangerie", "🍕")) + add(CatalogItem("Pizza sans gluten", "Boulangerie", "🍕")) + add(CatalogItem("Puff pastry", "Boulangerie", "🥐")) + add(CatalogItem("Pumpkin Pie", "Boulangerie", "🥧")) + add(CatalogItem("Rolls", "Boulangerie", "🍞")) + add(CatalogItem("Scones", "Boulangerie", "🧁")) + add(CatalogItem("Sliced bread", "Boulangerie", "🍞")) + add(CatalogItem("Toast", "Boulangerie", "🍞")) + add(CatalogItem("Toast melba", "Boulangerie", "🍞")) + add(CatalogItem("Tortilla", "Boulangerie", "🌯")) + add(CatalogItem("Vol au vent", "Boulangerie", "🥐")) + add(CatalogItem("Waffles", "Boulangerie", "🧇")) // Produits laitiers add(CatalogItem("Lait", "Produits laitiers", "🥛", listOf("milk"))) @@ -151,6 +269,59 @@ class CatalogProvider @Inject constructor() { add(CatalogItem("Lait de soja", "Produits laitiers", "🥛")) add(CatalogItem("Lait d'amande", "Produits laitiers", "🥛")) add(CatalogItem("Margarine", "Produits laitiers", "🧈")) + add(CatalogItem("Beurre Sans Lactose", "Produits laitiers", "🧈")) + add(CatalogItem("Cream", "Produits laitiers", "🥛")) + add(CatalogItem("Cream cheese", "Produits laitiers", "🧀")) + add(CatalogItem("Crème 10%", "Produits laitiers", "🥛")) + add(CatalogItem("Crème à café", "Produits laitiers", "🥛")) + add(CatalogItem("Creme fraiche", "Produits laitiers", "🥛")) + add(CatalogItem("Crème Glacée", "Produits laitiers", "🍨")) + add(CatalogItem("Crème glacée Sans Lactose", "Produits laitiers", "🍨")) + add(CatalogItem("Crème Glacée Sans Lactose Au Chocolat", "Produits laitiers", "🍨")) + add(CatalogItem("Crème Sans Lactose", "Produits laitiers", "🥛")) + add(CatalogItem("Crème Sure", "Produits laitiers", "🥛")) + add(CatalogItem("Sour cream", "Produits laitiers", "🥛")) + add(CatalogItem("Blue cheese", "Produits laitiers", "🧀")) + add(CatalogItem("Crotte De Fromage", "Produits laitiers", "🧀")) + add(CatalogItem("Demi Lune", "Produits laitiers", "🧀")) + add(CatalogItem("Fondue Fromage", "Produits laitiers", "🧀")) + add(CatalogItem("Frite du petit Québec", "Produits laitiers", "🧀")) + add(CatalogItem("Fromage à tartiner", "Produits laitiers", "🧀")) + add(CatalogItem("Fromage Briana", "Produits laitiers", "🧀")) + add(CatalogItem("Fromage Chèvre Confiture", "Produits laitiers", "🧀")) + add(CatalogItem("fromage cottage sans lactose", "Produits laitiers", "🧀")) + add(CatalogItem("Fromage Déjà Rappé", "Produits laitiers", "🧀")) + add(CatalogItem("Fromage en grains", "Produits laitiers", "🧀")) + add(CatalogItem("fromage en tranches", "Produits laitiers", "🧀")) + add(CatalogItem("Fromage Philadelphia", "Produits laitiers", "🧀")) + add(CatalogItem("Fromage Philadelphia sans lactose", "Produits laitiers", "🧀")) + add(CatalogItem("Fromage Quick Quick", "Produits laitiers", "🧀")) + add(CatalogItem("Fromage Rapé Briana", "Produits laitiers", "🧀")) + add(CatalogItem("Fromage rapé sans lactose", "Produits laitiers", "🧀")) + add(CatalogItem("Fromage Riviera", "Produits laitiers", "🧀")) + add(CatalogItem("Fromage Sans Lactose", "Produits laitiers", "🧀")) + add(CatalogItem("Fromage suisse", "Produits laitiers", "🧀")) + add(CatalogItem("Fromage tex mex", "Produits laitiers", "🧀")) + add(CatalogItem("Fromage Vache Qui Rit", "Produits laitiers", "🧀")) + add(CatalogItem("Grated cheese", "Produits laitiers", "🧀")) + add(CatalogItem("Grilled cheese", "Produits laitiers", "🧀")) + add(CatalogItem("Parmesan sans lactose", "Produits laitiers", "🧀")) + add(CatalogItem("Quark", "Produits laitiers", "🧀")) + add(CatalogItem("Lait avoine", "Produits laitiers", "🥛")) + add(CatalogItem("Lait avoine lunch", "Produits laitiers", "🥛")) + add(CatalogItem("Lait avoine lunch chocolat", "Produits laitiers", "🥛")) + add(CatalogItem("Lait Chocolat", "Produits laitiers", "🥛")) + add(CatalogItem("Lait Chocolat Lunch", "Produits laitiers", "🥛")) + add(CatalogItem("Lait Chocolat Sans Lactose", "Produits laitiers", "🥛")) + add(CatalogItem("Lait condensé coco", "Produits laitiers", "🥛")) + add(CatalogItem("Lait Sans Lactose", "Produits laitiers", "🥛")) + add(CatalogItem("Lait Soya Lunch", "Produits laitiers", "🥛")) + add(CatalogItem("Lait Soya Sensationnel Nature", "Produits laitiers", "🥛")) + add(CatalogItem("Soy Milk", "Produits laitiers", "🥛")) + add(CatalogItem("Soy yogurt", "Produits laitiers", "🥣")) + add(CatalogItem("Yogourt iogo Vanille", "Produits laitiers", "🥣")) + add(CatalogItem("Yogourt logo vanille sans lactose", "Produits laitiers", "🥣")) + add(CatalogItem("Yogourt Sans Lactose", "Produits laitiers", "🥣")) // Boucherie add(CatalogItem("Poulet", "Boucherie", "🍗")) diff --git a/app/src/main/java/com/safebite/app/domain/engine/CategoryEngine.kt b/app/src/main/java/com/safebite/app/domain/engine/CategoryEngine.kt index 15bb56b..d40d39d 100644 --- a/app/src/main/java/com/safebite/app/domain/engine/CategoryEngine.kt +++ b/app/src/main/java/com/safebite/app/domain/engine/CategoryEngine.kt @@ -53,9 +53,9 @@ class CategoryEngine @Inject constructor() { // ── Mots-clés par catégorie ───────────────────────────────────────────── - private val freshKeywords = listOf("frais", "fraise", "framboise", "myrtille", "salade", "tomate", "concombre") - - private val fruitKeywords = listOf("pomme", "poire", "banane", "orange", "citron", "raisin", "fraise", "fruit", "abricot", "peche", "cerise", "melon", "pasteque", "ananas", "mangue", "kiwi", "legume", "carotte", "poireau", "epinard", "brocoli", "chou", "courgette", "aubergine", "poivron", "avocat", "haricot") + private val freshKeywords = listOf("frais", "fraise", "framboise", "myrtille", "salade", "tomate", "concombre", "crudite") + + private val fruitKeywords = listOf("pomme", "poire", "banane", "orange", "citron", "raisin", "fraise", "fruit", "abricot", "peche", "cerise", "melon", "pasteque", "ananas", "mangue", "kiwi", "legume", "carotte", "poireau", "epinard", "brocoli", "chou", "courgette", "aubergine", "poivron", "avocat", "haricot", "artichaut", "asperge", "betterave", "myrtille", "bok choy", "chou de bruxelles", "courge", "chou frise", "poiree", "tomate cerise", "chataigne", "chicoree", "piment", "ciboulette", "coriandre", "clementine", "canneberge", "cresson", "groseille", "aneth", "pitaya", "echalote", "edamame", "fenouil", "feve", "graines de lin", "baies de goji", "groseille a maquereau", "goyave", "citrouille", "herbes", "mache", "citron vert", "litchi", "mandarine", "marjolaine", "nectarine", "oignon", "olive", "papaye", "panais", "fruit de la passion", "patate", "pourpier", "coing", "chou rouge", "rhubarbe", "sauge", "salade au chou", "chou de milan", "carambole", "tomates sechees", "basilic thai", "thym", "herbe de ble", "salsifis", "girolle", "orange sanguine", "baies", "acai", "grenade", "prune", "figue", "datte", "navet", "radis", "celeri", "menthe", "persil", "basilic") private val bakeryKeywords = listOf("pain", "baguette", "biscotte", "croissant", "brioche", "boulang", "patisserie", "gateau", "tarte") diff --git a/app/src/main/java/com/safebite/app/presentation/screen/catalog/CatalogScreens.kt b/app/src/main/java/com/safebite/app/presentation/screen/catalog/CatalogScreens.kt index ddb36cd..be87c32 100644 --- a/app/src/main/java/com/safebite/app/presentation/screen/catalog/CatalogScreens.kt +++ b/app/src/main/java/com/safebite/app/presentation/screen/catalog/CatalogScreens.kt @@ -287,7 +287,7 @@ private fun ItemTile(item: CatalogItemEntity, onClick: () -> Unit) { horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { - Text(text = item.emoji, style = MaterialTheme.typography.displaySmall) + Text(text = item.emoji, style = MaterialTheme.typography.displayMedium) Spacer(Modifier.height(6.dp)) Text( text = item.name, diff --git a/app/src/main/java/com/safebite/app/presentation/screen/lists/ListDetailScreen.kt b/app/src/main/java/com/safebite/app/presentation/screen/lists/ListDetailScreen.kt index 215e719..bb8cfc4 100644 --- a/app/src/main/java/com/safebite/app/presentation/screen/lists/ListDetailScreen.kt +++ b/app/src/main/java/com/safebite/app/presentation/screen/lists/ListDetailScreen.kt @@ -145,6 +145,10 @@ fun ListDetailScreen( var recentlyExpanded by remember { mutableStateOf(true) } val expandedCategories = remember { mutableStateMapOf() } + val catalogDomains by viewModel.catalogDomains.collectAsStateWithLifecycle() + val expandedDomains = remember { mutableStateMapOf() } + val expandedRoomCategories = remember { mutableStateMapOf() } + var showPhotoPicker by remember { mutableStateOf(false) } var showDescriptionDialog by remember { mutableStateOf(false) } var selectedImageUri by remember { mutableStateOf(null) } @@ -280,18 +284,22 @@ fun ListDetailScreen( is ListDetailViewModel.UiState.Ready -> { ListDetailContent( ready = s, - catalog = viewModel.catalog, + catalogDomains = catalogDomains, recentlyExpanded = recentlyExpanded, onToggleRecently = { recentlyExpanded = !recentlyExpanded }, - expandedCategories = expandedCategories, - onToggleCategory = { cat -> - expandedCategories[cat] = !(expandedCategories[cat] ?: false) + expandedDomains = expandedDomains, + onToggleDomain = { domainId -> + expandedDomains[domainId] = !(expandedDomains[domainId] ?: false) + }, + expandedRoomCategories = expandedRoomCategories, + onToggleRoomCategory = { catId -> + expandedRoomCategories[catId] = !(expandedRoomCategories[catId] ?: false) }, onTapActive = viewModel::markAsBought, onLongPressActive = viewModel::openItemDetails, onTapRecent = viewModel::restoreItem, onLongPressRecent = viewModel::openItemDetails, - onTapCatalog = viewModel::addCatalogItem + onTapCatalogItem = viewModel::addCatalogItem ) } } @@ -401,36 +409,21 @@ fun ListDetailScreen( @Composable private fun ListDetailContent( ready: ListDetailViewModel.UiState.Ready, - catalog: CatalogProvider, + catalogDomains: List, recentlyExpanded: Boolean, onToggleRecently: () -> Unit, - expandedCategories: Map, - onToggleCategory: (String) -> Unit, + expandedDomains: Map, + onToggleDomain: (String) -> Unit, + expandedRoomCategories: Map, + onToggleRoomCategory: (String) -> Unit, onTapActive: (Long) -> Unit, onLongPressActive: (Long) -> Unit, onTapRecent: (Long) -> Unit, onLongPressRecent: (Long) -> Unit, - onTapCatalog: (CatalogProvider.CatalogItem) -> Unit + onTapCatalogItem: (com.safebite.app.data.local.database.entity.CatalogItemEntity) -> Unit ) { val dimens = LocalDimens.current - val filteredCatalogCounts = remember(ready.activeItems, ready.recentlyUsed) { - catalog.categories.associateWith { category -> - catalog.itemsForCategory(category).count { catItem -> - ready.activeItems.none { it.productName.equals(catItem.name, ignoreCase = true) } && - ready.recentlyUsed.none { it.productName.equals(catItem.name, ignoreCase = true) } - } - } - } - - val orderedCategories = remember(ready.list) { - val order = ready.list?.categoryOrder?.split(",")?.filter { it.isNotBlank() } - val visible = ready.list?.visibleCategories?.split(",")?.filter { it.isNotBlank() }?.toSet() - val base = order ?: catalog.categories - val filtered = if (visible != null) base.filter { it in visible } else base - filtered.filter { it in catalog.categories } - } - LazyColumn( modifier = Modifier.fillMaxSize(), contentPadding = PaddingValues( @@ -498,7 +491,7 @@ private fun ListDetailContent( } } - // ── Catalogue par catégorie ───────────────────────────────────────── + // ── Catalogue Room (domaines → catégories → articles) ──────────── item { HorizontalDivider( modifier = Modifier.padding(vertical = dimens.spacingSm), @@ -512,40 +505,47 @@ private fun ListDetailContent( ) } - orderedCategories.forEach { category -> - val expanded = expandedCategories[category] ?: false - item(key = "header-$category") { + catalogDomains.forEach { domainWithCats -> + val domainId = domainWithCats.domain.domainId + val domainExpanded = expandedDomains[domainId] ?: false + val domainItemCount = domainWithCats.categoriesWithItems.sumOf { cat -> + cat.items.count { item -> + ready.activeItems.none { it.productName.equals(item.name, ignoreCase = true) } && + ready.recentlyUsed.none { it.productName.equals(item.name, ignoreCase = true) } + } + } + item(key = "domain-header-$domainId") { CollapsibleHeader( - title = category, - count = filteredCatalogCounts[category] ?: 0, - expanded = expanded, - onToggle = { onToggleCategory(category) } + title = "${domainWithCats.domain.emoji} ${domainWithCats.domain.name}", + count = domainItemCount, + expanded = domainExpanded, + onToggle = { onToggleDomain(domainId) } ) } - if (expanded) { - item(key = "grid-$category") { - val items = catalog.itemsForCategory(category).filter { catItem -> - ready.activeItems.none { it.productName.equals(catItem.name, ignoreCase = true) } && - ready.recentlyUsed.none { it.productName.equals(catItem.name, ignoreCase = true) } + if (domainExpanded) { + domainWithCats.categoriesWithItems.forEach { catWithItems -> + val catId = catWithItems.category.categoryId + val catExpanded = expandedRoomCategories[catId] ?: false + val filteredItems = catWithItems.items.filter { item -> + ready.activeItems.none { it.productName.equals(item.name, ignoreCase = true) } && + ready.recentlyUsed.none { it.productName.equals(item.name, ignoreCase = true) } } - TileGrid( - items = items.map { - TileData( - id = it.name.hashCode().toLong(), - label = it.name, - note = null, - emoji = it.emoji, - imageUrl = null, - tone = TileTone.Catalog, - badgeWarning = false + item(key = "cat-header-$catId") { + CollapsibleHeader( + title = " ${catWithItems.category.emoji} ${catWithItems.category.name}", + count = filteredItems.size, + expanded = catExpanded, + onToggle = { onToggleRoomCategory(catId) } + ) + } + if (catExpanded && filteredItems.isNotEmpty()) { + item(key = "cat-grid-$catId") { + CatalogItemGrid( + items = filteredItems, + onTap = onTapCatalogItem ) - }, - onTap = { idHash -> - val target = items.firstOrNull { it.name.hashCode().toLong() == idHash } - target?.let(onTapCatalog) - }, - onLongPress = { /* pas d'action sur le catalogue */ } - ) + } + } } } } @@ -775,6 +775,86 @@ private fun CollapsibleHeader( } } +// ───────────────────────────────────────────────────────────────────────────── +// Tuiles catalogue Room (style identique au header catalogue) +// ───────────────────────────────────────────────────────────────────────────── + +@Composable +private fun CatalogItemGrid( + items: List, + onTap: (com.safebite.app.data.local.database.entity.CatalogItemEntity) -> Unit +) { + if (items.isEmpty()) return + val dimens = LocalDimens.current + val columns = 3 + val rows = items.chunked(columns) + Column(verticalArrangement = Arrangement.spacedBy(dimens.spacingSm)) { + rows.forEach { row -> + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(dimens.spacingSm) + ) { + row.forEach { item -> + Box(modifier = Modifier.weight(1f)) { + CatalogItemTile(item = item, onTap = { onTap(item) }) + } + } + repeat(columns - row.size) { + Spacer(modifier = Modifier.weight(1f)) + } + } + } + } +} + +@Composable +private fun CatalogItemTile( + item: com.safebite.app.data.local.database.entity.CatalogItemEntity, + onTap: () -> Unit +) { + Card( + modifier = Modifier + .fillMaxWidth() + .aspectRatio(1f) + .clickable(onClick = onTap), + shape = RoundedCornerShape(16.dp), + colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surfaceVariant) + ) { + Box( + modifier = Modifier + .fillMaxSize() + .padding(8.dp), + contentAlignment = Alignment.Center + ) { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center, + modifier = Modifier.fillMaxSize() + ) { + Text( + text = item.emoji, + style = MaterialTheme.typography.displayMedium + ) + Spacer(modifier = Modifier.height(6.dp)) + Text( + text = item.name, + style = MaterialTheme.typography.labelMedium, + fontWeight = FontWeight.SemiBold, + textAlign = TextAlign.Center, + maxLines = 2, + overflow = TextOverflow.Ellipsis + ) + } + Icon( + imageVector = Icons.Filled.Add, + contentDescription = "Ajouter", + tint = MaterialTheme.colorScheme.primary, + modifier = Modifier.align(Alignment.TopEnd).size(20.dp) + ) + } + } +} + // ───────────────────────────────────────────────────────────────────────────── // État vide pour la liste active // ───────────────────────────────────────────────────────────────────────────── diff --git a/app/src/main/java/com/safebite/app/presentation/screen/lists/ListDetailViewModel.kt b/app/src/main/java/com/safebite/app/presentation/screen/lists/ListDetailViewModel.kt index bc2e07e..a945b53 100644 --- a/app/src/main/java/com/safebite/app/presentation/screen/lists/ListDetailViewModel.kt +++ b/app/src/main/java/com/safebite/app/presentation/screen/lists/ListDetailViewModel.kt @@ -4,6 +4,9 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.safebite.app.data.local.database.entity.ShoppingListEntity import com.safebite.app.data.local.database.entity.ShoppingListItemEntity +import com.safebite.app.data.local.database.entity.CatalogItemEntity +import com.safebite.app.data.local.database.relation.DomainWithCategoriesAndItems +import com.safebite.app.data.repository.CatalogRepository import com.safebite.app.domain.engine.CatalogProvider import com.safebite.app.domain.engine.CategoryEngine import com.safebite.app.domain.usecase.GetShoppingListsUseCase @@ -40,6 +43,7 @@ class ListDetailViewModel @Inject constructor( private val manageListUseCase: ManageShoppingListUseCase, private val getListsUseCase: GetShoppingListsUseCase, private val categoryEngine: CategoryEngine, + private val catalogRepository: CatalogRepository, val catalog: CatalogProvider ) : ViewModel() { @@ -112,6 +116,11 @@ class ListDetailViewModel @Inject constructor( .observeActive() .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptyList()) + /** Catalogue Room hiérarchique (domaines → catégories → articles). */ + val catalogDomains: StateFlow> = catalogRepository + .observeDomainsWithCategoriesAndItems() + .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptyList()) + fun initList(listId: Long, listName: String) { _listIdFlow.value = listId _listName.value = listName @@ -201,11 +210,10 @@ class ListDetailViewModel @Inject constructor( clearSearch() } - /** Ajoute un article du catalogue à la liste active. */ + /** Ajoute un article du catalogue legacy à la liste active. */ fun addCatalogItem(catalogItem: CatalogProvider.CatalogItem) { viewModelScope.launch { val listId = _listIdFlow.value - // Si l'article existe déjà (en actif ou recently used), on le réactive. val existing = manageListUseCase.getItems(listId) .firstOrNull { it.productName.equals(catalogItem.name, ignoreCase = true) } if (existing != null) { @@ -225,6 +233,33 @@ class ListDetailViewModel @Inject constructor( } } + /** Ajoute un article du catalogue Room à la liste active. */ + fun addCatalogItem(item: CatalogItemEntity) { + viewModelScope.launch { + val listId = _listIdFlow.value + val existing = manageListUseCase.getItems(listId) + .firstOrNull { it.productName.equals(item.name, ignoreCase = true) } + if (existing != null) { + if (existing.isChecked) { + manageListUseCase.setItemChecked(existing.id, false) + } + return@launch + } + val categoryName = item.primaryCategoryId?.let { catId -> + catalogRepository.getCategory(catId)?.name + } ?: categoryEngine.detectCategory(item.name) + manageListUseCase.addItemToList( + listId, + ShoppingListItemEntity( + listId = listId, + productName = item.name, + category = categoryName, + customEmoji = item.emoji + ) + ) + } + } + /** Crée un *own item* à partir de la saisie utilisateur (avec quantité optionnelle). */ fun addCustomItem(rawText: String) { val trimmed = rawText.trim() diff --git a/update_bakery_dairy.py b/update_bakery_dairy.py new file mode 100644 index 0000000..0846037 --- /dev/null +++ b/update_bakery_dairy.py @@ -0,0 +1,209 @@ +import json, re, unicodedata + +def slugify(name): + s = unicodedata.normalize('NFKD', name).encode('ascii', 'ignore').decode('ascii').lower() + s = re.sub(r'[^a-z0-9\s]', '', s) + s = s.strip().replace(' ', '_') + return s + +# Items à ajouter +bakery_items = [ + ("Bagel briana", "bagel", "🥯"), + ("Bagels", "bagel", "🥯"), + ("Baguette", "pain", "🥖"), + ("Biscuits breton sans gluten", "biscuit", "🍪"), + ("Biscuits Feuille D'Érable", "biscuit", "🍁"), + ("Biscuits sans gluten", "biscuit", "🍪"), + ("Biscuits swiss", "biscuit", "🍪"), + ("Bread", "pain", "🍞"), + ("Buns", "pain", "🍞"), + ("Crispbread", "biscuit", "🍘"), + ("Croissant", "viennoiserie", "🥐"), + ("Croûte à tarte", "patisserie", "🥧"), + ("Dinner Rolls", "pain", "🍞"), + ("Donuts", "patisserie", "🍩"), + ("Fond de tarte", "patisserie", "🥧"), + ("Galette tortilla", "pain", "🌯"), + ("Gâteau mille feuilles", "patisserie", "🍰"), + ("Gaufres", "patisserie", "🧇"), + ("Muffins", "patisserie", "🧁"), + ("Muffins Anglais", "pain", "🥯"), + ("Pain Baguette", "pain", "🥖"), + ("Pain Blanc", "pain", "🍞"), + ("Pain Blanc Sans Lactose", "pain", "🍞"), + ("Pain Bon Matin", "pain", "🍞"), + ("Pain Briana", "pain", "🍞"), + ("Pain brun", "pain", "🍞"), + ("Pain burgers", "pain", "🍔"), + ("Pain burgers sans gluten", "pain", "🍔"), + ("Pain Croûte", "pain", "🍞"), + ("Pain croûté sans gluten", "pain", "🍞"), + ("Pain hamburger", "pain", "🍔"), + ("Pain hamburger sans gluten", "pain", "🍔"), + ("Pain Hot Dog", "pain", "🌭"), + ("Pain Italien", "pain", "🥖"), + ("Pain Sans Gluten", "pain", "🍞"), + ("Pain Sans Lactose", "pain", "🍞"), + ("Pain Sous Marin", "pain", "🥖"), + ("Pains Grand Mère", "pain", "🍞"), + ("Pancakes mix", "patisserie", "🥞"), + ("Petit Pain Sandwich", "pain", "🥪"), + ("Petit Pain Sous Marin", "pain", "🥖"), + ("Pie", "patisserie", "🥧"), + ("Pizza dough", "patisserie", "🍕"), + ("Pizza sans gluten", "patisserie", "🍕"), + ("Puff pastry", "patisserie", "🥐"), + ("Pumpkin Pie", "patisserie", "🥧"), + ("Rolls", "pain", "🍞"), + ("Scones", "patisserie", "🧁"), + ("Sliced bread", "pain", "🍞"), + ("Toast", "pain", "🍞"), + ("Toast melba", "pain", "🍞"), + ("Tortilla", "pain", "🌯"), + ("Tortillas", "pain", "🌯"), + ("Vol au vent", "patisserie", "🥐"), + ("Waffles", "patisserie", "🧇"), +] + +dairy_items = [ + # Beurres, margarines, crèmes + ("Beurre Sans Lactose", "beurre", "🧈"), + ("Butter", "beurre", "🧈"), + ("Margarine", "beurre", "🧈"), + ("Cream", "creme", "🥛"), + ("Cream cheese", "fromage", "🧀"), + ("Crème 10%", "creme", "🥛"), + ("Crème à café", "creme", "🥛"), + ("Creme fraiche", "creme", "🥛"), + ("Crème Glacée", "creme", "🍨"), + ("Crème glacée Sans Lactose", "creme", "🍨"), + ("Crème Glacée Sans Lactose Au Chocolat", "creme", "🍨"), + ("Crème Sans Lactose", "creme", "🥛"), + ("Crème Sure", "creme", "🥛"), + ("Sour cream", "creme", "🥛"), + # Fromages + ("Blue cheese", "fromage", "🧀"), + ("Brie", "fromage", "🧀"), + ("Cheddar", "fromage", "🧀"), + ("Cheese", "fromage", "🧀"), + ("Cottage cheese", "fromage", "🧀"), + ("Crotte De Fromage", "fromage", "🧀"), + ("Demi Lune", "fromage", "🧀"), + ("Feta", "fromage", "🧀"), + ("Fondue Fromage", "fromage", "🧀"), + ("Frite du petit Québec", "fromage", "🧀"), + ("Fromage", "fromage", "🧀"), + ("Fromage à tartiner", "fromage", "🧀"), + ("Fromage Briana", "fromage", "🧀"), + ("Fromage chèvre", "fromage", "🧀"), + ("Fromage Chèvre Confiture", "fromage", "🧀"), + ("Fromage Cottage", "fromage", "🧀"), + ("fromage cottage sans lactose", "fromage", "🧀"), + ("Fromage de chèvre", "fromage", "🧀"), + ("Fromage Déjà Rappé", "fromage", "🧀"), + ("Fromage en grains", "fromage", "🧀"), + ("fromage en tranches", "fromage", "🧀"), + ("Fromage Mozzarella", "fromage", "🧀"), + ("Fromage Philadelphia", "fromage", "🧀"), + ("Fromage Philadelphia sans lactose", "fromage", "🧀"), + ("Fromage Quick Quick", "fromage", "🧀"), + ("Fromage Rapé Briana", "fromage", "🧀"), + ("Fromage rapé sans lactose", "fromage", "🧀"), + ("Fromage Riviera", "fromage", "🧀"), + ("Fromage Sans Lactose", "fromage", "🧀"), + ("Fromage suisse", "fromage", "🧀"), + ("Fromage tex mex", "fromage", "🧀"), + ("Fromage Vache Qui Rit", "fromage", "🧀"), + ("Gorgonzola", "fromage", "🧀"), + ("Grated cheese", "fromage", "🧀"), + ("Grilled cheese", "fromage", "🧀"), + ("Mascarpone", "fromage", "🧀"), + ("Mozzarella", "fromage", "🧀"), + ("Parmesan", "fromage", "🧀"), + ("Parmesan sans lactose", "fromage", "🧀"), + ("Quark", "fromage", "🧀"), + ("Ricotta", "fromage", "🧀"), + # Laits et laits végétaux + ("lait", "laitier", "🥛"), + ("Lait avoine", "laitier", "🥛"), + ("Lait avoine lunch", "laitier", "🥛"), + ("Lait avoine lunch chocolat", "laitier", "🥛"), + ("Lait Chocolat", "laitier", "🥛"), + ("Lait Chocolat Lunch", "laitier", "🥛"), + ("Lait Chocolat Sans Lactose", "laitier", "🥛"), + ("Lait condensé coco", "laitier", "🥛"), + ("Lait D'amande", "laitier", "🥛"), + ("Lait Sans Lactose", "laitier", "🥛"), + ("Lait Soya Lunch", "laitier", "🥛"), + ("Lait Soya Sensationnel Nature", "laitier", "🥛"), + ("Milk", "laitier", "🥛"), + ("Soy Milk", "laitier", "🥛"), + # Yogourts + ("Soy yogurt", "yogourt", "🥣"), + ("Yogourt iogo Vanille", "yogourt", "🥣"), + ("Yogourt logo vanille sans lactose", "yogourt", "🥣"), + ("Yogourt Sans Lactose", "yogourt", "🥣"), + ("Yogurt", "yogourt", "🥣"), +] + +with open('app/src/main/assets/catalog_seed.json', 'r', encoding='utf-8') as f: + data = json.load(f) + +data['version'] = 3 + +for domain in data['domains']: + if domain.get('domainId') != 'grocery': + continue + for cat in domain.get('categories', []): + cat_id = cat.get('categoryId') + existing_names = {i['name'].lower() for i in cat.get('items', [])} + existing_ids = {i['itemId'] for i in cat.get('items', [])} + + if cat_id == 'bakery': + new_items = [] + for name, tag, emoji in bakery_items: + if name.lower() in existing_names: + continue + item_id = slugify(name) + # éviter doublons d'itemId + base_id = item_id + suffix = 1 + while item_id in existing_ids: + item_id = f"{base_id}_{suffix}" + suffix += 1 + existing_ids.add(item_id) + new_items.append({ + "itemId": item_id, + "name": name, + "emoji": emoji, + "tags": tag + }) + cat['items'] = cat.get('items', []) + new_items + print(f"Bakery: added {len(new_items)} items, total {len(cat['items'])}") + + elif cat_id == 'dairy': + new_items = [] + for name, tag, emoji in dairy_items: + if name.lower() in existing_names: + continue + item_id = slugify(name) + base_id = item_id + suffix = 1 + while item_id in existing_ids: + item_id = f"{base_id}_{suffix}" + suffix += 1 + existing_ids.add(item_id) + new_items.append({ + "itemId": item_id, + "name": name, + "emoji": emoji, + "tags": tag + }) + cat['items'] = cat.get('items', []) + new_items + print(f"Dairy: added {len(new_items)} items, total {len(cat['items'])}") + +with open('app/src/main/assets/catalog_seed.json', 'w', encoding='utf-8') as f: + json.dump(data, f, ensure_ascii=False, indent=0, separators=(',', ':')) + f.write('\n') + +print(f"Done, version={data['version']}") diff --git a/update_provider.py b/update_provider.py new file mode 100644 index 0000000..659431a --- /dev/null +++ b/update_provider.py @@ -0,0 +1,129 @@ +import re + +bakery_additions = [ + ' add(CatalogItem("Bagel briana", "Boulangerie", "🥯"))', + ' add(CatalogItem("Biscuits breton sans gluten", "Boulangerie", "🍪"))', + ' add(CatalogItem("Biscuits Feuille D\'Érable", "Boulangerie", "🍁"))', + ' add(CatalogItem("Biscuits sans gluten", "Boulangerie", "🍪"))', + ' add(CatalogItem("Biscuits swiss", "Boulangerie", "🍪"))', + ' add(CatalogItem("Bread", "Boulangerie", "🍞"))', + ' add(CatalogItem("Buns", "Boulangerie", "🍞"))', + ' add(CatalogItem("Crispbread", "Boulangerie", "🍘"))', + ' add(CatalogItem("Croûte à tarte", "Boulangerie", "🥧"))', + ' add(CatalogItem("Dinner Rolls", "Boulangerie", "🍞"))', + ' add(CatalogItem("Fond de tarte", "Boulangerie", "🥧"))', + ' add(CatalogItem("Galette tortilla", "Boulangerie", "🌯"))', + ' add(CatalogItem("Gâteau mille feuilles", "Boulangerie", "🍰"))', + ' add(CatalogItem("Gaufres", "Boulangerie", "🧇"))', + ' add(CatalogItem("Muffins Anglais", "Boulangerie", "🥯"))', + ' add(CatalogItem("Pain Baguette", "Boulangerie", "🥖"))', + ' add(CatalogItem("Pain Blanc", "Boulangerie", "🍞"))', + ' add(CatalogItem("Pain Blanc Sans Lactose", "Boulangerie", "🍞"))', + ' add(CatalogItem("Pain Bon Matin", "Boulangerie", "🍞"))', + ' add(CatalogItem("Pain Briana", "Boulangerie", "🍞"))', + ' add(CatalogItem("Pain brun", "Boulangerie", "🍞"))', + ' add(CatalogItem("Pain burgers", "Boulangerie", "🍔"))', + ' add(CatalogItem("Pain burgers sans gluten", "Boulangerie", "🍔"))', + ' add(CatalogItem("Pain Croûte", "Boulangerie", "🍞"))', + ' add(CatalogItem("Pain croûté sans gluten", "Boulangerie", "🍞"))', + ' add(CatalogItem("Pain hamburger sans gluten", "Boulangerie", "🍔"))', + ' add(CatalogItem("Pain Hot Dog", "Boulangerie", "🌭"))', + ' add(CatalogItem("Pain Italien", "Boulangerie", "🥖"))', + ' add(CatalogItem("Pain Sans Gluten", "Boulangerie", "🍞"))', + ' add(CatalogItem("Pain Sans Lactose", "Boulangerie", "🍞"))', + ' add(CatalogItem("Pain Sous Marin", "Boulangerie", "🥖"))', + ' add(CatalogItem("Pains Grand Mère", "Boulangerie", "🍞"))', + ' add(CatalogItem("Pancakes mix", "Boulangerie", "🥞"))', + ' add(CatalogItem("Petit Pain Sandwich", "Boulangerie", "🥪"))', + ' add(CatalogItem("Petit Pain Sous Marin", "Boulangerie", "🥖"))', + ' add(CatalogItem("Pie", "Boulangerie", "🥧"))', + ' add(CatalogItem("Pizza dough", "Boulangerie", "🍕"))', + ' add(CatalogItem("Pizza sans gluten", "Boulangerie", "🍕"))', + ' add(CatalogItem("Puff pastry", "Boulangerie", "🥐"))', + ' add(CatalogItem("Pumpkin Pie", "Boulangerie", "🥧"))', + ' add(CatalogItem("Rolls", "Boulangerie", "🍞"))', + ' add(CatalogItem("Scones", "Boulangerie", "🧁"))', + ' add(CatalogItem("Sliced bread", "Boulangerie", "🍞"))', + ' add(CatalogItem("Toast", "Boulangerie", "🍞"))', + ' add(CatalogItem("Toast melba", "Boulangerie", "🍞"))', + ' add(CatalogItem("Tortilla", "Boulangerie", "🌯"))', + ' add(CatalogItem("Vol au vent", "Boulangerie", "🥐"))', + ' add(CatalogItem("Waffles", "Boulangerie", "🧇"))', +] + +dairy_additions = [ + ' add(CatalogItem("Beurre Sans Lactose", "Produits laitiers", "🧈"))', + ' add(CatalogItem("Cream", "Produits laitiers", "🥛"))', + ' add(CatalogItem("Cream cheese", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Crème 10%", "Produits laitiers", "🥛"))', + ' add(CatalogItem("Crème à café", "Produits laitiers", "🥛"))', + ' add(CatalogItem("Creme fraiche", "Produits laitiers", "🥛"))', + ' add(CatalogItem("Crème Glacée", "Produits laitiers", "🍨"))', + ' add(CatalogItem("Crème glacée Sans Lactose", "Produits laitiers", "🍨"))', + ' add(CatalogItem("Crème Glacée Sans Lactose Au Chocolat", "Produits laitiers", "🍨"))', + ' add(CatalogItem("Crème Sans Lactose", "Produits laitiers", "🥛"))', + ' add(CatalogItem("Crème Sure", "Produits laitiers", "🥛"))', + ' add(CatalogItem("Sour cream", "Produits laitiers", "🥛"))', + ' add(CatalogItem("Blue cheese", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Crotte De Fromage", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Demi Lune", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Fondue Fromage", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Frite du petit Québec", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Fromage à tartiner", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Fromage Briana", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Fromage Chèvre Confiture", "Produits laitiers", "🧀"))', + ' add(CatalogItem("fromage cottage sans lactose", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Fromage Déjà Rappé", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Fromage en grains", "Produits laitiers", "🧀"))', + ' add(CatalogItem("fromage en tranches", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Fromage Philadelphia", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Fromage Philadelphia sans lactose", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Fromage Quick Quick", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Fromage Rapé Briana", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Fromage rapé sans lactose", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Fromage Riviera", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Fromage Sans Lactose", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Fromage suisse", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Fromage tex mex", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Fromage Vache Qui Rit", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Grated cheese", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Grilled cheese", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Parmesan sans lactose", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Quark", "Produits laitiers", "🧀"))', + ' add(CatalogItem("Lait avoine", "Produits laitiers", "🥛"))', + ' add(CatalogItem("Lait avoine lunch", "Produits laitiers", "🥛"))', + ' add(CatalogItem("Lait avoine lunch chocolat", "Produits laitiers", "🥛"))', + ' add(CatalogItem("Lait Chocolat", "Produits laitiers", "🥛"))', + ' add(CatalogItem("Lait Chocolat Lunch", "Produits laitiers", "🥛"))', + ' add(CatalogItem("Lait Chocolat Sans Lactose", "Produits laitiers", "🥛"))', + ' add(CatalogItem("Lait condensé coco", "Produits laitiers", "🥛"))', + ' add(CatalogItem("Lait Sans Lactose", "Produits laitiers", "🥛"))', + ' add(CatalogItem("Lait Soya Lunch", "Produits laitiers", "🥛"))', + ' add(CatalogItem("Lait Soya Sensationnel Nature", "Produits laitiers", "🥛"))', + ' add(CatalogItem("Soy Milk", "Produits laitiers", "🥛"))', + ' add(CatalogItem("Soy yogurt", "Produits laitiers", "🥣"))', + ' add(CatalogItem("Yogourt iogo Vanille", "Produits laitiers", "🥣"))', + ' add(CatalogItem("Yogourt logo vanille sans lactose", "Produits laitiers", "🥣"))', + ' add(CatalogItem("Yogourt Sans Lactose", "Produits laitiers", "🥣"))', +] + +path = 'app/src/main/java/com/safebite/app/domain/engine/CatalogProvider.kt' +with open(path, 'r', encoding='utf-8') as f: + content = f.read() + +# Insert bakery items after "Gâteau", "Boulangerie" +marker_bakery = ' add(CatalogItem("Gâteau", "Boulangerie", "🍰"))\n\n // Produits laitiers' +new_bakery_block = ' add(CatalogItem("Gâteau", "Boulangerie", "🍰"))\n' + '\n'.join(bakery_additions) + '\n\n // Produits laitiers' +content = content.replace(marker_bakery, new_bakery_block) + +# Insert dairy items after "Margarine", "Produits laitiers" +marker_dairy = ' add(CatalogItem("Margarine", "Produits laitiers", "🧈"))\n\n // Boucherie' +new_dairy_block = ' add(CatalogItem("Margarine", "Produits laitiers", "🧈"))\n' + '\n'.join(dairy_additions) + '\n\n // Boucherie' +content = content.replace(marker_dairy, new_dairy_block) + +with open(path, 'w', encoding='utf-8') as f: + f.write(content) + +print("Updated CatalogProvider.kt") +print(f"Bakery additions: {len(bakery_additions)}") +print(f"Dairy additions: {len(dairy_additions)}") diff --git a/version.properties b/version.properties index 099d005..5996492 100644 --- a/version.properties +++ b/version.properties @@ -1,4 +1,4 @@ MAJOR=1 -MINOR=18 +MINOR=21 PATCH=0 -CODE=29 +CODE=32