From 42e4d75d70ba0dc4621d038895b34408d79bee37 Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Mon, 26 May 2025 12:10:09 +0300 Subject: [PATCH] feat: add country iso enum --- .../dtos/request/verify-user.request.dto.ts | 19 +- .../countries-numeric-iso.constant.ts | 253 ++++++++++++++++++ src/common/constants/index.ts | 1 + src/common/enums/countries-iso.enum.ts | 251 +++++++++++++++++ src/common/enums/index.ts | 1 + .../request/create-customer.request.dto.ts | 8 +- .../repositories/customer.repository.ts | 1 + 7 files changed, 527 insertions(+), 7 deletions(-) create mode 100644 src/common/constants/countries-numeric-iso.constant.ts create mode 100644 src/common/enums/countries-iso.enum.ts create mode 100644 src/common/enums/index.ts diff --git a/src/auth/dtos/request/verify-user.request.dto.ts b/src/auth/dtos/request/verify-user.request.dto.ts index cb5c74f..c1adc87 100644 --- a/src/auth/dtos/request/verify-user.request.dto.ts +++ b/src/auth/dtos/request/verify-user.request.dto.ts @@ -1,6 +1,16 @@ import { ApiProperty, PickType } from '@nestjs/swagger'; -import { IsDateString, IsNotEmpty, IsNumberString, IsOptional, IsString, MaxLength, MinLength } from 'class-validator'; +import { + IsDateString, + IsEnum, + IsNotEmpty, + IsNumberString, + IsOptional, + IsString, + MaxLength, + MinLength, +} from 'class-validator'; import { i18nValidationMessage as i18n } from 'nestjs-i18n'; +import { CountryIso } from '~/common/enums'; import { DEFAULT_OTP_LENGTH } from '~/common/modules/otp/constants'; import { IsAbove18 } from '~/core/decorators/validations'; import { CreateUnverifiedUserRequestDto } from './create-unverified-user.request.dto'; @@ -22,10 +32,11 @@ export class VerifyUserRequestDto extends PickType(CreateUnverifiedUserRequestDt dateOfBirth!: Date; @ApiProperty({ example: 'JO' }) - @IsString({ message: i18n('validation.IsString', { path: 'general', property: 'customer.countryOfResidence' }) }) - @IsNotEmpty({ message: i18n('validation.IsNotEmpty', { path: 'general', property: 'customer.countryOfResidence' }) }) + @IsEnum(CountryIso, { + message: i18n('validation.IsEnum', { path: 'general', property: 'customer.countryOfResidence' }), + }) @IsOptional() - countryOfResidence: string = 'SA'; + countryOfResidence: CountryIso = CountryIso.SAUDI_ARABIA; @ApiProperty({ example: '111111' }) @IsNumberString( diff --git a/src/common/constants/countries-numeric-iso.constant.ts b/src/common/constants/countries-numeric-iso.constant.ts new file mode 100644 index 0000000..dc45cec --- /dev/null +++ b/src/common/constants/countries-numeric-iso.constant.ts @@ -0,0 +1,253 @@ +import { CountryIso } from '../enums'; + +export const CountriesNumericISO: Record = { + [CountryIso.ARUBA]: '533', + [CountryIso.AFGHANISTAN]: '004', + [CountryIso.ANGOLA]: '024', + [CountryIso.ANGUILLA]: '660', + [CountryIso.ALAND_ISLANDS]: '248', + [CountryIso.ALBANIA]: '008', + [CountryIso.ANDORRA]: '020', + [CountryIso.UNITED_ARAB_EMIRATES]: '784', + [CountryIso.ARGENTINA]: '032', + [CountryIso.ARMENIA]: '051', + [CountryIso.AMERICAN_SAMOA]: '016', + [CountryIso.ANTARCTICA]: '010', + [CountryIso.FRENCH_SOUTHERN_TERRITORIES]: '260', + [CountryIso.ANTIGUA_AND_BARBUDA]: '028', + [CountryIso.AUSTRALIA]: '036', + [CountryIso.AUSTRIA]: '040', + [CountryIso.AZERBAIJAN]: '031', + [CountryIso.BURUNDI]: '108', + [CountryIso.BELGIUM]: '056', + [CountryIso.BENIN]: '204', + [CountryIso.BONAIRE_SINT_EUSTATIUS_AND_SABA]: '535', + [CountryIso.BURKINA_FASO]: '854', + [CountryIso.BANGLADESH]: '050', + [CountryIso.BULGARIA]: '100', + [CountryIso.BAHRAIN]: '048', + [CountryIso.BAHAMAS]: '044', + [CountryIso.BOSNIA_AND_HERZEGOVINA]: '070', + [CountryIso.SAINT_BARTHÉLEMY]: '652', + [CountryIso.BELARUS]: '112', + [CountryIso.BELIZE]: '084', + [CountryIso.BERMUDA]: '060', + [CountryIso.BOLIVIA_PLURINATIONAL_STATE_OF]: '068', + [CountryIso.BRAZIL]: '076', + [CountryIso.BARBADOS]: '052', + [CountryIso.BRUNEI_DARUSSALAM]: '096', + [CountryIso.BHUTAN]: '064', + [CountryIso.BOUVET_ISLAND]: '074', + [CountryIso.BOTSWANA]: '072', + [CountryIso.CENTRAL_AFRICAN_REPUBLIC]: '140', + [CountryIso.CANADA]: '124', + [CountryIso.COCOS_KEELING_ISLANDS]: '166', + [CountryIso.SWITZERLAND]: '756', + [CountryIso.CHILE]: '152', + [CountryIso.CHINA]: '156', + [CountryIso.COTE_DIVOIRE]: '384', + [CountryIso.CAMEROON]: '120', + [CountryIso.CONGO_THE_DEMOCRATIC_REPUBLIC_OF_THE]: '180', + [CountryIso.CONGO]: '178', + [CountryIso.COOK_ISLANDS]: '184', + [CountryIso.COLOMBIA]: '170', + [CountryIso.COMOROS]: '174', + [CountryIso.CABO_VERDE]: '132', + [CountryIso.COSTA_RICA]: '188', + [CountryIso.CUBA]: '192', + [CountryIso.CURAÇAO]: '531', + [CountryIso.CHRISTMAS_ISLAND]: '162', + [CountryIso.CAYMAN_ISLANDS]: '136', + [CountryIso.CYPRUS]: '196', + [CountryIso.CZECHIA]: '203', + [CountryIso.GERMANY]: '276', + [CountryIso.DJIBOUTI]: '262', + [CountryIso.DOMINICA]: '212', + [CountryIso.DENMARK]: '208', + [CountryIso.DOMINICAN_REPUBLIC]: '214', + [CountryIso.ALGERIA]: '012', + [CountryIso.ECUADOR]: '218', + [CountryIso.EGYPT]: '818', + [CountryIso.ERITREA]: '232', + [CountryIso.WESTERN_SAHARA]: '732', + [CountryIso.SPAIN]: '724', + [CountryIso.ESTONIA]: '233', + [CountryIso.ETHIOPIA]: '231', + [CountryIso.FINLAND]: '246', + [CountryIso.FIJI]: '242', + [CountryIso.FALKLAND_ISLANDS_MALVINAS]: '238', + [CountryIso.FRANCE]: '250', + [CountryIso.FAROE_ISLANDS]: '234', + [CountryIso.MICRONESIA_FEDERATED_STATES_OF]: '583', + [CountryIso.GABON]: '266', + [CountryIso.UNITED_KINGDOM]: '826', + [CountryIso.GEORGIA]: '268', + [CountryIso.GUERNSEY]: '831', + [CountryIso.GHANA]: '288', + [CountryIso.GIBRALTAR]: '292', + [CountryIso.GUINEA]: '324', + [CountryIso.GUADELOUPE]: '312', + [CountryIso.GAMBIA]: '270', + [CountryIso.GUINEA_BISSAU]: '624', + [CountryIso.EQUATORIAL_GUINEA]: '226', + [CountryIso.GREECE]: '300', + [CountryIso.GRENADA]: '308', + [CountryIso.GREENLAND]: '304', + [CountryIso.GUATEMALA]: '320', + [CountryIso.FRENCH_GUIANA]: '254', + [CountryIso.GUAM]: '316', + [CountryIso.GUYANA]: '328', + [CountryIso.HONG_KONG]: '344', + [CountryIso.HEARD_ISLAND_AND_MCDONALD_ISLANDS]: '334', + [CountryIso.HONDURAS]: '340', + [CountryIso.CROATIA]: '191', + [CountryIso.HAITI]: '332', + [CountryIso.HUNGARY]: '348', + [CountryIso.INDONESIA]: '360', + [CountryIso.ISLE_OF_MAN]: '833', + [CountryIso.INDIA]: '356', + [CountryIso.BRITISH_INDIAN_OCEAN_TERRITORY]: '086', + [CountryIso.IRELAND]: '372', + [CountryIso.IRAN_ISLAMIC_REPUBLIC_OF]: '364', + [CountryIso.IRAQ]: '368', + [CountryIso.ICELAND]: '352', + [CountryIso.ISRAEL]: '376', + [CountryIso.ITALY]: '380', + [CountryIso.JAMAICA]: '388', + [CountryIso.JERSEY]: '832', + [CountryIso.JORDAN]: '400', + [CountryIso.JAPAN]: '392', + [CountryIso.KAZAKHSTAN]: '398', + [CountryIso.KENYA]: '404', + [CountryIso.KYRGYZSTAN]: '417', + [CountryIso.CAMBODIA]: '116', + [CountryIso.KIRIBATI]: '296', + [CountryIso.SAINT_KITTS_AND_NEVIS]: '659', + [CountryIso.KOREA_REPUBLIC_OF]: '410', + [CountryIso.KUWAIT]: '414', + [CountryIso.LAO_PEOPLES_DEMOCRATIC_REPUBLIC]: '418', + [CountryIso.LEBANON]: '422', + [CountryIso.LIBERIA]: '430', + [CountryIso.LIBYA]: '434', + [CountryIso.SAINT_LUCIA]: '662', + [CountryIso.LIECHTENSTEIN]: '438', + [CountryIso.SRI_LANKA]: '144', + [CountryIso.LESOTHO]: '426', + [CountryIso.LITHUANIA]: '440', + [CountryIso.LUXEMBOURG]: '442', + [CountryIso.LATVIA]: '428', + [CountryIso.MACAO]: '446', + [CountryIso.SAINT_MARTIN_FRENCH_PART]: '663', + [CountryIso.MOROCCO]: '504', + [CountryIso.MONACO]: '492', + [CountryIso.MOLDOVA_REPUBLIC_OF]: '498', + [CountryIso.MADAGASCAR]: '450', + [CountryIso.MALDIVES]: '462', + [CountryIso.MEXICO]: '484', + [CountryIso.MARSHALL_ISLANDS]: '584', + [CountryIso.NORTH_MACEDONIA]: '807', + [CountryIso.MALI]: '466', + [CountryIso.MALTA]: '470', + [CountryIso.MYANMAR]: '104', + [CountryIso.MONTENEGRO]: '499', + [CountryIso.MONGOLIA]: '496', + [CountryIso.NORTHERN_MARIANA_ISLANDS]: '580', + [CountryIso.MOZAMBIQUE]: '508', + [CountryIso.MAURITANIA]: '478', + [CountryIso.MONTSERRAT]: '500', + [CountryIso.MARTINIQUE]: '474', + [CountryIso.MAURITIUS]: '480', + [CountryIso.MALAWI]: '454', + [CountryIso.MALAYSIA]: '458', + [CountryIso.MAYOTTE]: '175', + [CountryIso.NAMIBIA]: '516', + [CountryIso.NEW_CALEDONIA]: '540', + [CountryIso.NIGER]: '562', + [CountryIso.NORFOLK_ISLAND]: '574', + [CountryIso.NIGERIA]: '566', + [CountryIso.NICARAGUA]: '558', + [CountryIso.NIUE]: '570', + [CountryIso.NETHERLANDS]: '528', + [CountryIso.NORWAY]: '578', + [CountryIso.NEPAL]: '524', + [CountryIso.NAURU]: '520', + [CountryIso.NEW_ZEALAND]: '554', + [CountryIso.OMAN]: '512', + [CountryIso.PAKISTAN]: '586', + [CountryIso.PANAMA]: '591', + [CountryIso.PITCAIRN]: '612', + [CountryIso.PERU]: '604', + [CountryIso.PHILIPPINES]: '608', + [CountryIso.PALAU]: '585', + [CountryIso.PAPUA_NEW_GUINEA]: '598', + [CountryIso.POLAND]: '616', + [CountryIso.PUERTO_RICO]: '630', + [CountryIso.KOREA_DEMOCRATIC_PEOPLES_REPUBLIC_OF]: '408', + [CountryIso.PORTUGAL]: '620', + [CountryIso.PARAGUAY]: '600', + [CountryIso.PALESTINE_STATE_OF]: '275', + [CountryIso.FRENCH_POLYNESIA]: '258', + [CountryIso.QATAR]: '634', + [CountryIso.REUNION]: '638', + [CountryIso.ROMANIA]: '642', + [CountryIso.RUSSIAN_FEDERATION]: '643', + [CountryIso.RWANDA]: '646', + [CountryIso.SAUDI_ARABIA]: '682', + [CountryIso.SUDAN]: '729', + [CountryIso.SENEGAL]: '686', + [CountryIso.SINGAPORE]: '702', + [CountryIso.SOUTH_GEORGIA_AND_THE_SOUTH_SANDWICH_ISLANDS]: '239', + [CountryIso.SAINT_HELENA_ASCENSION_AND_TRISTAN_DA_CUNHA]: '654', + [CountryIso.SVALBARD_AND_JAN_MAYEN]: '744', + [CountryIso.SOLOMON_ISLANDS]: '090', + [CountryIso.SIERRA_LEONE]: '694', + [CountryIso.EL_SALVADOR]: '222', + [CountryIso.SAN_MARINO]: '674', + [CountryIso.SOMALIA]: '706', + [CountryIso.SAINT_PIERRE_AND_MIQUELON]: '666', + [CountryIso.SERBIA]: '688', + [CountryIso.SOUTH_SUDAN]: '728', + [CountryIso.SAO_TOME_AND_PRINCIPE]: '678', + [CountryIso.SURINAME]: '740', + [CountryIso.SLOVAKIA]: '703', + [CountryIso.SLOVENIA]: '705', + [CountryIso.SWEDEN]: '752', + [CountryIso.ESWATINI]: '748', + [CountryIso.SINT_MAARTEN_DUTCH_PART]: '534', + [CountryIso.SEYCHELLES]: '690', + [CountryIso.SYRIAN_ARAB_REPUBLIC]: '760', + [CountryIso.TURKS_AND_CAICOS_ISLANDS]: '796', + [CountryIso.CHAD]: '148', + [CountryIso.TOGO]: '768', + [CountryIso.THAILAND]: '764', + [CountryIso.TAJIKISTAN]: '762', + [CountryIso.TOKELAU]: '772', + [CountryIso.TURKMENISTAN]: '795', + [CountryIso.TIMOR_LESTE]: '626', + [CountryIso.TONGA]: '776', + [CountryIso.TRINIDAD_AND_TOBAGO]: '780', + [CountryIso.TUNISIA]: '788', + [CountryIso.TURKEY]: '792', + [CountryIso.TUVALU]: '798', + [CountryIso.TAIWAN_PROVINCE_OF_CHINA]: '158', + [CountryIso.TANZANIA_UNITED_REPUBLIC_OF]: '834', + [CountryIso.UGANDA]: '800', + [CountryIso.UKRAINE]: '804', + [CountryIso.UNITED_STATES_MINOR_OUTLYING_ISLANDS]: '581', + [CountryIso.URUGUAY]: '858', + [CountryIso.UNITED_STATES]: '840', + [CountryIso.UZBEKISTAN]: '860', + [CountryIso.HOLY_SEE_VATICAN_CITY_STATE]: '336', + [CountryIso.SAINT_VINCENT_AND_THE_GRENADINES]: '670', + [CountryIso.VENEZUELA_BOLIVARIAN_REPUBLIC_OF]: '862', + [CountryIso.VIRGIN_ISLANDS_BRITISH]: '092', + [CountryIso.VIRGIN_ISLANDS_US]: '850', + [CountryIso.VIET_NAM]: '704', + [CountryIso.VANUATU]: '548', + [CountryIso.WALLIS_AND_FUTUNA]: '876', + [CountryIso.SAMOA]: '882', + [CountryIso.YEMEN]: '887', + [CountryIso.SOUTH_AFRICA]: '710', + [CountryIso.ZAMBIA]: '894', + [CountryIso.ZIMBABWE]: '716', +}; diff --git a/src/common/constants/index.ts b/src/common/constants/index.ts index c1f9866..ad8d1dc 100644 --- a/src/common/constants/index.ts +++ b/src/common/constants/index.ts @@ -1 +1,2 @@ +export * from './countries-numeric-iso.constant'; export * from './global.constant'; diff --git a/src/common/enums/countries-iso.enum.ts b/src/common/enums/countries-iso.enum.ts new file mode 100644 index 0000000..c996051 --- /dev/null +++ b/src/common/enums/countries-iso.enum.ts @@ -0,0 +1,251 @@ +export enum CountryIso { + ARUBA = 'AW', + AFGHANISTAN = 'AF', + ANGOLA = 'AO', + ANGUILLA = 'AI', + ALAND_ISLANDS = 'AX', + ALBANIA = 'AL', + ANDORRA = 'AD', + UNITED_ARAB_EMIRATES = 'AE', + ARGENTINA = 'AR', + ARMENIA = 'AM', + AMERICAN_SAMOA = 'AS', + ANTARCTICA = 'AQ', + FRENCH_SOUTHERN_TERRITORIES = 'TF', + ANTIGUA_AND_BARBUDA = 'AG', + AUSTRALIA = 'AU', + AUSTRIA = 'AT', + AZERBAIJAN = 'AZ', + BURUNDI = 'BI', + BELGIUM = 'BE', + BENIN = 'BJ', + BONAIRE_SINT_EUSTATIUS_AND_SABA = 'BQ', + BURKINA_FASO = 'BF', + BANGLADESH = 'BD', + BULGARIA = 'BG', + BAHRAIN = 'BH', + BAHAMAS = 'BS', + BOSNIA_AND_HERZEGOVINA = 'BA', + SAINT_BARTHÉLEMY = 'BL', + BELARUS = 'BY', + BELIZE = 'BZ', + BERMUDA = 'BM', + BOLIVIA_PLURINATIONAL_STATE_OF = 'BO', + BRAZIL = 'BR', + BARBADOS = 'BB', + BRUNEI_DARUSSALAM = 'BN', + BHUTAN = 'BT', + BOUVET_ISLAND = 'BV', + BOTSWANA = 'BW', + CENTRAL_AFRICAN_REPUBLIC = 'CF', + CANADA = 'CA', + COCOS_KEELING_ISLANDS = 'CC', + SWITZERLAND = 'CH', + CHILE = 'CL', + CHINA = 'CN', + COTE_DIVOIRE = 'CI', + CAMEROON = 'CM', + CONGO_THE_DEMOCRATIC_REPUBLIC_OF_THE = 'CD', + CONGO = 'CG', + COOK_ISLANDS = 'CK', + COLOMBIA = 'CO', + COMOROS = 'KM', + CABO_VERDE = 'CV', + COSTA_RICA = 'CR', + CUBA = 'CU', + CURAÇAO = 'CW', + CHRISTMAS_ISLAND = 'CX', + CAYMAN_ISLANDS = 'KY', + CYPRUS = 'CY', + CZECHIA = 'CZ', + GERMANY = 'DE', + DJIBOUTI = 'DJ', + DOMINICA = 'DM', + DENMARK = 'DK', + DOMINICAN_REPUBLIC = 'DO', + ALGERIA = 'DZ', + ECUADOR = 'EC', + EGYPT = 'EG', + ERITREA = 'ER', + WESTERN_SAHARA = 'EH', + SPAIN = 'ES', + ESTONIA = 'EE', + ETHIOPIA = 'ET', + FINLAND = 'FI', + FIJI = 'FJ', + FALKLAND_ISLANDS_MALVINAS = 'FK', + FRANCE = 'FR', + FAROE_ISLANDS = 'FO', + MICRONESIA_FEDERATED_STATES_OF = 'FM', + GABON = 'GA', + UNITED_KINGDOM = 'GB', + GEORGIA = 'GE', + GUERNSEY = 'GG', + GHANA = 'GH', + GIBRALTAR = 'GI', + GUINEA = 'GN', + GUADELOUPE = 'GP', + GAMBIA = 'GM', + GUINEA_BISSAU = 'GW', + EQUATORIAL_GUINEA = 'GQ', + GREECE = 'GR', + GRENADA = 'GD', + GREENLAND = 'GL', + GUATEMALA = 'GT', + FRENCH_GUIANA = 'GF', + GUAM = 'GU', + GUYANA = 'GY', + HONG_KONG = 'HK', + HEARD_ISLAND_AND_MCDONALD_ISLANDS = 'HM', + HONDURAS = 'HN', + CROATIA = 'HR', + HAITI = 'HT', + HUNGARY = 'HU', + INDONESIA = 'ID', + ISLE_OF_MAN = 'IM', + INDIA = 'IN', + BRITISH_INDIAN_OCEAN_TERRITORY = 'IO', + IRELAND = 'IE', + IRAN_ISLAMIC_REPUBLIC_OF = 'IR', + IRAQ = 'IQ', + ICELAND = 'IS', + ISRAEL = 'IL', + ITALY = 'IT', + JAMAICA = 'JM', + JERSEY = 'JE', + JORDAN = 'JO', + JAPAN = 'JP', + KAZAKHSTAN = 'KZ', + KENYA = 'KE', + KYRGYZSTAN = 'KG', + CAMBODIA = 'KH', + KIRIBATI = 'KI', + SAINT_KITTS_AND_NEVIS = 'KN', + KOREA_REPUBLIC_OF = 'KR', + KUWAIT = 'KW', + LAO_PEOPLES_DEMOCRATIC_REPUBLIC = 'LA', + LEBANON = 'LB', + LIBERIA = 'LR', + LIBYA = 'LY', + SAINT_LUCIA = 'LC', + LIECHTENSTEIN = 'LI', + SRI_LANKA = 'LK', + LESOTHO = 'LS', + LITHUANIA = 'LT', + LUXEMBOURG = 'LU', + LATVIA = 'LV', + MACAO = 'MO', + SAINT_MARTIN_FRENCH_PART = 'MF', + MOROCCO = 'MA', + MONACO = 'MC', + MOLDOVA_REPUBLIC_OF = 'MD', + MADAGASCAR = 'MG', + MALDIVES = 'MV', + MEXICO = 'MX', + MARSHALL_ISLANDS = 'MH', + NORTH_MACEDONIA = 'MK', + MALI = 'ML', + MALTA = 'MT', + MYANMAR = 'MM', + MONTENEGRO = 'ME', + MONGOLIA = 'MN', + NORTHERN_MARIANA_ISLANDS = 'MP', + MOZAMBIQUE = 'MZ', + MAURITANIA = 'MR', + MONTSERRAT = 'MS', + MARTINIQUE = 'MQ', + MAURITIUS = 'MU', + MALAWI = 'MW', + MALAYSIA = 'MY', + MAYOTTE = 'YT', + NAMIBIA = 'NA', + NEW_CALEDONIA = 'NC', + NIGER = 'NE', + NORFOLK_ISLAND = 'NF', + NIGERIA = 'NG', + NICARAGUA = 'NI', + NIUE = 'NU', + NETHERLANDS = 'NL', + NORWAY = 'NO', + NEPAL = 'NP', + NAURU = 'NR', + NEW_ZEALAND = 'NZ', + OMAN = 'OM', + PAKISTAN = 'PK', + PANAMA = 'PA', + PITCAIRN = 'PN', + PERU = 'PE', + PHILIPPINES = 'PH', + PALAU = 'PW', + PAPUA_NEW_GUINEA = 'PG', + POLAND = 'PL', + PUERTO_RICO = 'PR', + KOREA_DEMOCRATIC_PEOPLES_REPUBLIC_OF = 'KP', + PORTUGAL = 'PT', + PARAGUAY = 'PY', + PALESTINE_STATE_OF = 'PS', + FRENCH_POLYNESIA = 'PF', + QATAR = 'QA', + REUNION = 'RE', + ROMANIA = 'RO', + RUSSIAN_FEDERATION = 'RU', + RWANDA = 'RW', + SAUDI_ARABIA = 'SA', + SUDAN = 'SD', + SENEGAL = 'SN', + SINGAPORE = 'SG', + SOUTH_GEORGIA_AND_THE_SOUTH_SANDWICH_ISLANDS = 'GS', + SAINT_HELENA_ASCENSION_AND_TRISTAN_DA_CUNHA = 'SH', + SVALBARD_AND_JAN_MAYEN = 'SJ', + SOLOMON_ISLANDS = 'SB', + SIERRA_LEONE = 'SL', + EL_SALVADOR = 'SV', + SAN_MARINO = 'SM', + SOMALIA = 'SO', + SAINT_PIERRE_AND_MIQUELON = 'PM', + SERBIA = 'RS', + SOUTH_SUDAN = 'SS', + SAO_TOME_AND_PRINCIPE = 'ST', + SURINAME = 'SR', + SLOVAKIA = 'SK', + SLOVENIA = 'SI', + SWEDEN = 'SE', + ESWATINI = 'SZ', + SINT_MAARTEN_DUTCH_PART = 'SX', + SEYCHELLES = 'SC', + SYRIAN_ARAB_REPUBLIC = 'SY', + TURKS_AND_CAICOS_ISLANDS = 'TC', + CHAD = 'TD', + TOGO = 'TG', + THAILAND = 'TH', + TAJIKISTAN = 'TJ', + TOKELAU = 'TK', + TURKMENISTAN = 'TM', + TIMOR_LESTE = 'TL', + TONGA = 'TO', + TRINIDAD_AND_TOBAGO = 'TT', + TUNISIA = 'TN', + TURKEY = 'TR', + TUVALU = 'TV', + TAIWAN_PROVINCE_OF_CHINA = 'TW', + TANZANIA_UNITED_REPUBLIC_OF = 'TZ', + UGANDA = 'UG', + UKRAINE = 'UA', + UNITED_STATES_MINOR_OUTLYING_ISLANDS = 'UM', + URUGUAY = 'UY', + UNITED_STATES = 'US', + UZBEKISTAN = 'UZ', + HOLY_SEE_VATICAN_CITY_STATE = 'VA', + SAINT_VINCENT_AND_THE_GRENADINES = 'VC', + VENEZUELA_BOLIVARIAN_REPUBLIC_OF = 'VE', + VIRGIN_ISLANDS_BRITISH = 'VG', + VIRGIN_ISLANDS_US = 'VI', + VIET_NAM = 'VN', + VANUATU = 'VU', + WALLIS_AND_FUTUNA = 'WF', + SAMOA = 'WS', + YEMEN = 'YE', + SOUTH_AFRICA = 'ZA', + ZAMBIA = 'ZM', + ZIMBABWE = 'ZW', +} diff --git a/src/common/enums/index.ts b/src/common/enums/index.ts new file mode 100644 index 0000000..f5c60b9 --- /dev/null +++ b/src/common/enums/index.ts @@ -0,0 +1 @@ +export * from './countries-iso.enum'; diff --git a/src/customer/dtos/request/create-customer.request.dto.ts b/src/customer/dtos/request/create-customer.request.dto.ts index 55e5023..83cc614 100644 --- a/src/customer/dtos/request/create-customer.request.dto.ts +++ b/src/customer/dtos/request/create-customer.request.dto.ts @@ -1,6 +1,7 @@ import { ApiProperty } from '@nestjs/swagger'; import { IsBoolean, IsDateString, IsEnum, IsNotEmpty, IsOptional, IsString, IsUUID } from 'class-validator'; import { i18nValidationMessage as i18n } from 'nestjs-i18n'; +import { CountryIso } from '~/common/enums'; import { IsAbove18 } from '~/core/decorators/validations'; import { Gender } from '~/customer/enums'; export class CreateCustomerRequestDto { @@ -20,9 +21,10 @@ export class CreateCustomerRequestDto { gender?: Gender; @ApiProperty({ example: 'JO' }) - @IsString({ message: i18n('validation.IsString', { path: 'general', property: 'customer.countryOfResidence' }) }) - @IsNotEmpty({ message: i18n('validation.IsNotEmpty', { path: 'general', property: 'customer.countryOfResidence' }) }) - countryOfResidence!: string; + @IsEnum(CountryIso, { + message: i18n('validation.IsEnum', { path: 'general', property: 'customer.countryOfResidence' }), + }) + countryOfResidence!: CountryIso; @ApiProperty({ example: '2021-01-01' }) @IsDateString({}, { message: i18n('validation.IsDateString', { path: 'general', property: 'customer.dateOfBirth' }) }) diff --git a/src/customer/repositories/customer.repository.ts b/src/customer/repositories/customer.repository.ts index 100348f..a17b383 100644 --- a/src/customer/repositories/customer.repository.ts +++ b/src/customer/repositories/customer.repository.ts @@ -29,6 +29,7 @@ export class CustomerRepository { firstName: body.firstName, lastName: body.lastName, dateOfBirth: body.dateOfBirth, + countryOfResidence: body.countryOfResidence, }), ); }