/** * @param { import("knex").Knex } knex * @returns { Promise } */ exports.up = async function(knex) { // Add flag_emoji column to countries table await knex.schema.alterTable('countries', function(table) { table.string('flag_emoji', 10); }); // Add flag emojis for all countries const flagUpdates = [ // A ['AD', '๐Ÿ‡ฆ๐Ÿ‡ฉ'], // Andorra ['AE', '๐Ÿ‡ฆ๐Ÿ‡ช'], // United Arab Emirates ['AF', '๐Ÿ‡ฆ๐Ÿ‡ซ'], // Afghanistan ['AG', '๐Ÿ‡ฆ๐Ÿ‡ฌ'], // Antigua and Barbuda ['AI', '๐Ÿ‡ฆ๐Ÿ‡ฎ'], // Anguilla ['AL', '๐Ÿ‡ฆ๐Ÿ‡ฑ'], // Albania ['AM', '๐Ÿ‡ฆ๐Ÿ‡ฒ'], // Armenia ['AO', '๐Ÿ‡ฆ๐Ÿ‡ด'], // Angola ['AQ', '๐Ÿ‡ฆ๐Ÿ‡ถ'], // Antarctica ['AR', '๐Ÿ‡ฆ๐Ÿ‡ท'], // Argentina ['AS', '๐Ÿ‡ฆ๐Ÿ‡ธ'], // American Samoa ['AT', '๐Ÿ‡ฆ๐Ÿ‡น'], // Austria ['AU', '๐Ÿ‡ฆ๐Ÿ‡บ'], // Australia ['AW', '๐Ÿ‡ฆ๐Ÿ‡ผ'], // Aruba ['AX', '๐Ÿ‡ฆ๐Ÿ‡ฝ'], // ร…land Islands ['AZ', '๐Ÿ‡ฆ๐Ÿ‡ฟ'], // Azerbaijan // B ['BA', '๐Ÿ‡ง๐Ÿ‡ฆ'], // Bosnia and Herzegovina ['BB', '๐Ÿ‡ง๐Ÿ‡ง'], // Barbados ['BD', '๐Ÿ‡ง๐Ÿ‡ฉ'], // Bangladesh ['BE', '๐Ÿ‡ง๐Ÿ‡ช'], // Belgium ['BF', '๐Ÿ‡ง๐Ÿ‡ซ'], // Burkina Faso ['BG', '๐Ÿ‡ง๐Ÿ‡ฌ'], // Bulgaria ['BH', '๐Ÿ‡ง๐Ÿ‡ญ'], // Bahrain ['BI', '๐Ÿ‡ง๐Ÿ‡ฎ'], // Burundi ['BJ', '๐Ÿ‡ง๐Ÿ‡ฏ'], // Benin ['BL', '๐Ÿ‡ง๐Ÿ‡ฑ'], // Saint Barthรฉlemy ['BM', '๐Ÿ‡ง๐Ÿ‡ฒ'], // Bermuda ['BN', '๐Ÿ‡ง๐Ÿ‡ณ'], // Brunei Darussalam ['BO', '๐Ÿ‡ง๐Ÿ‡ด'], // Bolivia ['BQ', '๐Ÿ‡ง๐Ÿ‡ถ'], // Bonaire, Sint Eustatius and Saba ['BR', '๐Ÿ‡ง๐Ÿ‡ท'], // Brazil ['BS', '๐Ÿ‡ง๐Ÿ‡ธ'], // Bahamas ['BT', '๐Ÿ‡ง๐Ÿ‡น'], // Bhutan ['BV', '๐Ÿ‡ง๐Ÿ‡ป'], // Bouvet Island ['BW', '๐Ÿ‡ง๐Ÿ‡ผ'], // Botswana ['BY', '๐Ÿ‡ง๐Ÿ‡พ'], // Belarus ['BZ', '๐Ÿ‡ง๐Ÿ‡ฟ'], // Belize // C ['CA', '๐Ÿ‡จ๐Ÿ‡ฆ'], // Canada ['CC', '๐Ÿ‡จ๐Ÿ‡จ'], // Cocos (Keeling) Islands ['CD', '๐Ÿ‡จ๐Ÿ‡ฉ'], // Congo, Democratic Republic of the ['CF', '๐Ÿ‡จ๐Ÿ‡ซ'], // Central African Republic ['CG', '๐Ÿ‡จ๐Ÿ‡ฌ'], // Congo ['CH', '๐Ÿ‡จ๐Ÿ‡ญ'], // Switzerland ['CI', '๐Ÿ‡จ๐Ÿ‡ฎ'], // Cรดte d'Ivoire ['CK', '๐Ÿ‡จ๐Ÿ‡ฐ'], // Cook Islands ['CL', '๐Ÿ‡จ๐Ÿ‡ฑ'], // Chile ['CM', '๐Ÿ‡จ๐Ÿ‡ฒ'], // Cameroon ['CN', '๐Ÿ‡จ๐Ÿ‡ณ'], // China ['CO', '๐Ÿ‡จ๐Ÿ‡ด'], // Colombia ['CR', '๐Ÿ‡จ๐Ÿ‡ท'], // Costa Rica ['CU', '๐Ÿ‡จ๐Ÿ‡บ'], // Cuba ['CV', '๐Ÿ‡จ๐Ÿ‡ป'], // Cabo Verde ['CW', '๐Ÿ‡จ๐Ÿ‡ผ'], // Curaรงao ['CX', '๐Ÿ‡จ๐Ÿ‡ฝ'], // Christmas Island ['CY', '๐Ÿ‡จ๐Ÿ‡พ'], // Cyprus ['CZ', '๐Ÿ‡จ๐Ÿ‡ฟ'], // Czech Republic // D ['DE', '๐Ÿ‡ฉ๐Ÿ‡ช'], // Germany ['DJ', '๐Ÿ‡ฉ๐Ÿ‡ฏ'], // Djibouti ['DK', '๐Ÿ‡ฉ๐Ÿ‡ฐ'], // Denmark ['DM', '๐Ÿ‡ฉ๐Ÿ‡ฒ'], // Dominica ['DO', '๐Ÿ‡ฉ๐Ÿ‡ด'], // Dominican Republic ['DZ', '๐Ÿ‡ฉ๐Ÿ‡ฟ'], // Algeria // E ['EC', '๐Ÿ‡ช๐Ÿ‡จ'], // Ecuador ['EE', '๐Ÿ‡ช๐Ÿ‡ช'], // Estonia ['EG', '๐Ÿ‡ช๐Ÿ‡ฌ'], // Egypt ['EH', '๐Ÿ‡ช๐Ÿ‡ญ'], // Western Sahara ['ER', '๐Ÿ‡ช๐Ÿ‡ท'], // Eritrea ['ES', '๐Ÿ‡ช๐Ÿ‡ธ'], // Spain ['ET', '๐Ÿ‡ช๐Ÿ‡น'], // Ethiopia // F ['FI', '๐Ÿ‡ซ๐Ÿ‡ฎ'], // Finland ['FJ', '๐Ÿ‡ซ๐Ÿ‡ฏ'], // Fiji ['FK', '๐Ÿ‡ซ๐Ÿ‡ฐ'], // Falkland Islands (Malvinas) ['FM', '๐Ÿ‡ซ๐Ÿ‡ฒ'], // Micronesia, Federated States of ['FO', '๐Ÿ‡ซ๐Ÿ‡ด'], // Faroe Islands ['FR', '๐Ÿ‡ซ๐Ÿ‡ท'], // France // G ['GA', '๐Ÿ‡ฌ๐Ÿ‡ฆ'], // Gabon ['GB', '๐Ÿ‡ฌ๐Ÿ‡ง'], // United Kingdom ['GD', '๐Ÿ‡ฌ๐Ÿ‡ฉ'], // Grenada ['GE', '๐Ÿ‡ฌ๐Ÿ‡ช'], // Georgia ['GF', '๐Ÿ‡ฌ๐Ÿ‡ซ'], // French Guiana ['GG', '๐Ÿ‡ฌ๐Ÿ‡ฌ'], // Guernsey ['GH', '๐Ÿ‡ฌ๐Ÿ‡ญ'], // Ghana ['GI', '๐Ÿ‡ฌ๐Ÿ‡ฎ'], // Gibraltar ['GL', '๐Ÿ‡ฌ๐Ÿ‡ฑ'], // Greenland ['GM', '๐Ÿ‡ฌ๐Ÿ‡ฒ'], // Gambia ['GN', '๐Ÿ‡ฌ๐Ÿ‡ณ'], // Guinea ['GP', '๐Ÿ‡ฌ๐Ÿ‡ต'], // Guadeloupe ['GQ', '๐Ÿ‡ฌ๐Ÿ‡ถ'], // Equatorial Guinea ['GR', '๐Ÿ‡ฌ๐Ÿ‡ท'], // Greece ['GS', '๐Ÿ‡ฌ๐Ÿ‡ธ'], // South Georgia and the South Sandwich Islands ['GT', '๐Ÿ‡ฌ๐Ÿ‡น'], // Guatemala ['GU', '๐Ÿ‡ฌ๐Ÿ‡บ'], // Guam ['GW', '๐Ÿ‡ฌ๐Ÿ‡ผ'], // Guinea-Bissau ['GY', '๐Ÿ‡ฌ๐Ÿ‡พ'], // Guyana // H ['HK', '๐Ÿ‡ญ๐Ÿ‡ฐ'], // Hong Kong ['HM', '๐Ÿ‡ญ๐Ÿ‡ฒ'], // Heard Island and McDonald Islands ['HN', '๐Ÿ‡ญ๐Ÿ‡ณ'], // Honduras ['HR', '๐Ÿ‡ญ๐Ÿ‡ท'], // Croatia ['HT', '๐Ÿ‡ญ๐Ÿ‡น'], // Haiti ['HU', '๐Ÿ‡ญ๐Ÿ‡บ'], // Hungary // I ['ID', '๐Ÿ‡ฎ๐Ÿ‡ฉ'], // Indonesia ['IE', '๐Ÿ‡ฎ๐Ÿ‡ช'], // Ireland ['IL', '๐Ÿ‡ฎ๐Ÿ‡ฑ'], // Israel ['IM', '๐Ÿ‡ฎ๐Ÿ‡ฒ'], // Isle of Man ['IN', '๐Ÿ‡ฎ๐Ÿ‡ณ'], // India ['IO', '๐Ÿ‡ฎ๐Ÿ‡ด'], // British Indian Ocean Territory ['IQ', '๐Ÿ‡ฎ๐Ÿ‡ถ'], // Iraq ['IR', '๐Ÿ‡ฎ๐Ÿ‡ท'], // Iran ['IS', '๐Ÿ‡ฎ๐Ÿ‡ธ'], // Iceland ['IT', '๐Ÿ‡ฎ๐Ÿ‡น'], // Italy // J ['JE', '๐Ÿ‡ฏ๐Ÿ‡ช'], // Jersey ['JM', '๐Ÿ‡ฏ๐Ÿ‡ฒ'], // Jamaica ['JO', '๐Ÿ‡ฏ๐Ÿ‡ด'], // Jordan ['JP', '๐Ÿ‡ฏ๐Ÿ‡ต'], // Japan // K ['KE', '๐Ÿ‡ฐ๐Ÿ‡ช'], // Kenya ['KG', '๐Ÿ‡ฐ๐Ÿ‡ฌ'], // Kyrgyzstan ['KH', '๐Ÿ‡ฐ๐Ÿ‡ญ'], // Cambodia ['KI', '๐Ÿ‡ฐ๐Ÿ‡ฎ'], // Kiribati ['KM', '๐Ÿ‡ฐ๐Ÿ‡ฒ'], // Comoros ['KN', '๐Ÿ‡ฐ๐Ÿ‡ณ'], // Saint Kitts and Nevis ['KP', '๐Ÿ‡ฐ๐Ÿ‡ต'], // Korea, Democratic People's Republic of ['KR', '๐Ÿ‡ฐ๐Ÿ‡ท'], // Korea, Republic of ['KW', '๐Ÿ‡ฐ๐Ÿ‡ผ'], // Kuwait ['KY', '๐Ÿ‡ฐ๐Ÿ‡พ'], // Cayman Islands ['KZ', '๐Ÿ‡ฐ๐Ÿ‡ฟ'], // Kazakhstan // L ['LA', '๐Ÿ‡ฑ๐Ÿ‡ฆ'], // Lao People's Democratic Republic ['LB', '๐Ÿ‡ฑ๐Ÿ‡ง'], // Lebanon ['LC', '๐Ÿ‡ฑ๐Ÿ‡จ'], // Saint Lucia ['LI', '๐Ÿ‡ฑ๐Ÿ‡ฎ'], // Liechtenstein ['LK', '๐Ÿ‡ฑ๐Ÿ‡ฐ'], // Sri Lanka ['LR', '๐Ÿ‡ฑ๐Ÿ‡ท'], // Liberia ['LS', '๐Ÿ‡ฑ๐Ÿ‡ธ'], // Lesotho ['LT', '๐Ÿ‡ฑ๐Ÿ‡น'], // Lithuania ['LU', '๐Ÿ‡ฑ๐Ÿ‡บ'], // Luxembourg ['LV', '๐Ÿ‡ฑ๐Ÿ‡ป'], // Latvia ['LY', '๐Ÿ‡ฑ๐Ÿ‡พ'], // Libya // M ['MA', '๐Ÿ‡ฒ๐Ÿ‡ฆ'], // Morocco ['MC', '๐Ÿ‡ฒ๐Ÿ‡จ'], // Monaco ['MD', '๐Ÿ‡ฒ๐Ÿ‡ฉ'], // Moldova, Republic of ['ME', '๐Ÿ‡ฒ๐Ÿ‡ช'], // Montenegro ['MF', '๐Ÿ‡ฒ๐Ÿ‡ซ'], // Saint Martin (French part) ['MG', '๐Ÿ‡ฒ๐Ÿ‡ฌ'], // Madagascar ['MH', '๐Ÿ‡ฒ๐Ÿ‡ญ'], // Marshall Islands ['MK', '๐Ÿ‡ฒ๐Ÿ‡ฐ'], // North Macedonia ['ML', '๐Ÿ‡ฒ๐Ÿ‡ฑ'], // Mali ['MM', '๐Ÿ‡ฒ๐Ÿ‡ฒ'], // Myanmar ['MN', '๐Ÿ‡ฒ๐Ÿ‡ณ'], // Mongolia ['MO', '๐Ÿ‡ฒ๐Ÿ‡ด'], // Macao ['MP', '๐Ÿ‡ฒ๐Ÿ‡ต'], // Northern Mariana Islands ['MQ', '๐Ÿ‡ฒ๐Ÿ‡ถ'], // Martinique ['MR', '๐Ÿ‡ฒ๐Ÿ‡ท'], // Mauritania ['MS', '๐Ÿ‡ฒ๐Ÿ‡ธ'], // Montserrat ['MT', '๐Ÿ‡ฒ๐Ÿ‡น'], // Malta ['MU', '๐Ÿ‡ฒ๐Ÿ‡บ'], // Mauritius ['MV', '๐Ÿ‡ฒ๐Ÿ‡ป'], // Maldives ['MW', '๐Ÿ‡ฒ๐Ÿ‡ผ'], // Malawi ['MX', '๐Ÿ‡ฒ๐Ÿ‡ฝ'], // Mexico ['MY', '๐Ÿ‡ฒ๐Ÿ‡พ'], // Malaysia ['MZ', '๐Ÿ‡ฒ๐Ÿ‡ฟ'], // Mozambique // N ['NA', '๐Ÿ‡ณ๐Ÿ‡ฆ'], // Namibia ['NC', '๐Ÿ‡ณ๐Ÿ‡จ'], // New Caledonia ['NE', '๐Ÿ‡ณ๐Ÿ‡ช'], // Niger ['NF', '๐Ÿ‡ณ๐Ÿ‡ซ'], // Norfolk Island ['NG', '๐Ÿ‡ณ๐Ÿ‡ฌ'], // Nigeria ['NI', '๐Ÿ‡ณ๐Ÿ‡ฎ'], // Nicaragua ['NL', '๐Ÿ‡ณ๐Ÿ‡ฑ'], // Netherlands ['NO', '๐Ÿ‡ณ๐Ÿ‡ด'], // Norway ['NP', '๐Ÿ‡ณ๐Ÿ‡ต'], // Nepal ['NR', '๐Ÿ‡ณ๐Ÿ‡ท'], // Nauru ['NU', '๐Ÿ‡ณ๐Ÿ‡บ'], // Niue ['NZ', '๐Ÿ‡ณ๐Ÿ‡ฟ'], // New Zealand // O ['OM', '๐Ÿ‡ด๐Ÿ‡ฒ'], // Oman // P ['PA', '๐Ÿ‡ต๐Ÿ‡ฆ'], // Panama ['PE', '๐Ÿ‡ต๐Ÿ‡ช'], // Peru ['PF', '๐Ÿ‡ต๐Ÿ‡ซ'], // French Polynesia ['PG', '๐Ÿ‡ต๐Ÿ‡ฌ'], // Papua New Guinea ['PH', '๐Ÿ‡ต๐Ÿ‡ญ'], // Philippines ['PK', '๐Ÿ‡ต๐Ÿ‡ฐ'], // Pakistan ['PL', '๐Ÿ‡ต๐Ÿ‡ฑ'], // Poland ['PM', '๐Ÿ‡ต๐Ÿ‡ฒ'], // Saint Pierre and Miquelon ['PN', '๐Ÿ‡ต๐Ÿ‡ณ'], // Pitcairn ['PR', '๐Ÿ‡ต๐Ÿ‡ท'], // Puerto Rico ['PS', '๐Ÿ‡ต๐Ÿ‡ธ'], // Palestine, State of ['PT', '๐Ÿ‡ต๐Ÿ‡น'], // Portugal ['PW', '๐Ÿ‡ต๐Ÿ‡ผ'], // Palau ['PY', '๐Ÿ‡ต๐Ÿ‡พ'], // Paraguay // Q ['QA', '๐Ÿ‡ถ๐Ÿ‡ฆ'], // Qatar // R ['RE', '๐Ÿ‡ท๐Ÿ‡ช'], // Rรฉunion ['RO', '๐Ÿ‡ท๐Ÿ‡ด'], // Romania ['RS', '๐Ÿ‡ท๐Ÿ‡ธ'], // Serbia ['RU', '๐Ÿ‡ท๐Ÿ‡บ'], // Russian Federation ['RW', '๐Ÿ‡ท๐Ÿ‡ผ'], // Rwanda // S ['SA', '๐Ÿ‡ธ๐Ÿ‡ฆ'], // Saudi Arabia ['SB', '๐Ÿ‡ธ๐Ÿ‡ง'], // Solomon Islands ['SC', '๐Ÿ‡ธ๐Ÿ‡จ'], // Seychelles ['SD', '๐Ÿ‡ธ๐Ÿ‡ฉ'], // Sudan ['SE', '๐Ÿ‡ธ๐Ÿ‡ช'], // Sweden ['SG', '๐Ÿ‡ธ๐Ÿ‡ฌ'], // Singapore ['SH', '๐Ÿ‡ธ๐Ÿ‡ญ'], // Saint Helena, Ascension and Tristan da Cunha ['SI', '๐Ÿ‡ธ๐Ÿ‡ฎ'], // Slovenia ['SJ', '๐Ÿ‡ธ๐Ÿ‡ฏ'], // Svalbard and Jan Mayen ['SK', '๐Ÿ‡ธ๐Ÿ‡ฐ'], // Slovakia ['SL', '๐Ÿ‡ธ๐Ÿ‡ฑ'], // Sierra Leone ['SM', '๐Ÿ‡ธ๐Ÿ‡ฒ'], // San Marino ['SN', '๐Ÿ‡ธ๐Ÿ‡ณ'], // Senegal ['SO', '๐Ÿ‡ธ๐Ÿ‡ด'], // Somalia ['SR', '๐Ÿ‡ธ๐Ÿ‡ท'], // Suriname ['SS', '๐Ÿ‡ธ๐Ÿ‡ธ'], // South Sudan ['ST', '๐Ÿ‡ธ๐Ÿ‡น'], // Sao Tome and Principe ['SV', '๐Ÿ‡ธ๐Ÿ‡ป'], // El Salvador ['SX', '๐Ÿ‡ธ๐Ÿ‡ฝ'], // Sint Maarten (Dutch part) ['SY', '๐Ÿ‡ธ๐Ÿ‡พ'], // Syrian Arab Republic ['SZ', '๐Ÿ‡ธ๐Ÿ‡ฟ'], // Eswatini // T ['TC', '๐Ÿ‡น๐Ÿ‡จ'], // Turks and Caicos Islands ['TD', '๐Ÿ‡น๐Ÿ‡ฉ'], // Chad ['TF', '๐Ÿ‡น๐Ÿ‡ซ'], // French Southern Territories ['TG', '๐Ÿ‡น๐Ÿ‡ฌ'], // Togo ['TH', '๐Ÿ‡น๐Ÿ‡ญ'], // Thailand ['TJ', '๐Ÿ‡น๐Ÿ‡ฏ'], // Tajikistan ['TK', '๐Ÿ‡น๐Ÿ‡ฐ'], // Tokelau ['TL', '๐Ÿ‡น๐Ÿ‡ฑ'], // Timor-Leste ['TM', '๐Ÿ‡น๐Ÿ‡ฒ'], // Turkmenistan ['TN', '๐Ÿ‡น๐Ÿ‡ณ'], // Tunisia ['TO', '๐Ÿ‡น๐Ÿ‡ด'], // Tonga ['TR', '๐Ÿ‡น๐Ÿ‡ท'], // Turkey ['TT', '๐Ÿ‡น๐Ÿ‡น'], // Trinidad and Tobago ['TV', '๐Ÿ‡น๐Ÿ‡ป'], // Tuvalu ['TW', '๐Ÿ‡น๐Ÿ‡ผ'], // Taiwan, Province of China ['TZ', '๐Ÿ‡น๐Ÿ‡ฟ'], // Tanzania, United Republic of // U ['UA', '๐Ÿ‡บ๐Ÿ‡ฆ'], // Ukraine ['UG', '๐Ÿ‡บ๐Ÿ‡ฌ'], // Uganda ['UM', '๐Ÿ‡บ๐Ÿ‡ฒ'], // United States Minor Outlying Islands ['US', '๐Ÿ‡บ๐Ÿ‡ธ'], // United States ['UY', '๐Ÿ‡บ๐Ÿ‡พ'], // Uruguay ['UZ', '๐Ÿ‡บ๐Ÿ‡ฟ'], // Uzbekistan // V ['VA', '๐Ÿ‡ป๐Ÿ‡ฆ'], // Holy See (Vatican City State) ['VC', '๐Ÿ‡ป๐Ÿ‡จ'], // Saint Vincent and the Grenadines ['VE', '๐Ÿ‡ป๐Ÿ‡ช'], // Venezuela ['VG', '๐Ÿ‡ป๐Ÿ‡ฌ'], // Virgin Islands, British ['VI', '๐Ÿ‡ป๐Ÿ‡ฎ'], // Virgin Islands, U.S. ['VN', '๐Ÿ‡ป๐Ÿ‡ณ'], // Viet Nam ['VU', '๐Ÿ‡ป๐Ÿ‡บ'], // Vanuatu // W ['WF', '๐Ÿ‡ผ๐Ÿ‡ซ'], // Wallis and Futuna ['WS', '๐Ÿ‡ผ๐Ÿ‡ธ'], // Samoa // Y ['YE', '๐Ÿ‡พ๐Ÿ‡ช'], // Yemen ['YT', '๐Ÿ‡พ๐Ÿ‡น'], // Mayotte // Z ['ZA', '๐Ÿ‡ฟ๐Ÿ‡ฆ'], // South Africa ['ZM', '๐Ÿ‡ฟ๐Ÿ‡ฒ'], // Zambia ['ZW', '๐Ÿ‡ฟ๐Ÿ‡ผ'], // Zimbabwe ]; // Update countries with flag emojis using bulk UPDATE with CASE WHEN // Note: countries is a reference table (shared across all tenants), so no tenant filter needed if (flagUpdates.length > 0) { const codes = flagUpdates.map(([code]) => code); const caseWhen = flagUpdates .map(([code, emoji]) => `WHEN '${code}' THEN '${emoji}'`) .join(' '); await knex.raw(` UPDATE countries SET flag_emoji = CASE code ${caseWhen} END WHERE code IN (${codes.map(code => `'${code}'`).join(', ')}) `); } }; /** * @param { import("knex").Knex } knex * @returns { Promise } */ exports.down = async function(knex) { // Remove flag_emoji column await knex.schema.alterTable('countries', function(table) { table.dropColumn('flag_emoji'); }); };