Skip to content

Commit

Permalink
Standardized country data API (#170)
Browse files Browse the repository at this point in the history
  • Loading branch information
Disura-Randunu authored Sep 23, 2024
1 parent e26961c commit 400b8fd
Show file tree
Hide file tree
Showing 9 changed files with 409 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import menteeRouter from './routes/mentee/mentee.route'
import mentorRouter from './routes/mentor/mentor.route'
import profileRouter from './routes/profile/profile.route'
import path from 'path'
import countryRouter from './routes/country/country.route'

const app = express()
const staticFolder = 'uploads'
Expand Down Expand Up @@ -45,6 +46,7 @@ app.use('/api/mentors', mentorRouter)
app.use('/api/mentees', menteeRouter)
app.use('/api/categories', categoryRouter)
app.use('/api/emails', emailRouter)
app.use('/api/countries', countryRouter)

if (!fs.existsSync(staticFolder)) {
fs.mkdirSync(staticFolder, { recursive: true })
Expand Down
25 changes: 25 additions & 0 deletions src/controllers/country.controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import type { Request, Response } from 'express'
import type { ApiResponse } from '../types'
import type Country from '../entities/country.entity'
import { getAllCountries } from '../services/country.service'

export const getCountries = async (
req: Request,
res: Response
): Promise<ApiResponse<Country[]>> => {
try {
const data = await getAllCountries()
if (!data) {
return res.status(404).json({ message: 'Countries Not Found' })
}
return res.status(200).json({ data, message: 'Countries Found' })
} catch (err) {
if (err instanceof Error) {
console.error('Error executing query', err)
return res
.status(500)
.json({ error: 'Internal server error', message: err.message })
}
throw err
}
}
19 changes: 19 additions & 0 deletions src/entities/country.entity.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { Column, Entity } from 'typeorm'
import BaseEntity from './baseEntity'

@Entity()
export class Country extends BaseEntity {
@Column()
code: string

@Column()
name: string

constructor(code: string, name: string) {
super()
this.code = code
this.name = name
}
}

export default Country
15 changes: 15 additions & 0 deletions src/migrations/1726849469636-CreateCountryTable.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { MigrationInterface, QueryRunner } from 'typeorm'

export class CreateCountryTable1726849469636 implements MigrationInterface {
name = 'CreateCountryTable1726849469636'

public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TABLE "country" ("uuid" uuid NOT NULL DEFAULT uuid_generate_v4(), "created_at" TIMESTAMP NOT NULL DEFAULT now(), "updated_at" TIMESTAMP NOT NULL DEFAULT now(), "code" character varying NOT NULL, "name" character varying NOT NULL, CONSTRAINT "PK_4e06beff3ecfb1a974312fe536d" PRIMARY KEY ("uuid"))`
)
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DROP TABLE "country"`)
}
}
8 changes: 8 additions & 0 deletions src/routes/country/country.route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import express from 'express'
import { getCountries } from '../../controllers/country.controller'

const countryRouter = express.Router()

countryRouter.get('/', getCountries)

export default countryRouter
254 changes: 254 additions & 0 deletions src/scripts/countries.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,254 @@
{
"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",
"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",
"bo": "Bolivia",
"bq": "Caribbean Netherlands",
"br": "Brazil",
"bs": "Bahamas",
"bt": "Bhutan",
"bv": "Bouvet Island",
"bw": "Botswana",
"by": "Belarus",
"bz": "Belize",
"ca": "Canada",
"cc": "Cocos (Keeling) Islands",
"cd": "DR Congo",
"cf": "Central African Republic",
"cg": "Republic of the Congo",
"ch": "Switzerland",
"ci": "Côte d'Ivoire (Ivory Coast)",
"ck": "Cook Islands",
"cl": "Chile",
"cm": "Cameroon",
"cn": "China",
"co": "Colombia",
"cr": "Costa Rica",
"cu": "Cuba",
"cv": "Cape Verde",
"cw": "Curaçao",
"cx": "Christmas Island",
"cy": "Cyprus",
"cz": "Czechia",
"de": "Germany",
"dj": "Djibouti",
"dk": "Denmark",
"dm": "Dominica",
"do": "Dominican Republic",
"dz": "Algeria",
"ec": "Ecuador",
"ee": "Estonia",
"eg": "Egypt",
"eh": "Western Sahara",
"er": "Eritrea",
"es": "Spain",
"et": "Ethiopia",
"eu": "European Union",
"fi": "Finland",
"fj": "Fiji",
"fk": "Falkland Islands",
"fm": "Micronesia",
"fo": "Faroe Islands",
"fr": "France",
"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",
"gt": "Guatemala",
"gu": "Guam",
"gw": "Guinea-Bissau",
"gy": "Guyana",
"hk": "Hong Kong",
"hm": "Heard Island and McDonald Islands",
"hn": "Honduras",
"hr": "Croatia",
"ht": "Haiti",
"hu": "Hungary",
"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",
"je": "Jersey",
"jm": "Jamaica",
"jo": "Jordan",
"jp": "Japan",
"ke": "Kenya",
"kg": "Kyrgyzstan",
"kh": "Cambodia",
"ki": "Kiribati",
"km": "Comoros",
"kn": "Saint Kitts and Nevis",
"kp": "North Korea",
"kr": "South Korea",
"kw": "Kuwait",
"ky": "Cayman Islands",
"kz": "Kazakhstan",
"la": "Laos",
"lb": "Lebanon",
"lc": "Saint Lucia",
"li": "Liechtenstein",
"lk": "Sri Lanka",
"lr": "Liberia",
"ls": "Lesotho",
"lt": "Lithuania",
"lu": "Luxembourg",
"lv": "Latvia",
"ly": "Libya",
"ma": "Morocco",
"mc": "Monaco",
"md": "Moldova",
"me": "Montenegro",
"mf": "Saint Martin",
"mg": "Madagascar",
"mh": "Marshall Islands",
"mk": "North Macedonia",
"ml": "Mali",
"mm": "Myanmar",
"mn": "Mongolia",
"mo": "Macau",
"mp": "Northern Mariana Islands",
"mq": "Martinique",
"mr": "Mauritania",
"ms": "Montserrat",
"mt": "Malta",
"mu": "Mauritius",
"mv": "Maldives",
"mw": "Malawi",
"mx": "Mexico",
"my": "Malaysia",
"mz": "Mozambique",
"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",
"om": "Oman",
"pa": "Panama",
"pe": "Peru",
"pf": "French Polynesia",
"pg": "Papua New Guinea",
"ph": "Philippines",
"pk": "Pakistan",
"pl": "Poland",
"pm": "Saint Pierre and Miquelon",
"pn": "Pitcairn Islands",
"pr": "Puerto Rico",
"ps": "Palestine",
"pt": "Portugal",
"pw": "Palau",
"py": "Paraguay",
"qa": "Qatar",
"re": "Réunion",
"ro": "Romania",
"rs": "Serbia",
"ru": "Russia",
"rw": "Rwanda",
"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": "São Tomé and Príncipe",
"sv": "El Salvador",
"sx": "Sint Maarten",
"sy": "Syria",
"sz": "Eswatini (Swaziland)",
"tc": "Turks and Caicos Islands",
"td": "Chad",
"tf": "French Southern and Antarctic Lands",
"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",
"tz": "Tanzania",
"ua": "Ukraine",
"ug": "Uganda",
"um": "United States Minor Outlying Islands",
"un": "United Nations",
"us": "United States",
"uy": "Uruguay",
"uz": "Uzbekistan",
"va": "Vatican City (Holy See)",
"vc": "Saint Vincent and the Grenadines",
"ve": "Venezuela",
"vg": "British Virgin Islands",
"vi": "United States Virgin Islands",
"vn": "Vietnam",
"vu": "Vanuatu",
"wf": "Wallis and Futuna",
"ws": "Samoa",
"xk": "Kosovo",
"ye": "Yemen",
"yt": "Mayotte",
"za": "South Africa",
"zm": "Zambia",
"zw": "Zimbabwe"
}
Loading

0 comments on commit 400b8fd

Please sign in to comment.