Skip to content

Commit 95a9e0e

Browse files
committed
*** wip can query events
1 parent d14283d commit 95a9e0e

File tree

6 files changed

+321
-0
lines changed

6 files changed

+321
-0
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Implementing Project Process
2+
3+
STARTER_CHARACTER = 🛠️
4+
5+
# Steps
6+
7+
1. Identify the api challenges to needed to build to project.
8+
2. Create sub tasks to explore thouse challenges.
9+
3. For each:
10+
a. Suggest options
11+
b. Create a test, or simple sample
12+
c. Implement until challenge is showing to be overcome
13+
2. Once api risks have been flushed out, move to implementing features.
14+
15+
16+
17+
18+

.windsurf/processes/Project_Overview.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,7 @@ This is a web site, where you can tell your address (city) and get calendar requ
1111
- htmlx
1212
- thymeleaf
1313

14+
## Features
15+
16+
- [X] Homepage: Enter your city to get northern lights event suggestions (Spring Boot + Thymeleaf)
17+
- [ ] Calander Creater for cities. Create a public calendar for a city. empty at first. And stories the city locations in the calendar. This is triggered the first time a city is entered.
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package org.samples;
2+
3+
import java.io.BufferedReader;
4+
import java.io.InputStreamReader;
5+
import java.net.HttpURLConnection;
6+
import java.net.URL;
7+
import java.nio.charset.StandardCharsets;
8+
import java.util.regex.Matcher;
9+
import java.util.regex.Pattern;
10+
11+
public class NoaaAuroraService {
12+
public static String getAuroraAlert(String city, double latitude, double longitude) throws Exception {
13+
// Auroras.live current endpoint
14+
String url = "https://api.auroras.live/v1/?type=all&lat=" + latitude + "&long=" + longitude + "&forecast=false";
15+
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
16+
conn.setInstanceFollowRedirects(true);
17+
conn.setRequestMethod("GET");
18+
conn.setRequestProperty("Accept", "application/json");
19+
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
20+
StringBuilder response = new StringBuilder();
21+
String inputLine;
22+
while ((inputLine = in.readLine()) != null) {
23+
response.append(inputLine);
24+
}
25+
in.close();
26+
conn.disconnect();
27+
String auroraJson = response.toString();
28+
return auroraJson;
29+
}
30+
}
31+
Lines changed: 252 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
1+
{
2+
"date": "2025-07-25T01:39:42+00:00",
3+
"ace": {
4+
"date": "2025-07-25T01:39:42+00:00",
5+
"bz": "0",
6+
"density": "0.48",
7+
"speed": "573.1",
8+
"kp1hour": "2.33",
9+
"kp4hour": "2.33",
10+
"kp": "2.33",
11+
"colour": {
12+
"bz": "green",
13+
"density": "green",
14+
"speed": "orange",
15+
"kp1hour": "green",
16+
"kp4hour": "green",
17+
"kp": "green"
18+
}
19+
},
20+
"weather": false,
21+
"threeday": {
22+
"date": "2025-07-25T01:39:42+00:00",
23+
"dates": [
24+
"2025-07-25T00:00:00+00:00",
25+
"2025-07-26T00:00:00+00:00",
26+
"2025-07-27T00:00:00+00:00"
27+
],
28+
"values": [
29+
[
30+
{
31+
"date": "2025-07-25T00:00:00+00:00",
32+
"now": true,
33+
"start": "2025-07-25T00:00:00+00:00",
34+
"end": "2025-07-25T03:00:00+00:00",
35+
"value": "3.67",
36+
"colour": "yellow"
37+
},
38+
{
39+
"date": "2025-07-25T00:00:00+00:00",
40+
"now": false,
41+
"start": "2025-07-25T03:00:00+00:00",
42+
"end": "2025-07-25T06:00:00+00:00",
43+
"value": "3.00",
44+
"colour": "yellow"
45+
},
46+
{
47+
"date": "2025-07-25T00:00:00+00:00",
48+
"now": false,
49+
"start": "2025-07-25T06:00:00+00:00",
50+
"end": "2025-07-25T09:00:00+00:00",
51+
"value": "2.67",
52+
"colour": "green"
53+
},
54+
{
55+
"date": "2025-07-25T00:00:00+00:00",
56+
"now": false,
57+
"start": "2025-07-25T09:00:00+00:00",
58+
"end": "2025-07-25T12:00:00+00:00",
59+
"value": "2.33",
60+
"colour": "green"
61+
},
62+
{
63+
"date": "2025-07-25T00:00:00+00:00",
64+
"now": false,
65+
"start": "2025-07-25T12:00:00+00:00",
66+
"end": "2025-07-25T15:00:00+00:00",
67+
"value": "2.00",
68+
"colour": "green"
69+
},
70+
{
71+
"date": "2025-07-25T00:00:00+00:00",
72+
"now": false,
73+
"start": "2025-07-25T15:00:00+00:00",
74+
"end": "2025-07-25T18:00:00+00:00",
75+
"value": "2.33",
76+
"colour": "green"
77+
},
78+
{
79+
"date": "2025-07-25T00:00:00+00:00",
80+
"now": false,
81+
"start": "2025-07-25T18:00:00+00:00",
82+
"end": "2025-07-25T21:00:00+00:00",
83+
"value": "2.33",
84+
"colour": "green"
85+
},
86+
{
87+
"date": "2025-07-25T00:00:00+00:00",
88+
"now": false,
89+
"start": "2025-07-25T21:00:00+00:00",
90+
"end": "2025-07-26T00:00:00+00:00",
91+
"value": "2.67",
92+
"colour": "green"
93+
}
94+
],
95+
[
96+
{
97+
"date": "2025-07-26T00:00:00+00:00",
98+
"now": true,
99+
"start": "2025-07-26T00:00:00+00:00",
100+
"end": "2025-07-26T03:00:00+00:00",
101+
"value": "2.33",
102+
"colour": "green"
103+
},
104+
{
105+
"date": "2025-07-26T00:00:00+00:00",
106+
"now": false,
107+
"start": "2025-07-26T03:00:00+00:00",
108+
"end": "2025-07-26T06:00:00+00:00",
109+
"value": "1.67",
110+
"colour": "green"
111+
},
112+
{
113+
"date": "2025-07-26T00:00:00+00:00",
114+
"now": false,
115+
"start": "2025-07-26T06:00:00+00:00",
116+
"end": "2025-07-26T09:00:00+00:00",
117+
"value": "1.33",
118+
"colour": "green"
119+
},
120+
{
121+
"date": "2025-07-26T00:00:00+00:00",
122+
"now": false,
123+
"start": "2025-07-26T09:00:00+00:00",
124+
"end": "2025-07-26T12:00:00+00:00",
125+
"value": "1.33",
126+
"colour": "green"
127+
},
128+
{
129+
"date": "2025-07-26T00:00:00+00:00",
130+
"now": false,
131+
"start": "2025-07-26T12:00:00+00:00",
132+
"end": "2025-07-26T15:00:00+00:00",
133+
"value": "1.00",
134+
"colour": "green"
135+
},
136+
{
137+
"date": "2025-07-26T00:00:00+00:00",
138+
"now": false,
139+
"start": "2025-07-26T15:00:00+00:00",
140+
"end": "2025-07-26T18:00:00+00:00",
141+
"value": "1.33",
142+
"colour": "green"
143+
},
144+
{
145+
"date": "2025-07-26T00:00:00+00:00",
146+
"now": false,
147+
"start": "2025-07-26T18:00:00+00:00",
148+
"end": "2025-07-26T21:00:00+00:00",
149+
"value": "1.33",
150+
"colour": "green"
151+
},
152+
{
153+
"date": "2025-07-26T00:00:00+00:00",
154+
"now": false,
155+
"start": "2025-07-26T21:00:00+00:00",
156+
"end": "2025-07-27T00:00:00+00:00",
157+
"value": "1.67",
158+
"colour": "green"
159+
}
160+
],
161+
[
162+
{
163+
"date": "2025-07-27T00:00:00+00:00",
164+
"now": true,
165+
"start": "2025-07-27T00:00:00+00:00",
166+
"end": "2025-07-27T03:00:00+00:00",
167+
"value": "2.00",
168+
"colour": "green"
169+
},
170+
{
171+
"date": "2025-07-27T00:00:00+00:00",
172+
"now": false,
173+
"start": "2025-07-27T03:00:00+00:00",
174+
"end": "2025-07-27T06:00:00+00:00",
175+
"value": "2.00",
176+
"colour": "green"
177+
},
178+
{
179+
"date": "2025-07-27T00:00:00+00:00",
180+
"now": false,
181+
"start": "2025-07-27T06:00:00+00:00",
182+
"end": "2025-07-27T09:00:00+00:00",
183+
"value": "3.67",
184+
"colour": "yellow"
185+
},
186+
{
187+
"date": "2025-07-27T00:00:00+00:00",
188+
"now": false,
189+
"start": "2025-07-27T09:00:00+00:00",
190+
"end": "2025-07-27T12:00:00+00:00",
191+
"value": "5.00 (G1)",
192+
"colour": "orange"
193+
},
194+
{
195+
"date": "2025-07-27T00:00:00+00:00",
196+
"now": false,
197+
"start": "2025-07-27T12:00:00+00:00",
198+
"end": "2025-07-27T15:00:00+00:00",
199+
"value": "4.00",
200+
"colour": "yellow"
201+
},
202+
{
203+
"date": "2025-07-27T00:00:00+00:00",
204+
"now": false,
205+
"start": "2025-07-27T15:00:00+00:00",
206+
"end": "2025-07-27T18:00:00+00:00",
207+
"value": "3.33",
208+
"colour": "yellow"
209+
},
210+
{
211+
"date": "2025-07-27T00:00:00+00:00",
212+
"now": false,
213+
"start": "2025-07-27T18:00:00+00:00",
214+
"end": "2025-07-27T21:00:00+00:00",
215+
"value": "3.00",
216+
"colour": "yellow"
217+
},
218+
{
219+
"date": "2025-07-27T00:00:00+00:00",
220+
"now": false,
221+
"start": "2025-07-27T21:00:00+00:00",
222+
"end": "2025-07-28T00:00:00+00:00",
223+
"value": "3.33",
224+
"colour": "yellow"
225+
}
226+
]
227+
]
228+
},
229+
"probability": {
230+
"date": "2025-07-25T01:39:42+00:00",
231+
"calculated": {
232+
"lat": 73.125,
233+
"long": -156.445,
234+
"value": 5,
235+
"colour": "green"
236+
},
237+
"colour": "green",
238+
"lat": "64.8378",
239+
"long": "-147.7164",
240+
"value": 0,
241+
"highest": {
242+
"date": "2025-07-25T01:39:42+00:00",
243+
"colour": "orange",
244+
"lat": 54.8438,
245+
"long": 80.5078,
246+
"value": 53
247+
}
248+
},
249+
"message": [
250+
"Due to changes to data from the Space Weather Prediction Centre, the 1 hour and 4 hour Kp forecasts are unavailable and have been replaced with the current Kp. This issue will be resolved when alternate data is available"
251+
]
252+
}

src/test/java/org/samples/NorthernLightTests.canFetchNoaaAuroraAlerts.approved.txt

Whitespace-only changes.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.samples;
2+
3+
import org.approvaltests.Approvals;
4+
import org.approvaltests.JsonApprovals;
5+
import org.junit.jupiter.api.Test;
6+
7+
public class NorthernLightTests {
8+
@Test
9+
public void canFetchNoaaAuroraAlerts() throws Exception {
10+
String city = "Fairbanks";
11+
double latitude = 64.8378;
12+
double longitude = -147.7164;
13+
String result = NoaaAuroraService.getAuroraAlert(city, latitude, longitude);
14+
JsonApprovals.verifyJson(result);
15+
}
16+
}

0 commit comments

Comments
 (0)