aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backend/controllers/userController.go30
-rw-r--r--backend/database/countries.sql252
-rw-r--r--backend/database/init.sql7
-rw-r--r--backend/routes/routes.go1
4 files changed, 290 insertions, 0 deletions
diff --git a/backend/controllers/userController.go b/backend/controllers/userController.go
index b23a303..ab29e32 100644
--- a/backend/controllers/userController.go
+++ b/backend/controllers/userController.go
@@ -67,3 +67,33 @@ func FetchUser(c *gin.Context) {
67 }) 67 })
68 return 68 return
69} 69}
70
71func UpdateCountryCode(c *gin.Context) {
72 // Check if user exists
73 user, exists := c.Get("user")
74 if !exists {
75 c.JSON(http.StatusUnauthorized, models.ErrorResponse("User not logged in."))
76 return
77 }
78 code := c.Query("country_code")
79 if code == "" {
80 c.JSON(http.StatusNotFound, models.ErrorResponse("Enter a valid country code."))
81 return
82 }
83 var validCode string
84 err := database.DB.QueryRow(`SELECT country_code FROM countries WHERE country_code = $1;`, code).Scan(&validCode)
85 if err != nil {
86 c.JSON(http.StatusNotFound, models.ErrorResponse(err.Error()))
87 return
88 }
89 // Valid code, update profile
90 _, err = database.DB.Exec(`UPDATE users SET country_code = $1 WHERE steam_id = $2`, validCode, user.(models.User).SteamID)
91 if err != nil {
92 c.JSON(http.StatusNotFound, models.ErrorResponse(err.Error()))
93 return
94 }
95 c.JSON(http.StatusOK, models.Response{
96 Success: true,
97 Message: "Successfully updated country code.",
98 })
99}
diff --git a/backend/database/countries.sql b/backend/database/countries.sql
new file mode 100644
index 0000000..0272f6f
--- /dev/null
+++ b/backend/database/countries.sql
@@ -0,0 +1,252 @@
1INSERT INTO countries (country_code, country_name) VALUES
2('AF', 'AFGHANISTAN'),
3('AL', 'ALBANIA'),
4('DZ', 'ALGERIA'),
5('AS', 'AMERICAN SAMOA'),
6('AD', 'ANDORRA'),
7('AO', 'ANGOLA'),
8('AI', 'ANGUILLA'),
9('AQ', 'ANTARCTICA'),
10('AG', 'ANTIGUA AND BARBUDA'),
11('AR', 'ARGENTINA'),
12('AM', 'ARMENIA'),
13('AW', 'ARUBA'),
14('AU', 'AUSTRALIA'),
15('AT', 'AUSTRIA'),
16('AZ', 'AZERBAIJAN'),
17('BS', 'BAHAMAS'),
18('BH', 'BAHRAIN'),
19('BD', 'BANGLADESH'),
20('BB', 'BARBADOS'),
21('BY', 'BELARUS'),
22('BE', 'BELGIUM'),
23('BZ', 'BELIZE'),
24('BJ', 'BENIN'),
25('BM', 'BERMUDA'),
26('BT', 'BHUTAN'),
27('BO', 'BOLIVIA'),
28('BA', 'BOSNIA AND HERZEGOVINA'),
29('BW', 'BOTSWANA'),
30('BV', 'BOUVET ISLAND'),
31('BR', 'BRAZIL'),
32('IO', 'BRITISH INDIAN OCEAN TERRITORY'),
33('BN', 'BRUNEI DARUSSALAM'),
34('BG', 'BULGARIA'),
35('BF', 'BURKINA FASO'),
36('BI', 'BURUNDI'),
37('KH', 'CAMBODIA'),
38('CM', 'CAMEROON'),
39('CA', 'CANADA'),
40('CV', 'CAPE VERDE'),
41('KY', 'CAYMAN ISLANDS'),
42('CF', 'CENTRAL AFRICAN REPUBLIC'),
43('TD', 'CHAD'),
44('CL', 'CHILE'),
45('CN', 'CHINA'),
46('CX', 'CHRISTMAS ISLAND'),
47('CC', 'COCOS (KEELING) ISLANDS'),
48('CO', 'COLOMBIA'),
49('KM', 'COMOROS'),
50('CG', 'CONGO'),
51('CD', 'CONGO, THE DEMOCRATIC REPUBLIC OF THE'),
52('CK', 'COOK ISLANDS'),
53('CR', 'COSTA RICA'),
54('CI', 'COTE D''IVOIRE'),
55('HR', 'CROATIA'),
56('CU', 'CUBA'),
57('CY', 'CYPRUS'),
58('CZ', 'CZECHIA'),
59('DK', 'DENMARK'),
60('DJ', 'DJIBOUTI'),
61('DM', 'DOMINICA'),
62('DO', 'DOMINICAN REPUBLIC'),
63('EC', 'ECUADOR'),
64('EG', 'EGYPT'),
65('SV', 'EL SALVADOR'),
66('GQ', 'EQUATORIAL GUINEA'),
67('ER', 'ERITREA'),
68('EE', 'ESTONIA'),
69('ET', 'ETHIOPIA'),
70('FK', 'FALKLAND ISLANDS (MALVINAS)'),
71('FO', 'FAROE ISLANDS'),
72('FJ', 'FIJI'),
73('FI', 'FINLAND'),
74('FR', 'FRANCE'),
75('GF', 'FRENCH GUIANA'),
76('PF', 'FRENCH POLYNESIA'),
77('TF', 'FRENCH SOUTHERN TERRITORIES'),
78('GA', 'GABON'),
79('GM', 'GAMBIA'),
80('GE', 'GEORGIA'),
81('DE', 'GERMANY'),
82('GH', 'GHANA'),
83('GI', 'GIBRALTAR'),
84('GR', 'GREECE'),
85('GL', 'GREENLAND'),
86('GD', 'GRENADA'),
87('GP', 'GUADELOUPE'),
88('GU', 'GUAM'),
89('GT', 'GUATEMALA'),
90('GN', 'GUINEA'),
91('GW', 'GUINEA-BISSAU'),
92('GY', 'GUYANA'),
93('HT', 'HAITI'),
94('HM', 'HEARD ISLAND AND MCDONALD ISLANDS'),
95('VA', 'VATICAN CITY STATE'),
96('HN', 'HONDURAS'),
97('HK', 'HONG KONG'),
98('HU', 'HUNGARY'),
99('IS', 'ICELAND'),
100('IN', 'INDIA'),
101('ID', 'INDONESIA'),
102('IR', 'IRAN'),
103('IQ', 'IRAQ'),
104('IE', 'IRELAND'),
105('IL', 'ISRAEL'),
106('IT', 'ITALY'),
107('JM', 'JAMAICA'),
108('JP', 'JAPAN'),
109('JO', 'JORDAN'),
110('KZ', 'KAZAKHSTAN'),
111('KE', 'KENYA'),
112('KI', 'KIRIBATI'),
113('KP', 'NORTH KOREA'),
114('KR', 'SOUTH KOREA'),
115('KW', 'KUWAIT'),
116('KG', 'KYRGYZSTAN'),
117('LA', 'LAO'),
118('LV', 'LATVIA'),
119('LB', 'LEBANON'),
120('LS', 'LESOTHO'),
121('LR', 'LIBERIA'),
122('LY', 'LIBYAN ARAB JAMAHIRIYA'),
123('LI', 'LIECHTENSTEIN'),
124('LT', 'LITHUANIA'),
125('LU', 'LUXEMBOURG'),
126('MO', 'MACAO'),
127('MK', 'NORTH MACEDONIA'),
128('MG', 'MADAGASCAR'),
129('MW', 'MALAWI'),
130('MY', 'MALAYSIA'),
131('MV', 'MALDIVES'),
132('ML', 'MALI'),
133('MT', 'MALTA'),
134('MH', 'MARSHALL ISLANDS'),
135('MQ', 'MARTINIQUE'),
136('MR', 'MAURITANIA'),
137('MU', 'MAURITIUS'),
138('YT', 'MAYOTTE'),
139('MX', 'MEXICO'),
140('FM', 'MICRONESIA'),
141('MD', 'MOLDOVA'),
142('MC', 'MONACO'),
143('MN', 'MONGOLIA'),
144('MS', 'MONTSERRAT'),
145('MA', 'MOROCCO'),
146('MZ', 'MOZAMBIQUE'),
147('MM', 'MYANMAR'),
148('NA', 'NAMIBIA'),
149('NR', 'NAURU'),
150('NP', 'NEPAL'),
151('NL', 'NETHERLANDS'),
152('AN', 'NETHERLANDS ANTILLES'),
153('NC', 'NEW CALEDONIA'),
154('NZ', 'NEW ZEALAND'),
155('NI', 'NICARAGUA'),
156('NE', 'NIGER'),
157('NG', 'NIGERIA'),
158('NU', 'NIUE'),
159('NF', 'NORFOLK ISLAND'),
160('MP', 'NORTHERN MARIANA ISLANDS'),
161('NO', 'NORWAY'),
162('OM', 'OMAN'),
163('PK', 'PAKISTAN'),
164('PW', 'PALAU'),
165('PS', 'PALESTINE'),
166('PA', 'PANAMA'),
167('PG', 'PAPUA NEW GUINEA'),
168('PY', 'PARAGUAY'),
169('PE', 'PERU'),
170('PH', 'PHILIPPINES'),
171('PN', 'PITCAIRN'),
172('PL', 'POLAND'),
173('PT', 'PORTUGAL'),
174('PR', 'PUERTO RICO'),
175('QA', 'QATAR'),
176('RE', 'REUNION'),
177('RO', 'ROMANIA'),
178('RU', 'RUSSIAN FEDERATION'),
179('RW', 'RWANDA'),
180('SH', 'SAINT HELENA'),
181('KN', 'SAINT KITTS AND NEVIS'),
182('LC', 'SAINT LUCIA'),
183('PM', 'SAINT PIERRE AND MIQUELON'),
184('VC', 'SAINT VINCENT AND THE GRENADINES'),
185('WS', 'SAMOA'),
186('SM', 'SAN MARINO'),
187('ST', 'SAO TOME AND PRINCIPE'),
188('SA', 'SAUDI ARABIA'),
189('SN', 'SENEGAL'),
190('RS', 'SERBIA'),
191('SC', 'SEYCHELLES'),
192('SL', 'SIERRA LEONE'),
193('SG', 'SINGAPORE'),
194('SK', 'SLOVAKIA'),
195('SI', 'SLOVENIA'),
196('SB', 'SOLOMON ISLANDS'),
197('SO', 'SOMALIA'),
198('ZA', 'SOUTH AFRICA'),
199('GS', 'SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS'),
200('ES', 'SPAIN'),
201('LK', 'SRI LANKA'),
202('SD', 'SUDAN'),
203('SR', 'SURINAME'),
204('SJ', 'SVALBARD AND JAN MAYEN'),
205('SZ', 'SWAZILAND'),
206('SE', 'SWEDEN'),
207('CH', 'SWITZERLAND'),
208('SY', 'SYRIAN ARAB REPUBLIC'),
209('TW', 'TAIWAN'),
210('TJ', 'TAJIKISTAN'),
211('TZ', 'TANZANIA'),
212('TH', 'THAILAND'),
213('TL', 'TIMOR-LESTE'),
214('TG', 'TOGO'),
215('TK', 'TOKELAU'),
216('TO', 'TONGA'),
217('TT', 'TRINIDAD AND TOBAGO'),
218('TN', 'TUNISIA'),
219('TR', 'TURKEY'),
220('TM', 'TURKMENISTAN'),
221('TC', 'TURKS AND CAICOS ISLANDS'),
222('TV', 'TUVALU'),
223('UG', 'UGANDA'),
224('UA', 'UKRAINE'),
225('AE', 'UNITED ARAB EMIRATES'),
226('GB', 'UNITED KINGDOM'),
227('US', 'UNITED STATES'),
228('UM', 'UNITED STATES MINOR OUTLYING ISLANDS'),
229('UY', 'URUGUAY'),
230('UZ', 'UZBEKISTAN'),
231('VU', 'VANUATU'),
232('VE', 'VENEZUELA'),
233('VN', 'VIET NAM'),
234('VG', 'VIRGIN ISLANDS, BRITISH'),
235('VI', 'VIRGIN ISLANDS, U.S.'),
236('WF', 'WALLIS AND FUTUNA'),
237('EH', 'WESTERN SAHARA'),
238('YE', 'YEMEN'),
239('ZM', 'ZAMBIA'),
240('ZW', 'ZIMBABWE'),
241('ME', 'MONTENEGRO'),
242('XK', 'KOSOVO'),
243('AX', 'ALAND ISLANDS'),
244('BQ', 'BONAIRE'),
245('CW', 'CURACAO'),
246('GG', 'GUERNSEY'),
247('IM', 'ISLE OF MAN'),
248('JE', 'JERSEY'),
249('BL', 'SAINT BARTHELEMY'),
250('MF', 'SAINT MARTIN'),
251('SX', 'SINT MAARTEN'),
252('SS', 'SOUTH SUDAN'); \ No newline at end of file
diff --git a/backend/database/init.sql b/backend/database/init.sql
index 12a2487..345cee3 100644
--- a/backend/database/init.sql
+++ b/backend/database/init.sql
@@ -4,6 +4,7 @@ DROP TABLE IF EXISTS records_sp;
4DROP TABLE IF EXISTS records_mp; 4DROP TABLE IF EXISTS records_mp;
5DROP TABLE IF EXISTS maps; 5DROP TABLE IF EXISTS maps;
6DROP TABLE IF EXISTS users; 6DROP TABLE IF EXISTS users;
7DROP TABLE IF EXISTS countries;
7 8
8DROP TABLE IF EXISTS demos; 9DROP TABLE IF EXISTS demos;
9 10
@@ -69,4 +70,10 @@ CREATE TABLE titles (
69 title_name TEXT NOT NULL, 70 title_name TEXT NOT NULL,
70 PRIMARY KEY (user_id), 71 PRIMARY KEY (user_id),
71 FOREIGN KEY (user_id) REFERENCES users(steam_id) 72 FOREIGN KEY (user_id) REFERENCES users(steam_id)
73);
74
75CREATE TABLE countries (
76 country_code CHAR(2),
77 country_name TEXT NOT NULL,
78 PRIMARY KEY (country_code)
72); \ No newline at end of file 79); \ No newline at end of file
diff --git a/backend/routes/routes.go b/backend/routes/routes.go
index e9de891..43dfd65 100644
--- a/backend/routes/routes.go
+++ b/backend/routes/routes.go
@@ -16,6 +16,7 @@ func InitRoutes(router *gin.Engine) {
16 v1.GET("/", middleware.CheckAuth, controllers.Home) 16 v1.GET("/", middleware.CheckAuth, controllers.Home)
17 v1.GET("/login", controllers.Login) 17 v1.GET("/login", controllers.Login)
18 v1.GET("/profile", middleware.CheckAuth, controllers.Profile) 18 v1.GET("/profile", middleware.CheckAuth, controllers.Profile)
19 v1.PUT("/profile", middleware.CheckAuth, controllers.UpdateCountryCode)
19 v1.GET("/user/:id", middleware.CheckAuth, controllers.FetchUser) 20 v1.GET("/user/:id", middleware.CheckAuth, controllers.FetchUser)
20 v1.GET("/demo", controllers.DownloadDemoWithID) 21 v1.GET("/demo", controllers.DownloadDemoWithID)
21 v1.POST("/maps/:id/record", middleware.CheckAuth, controllers.CreateRecordWithDemo) 22 v1.POST("/maps/:id/record", middleware.CheckAuth, controllers.CreateRecordWithDemo)