Skip to content

Commit aab66b1

Browse files
committed
feat(cache): add cache for received events so avoid rate limit, for now
when development is ongoing
1 parent 44b9b54 commit aab66b1

File tree

2 files changed

+33
-13
lines changed

2 files changed

+33
-13
lines changed

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
node_modules
22
pnpm-lock.yaml
3-
3+
temp.cache.*.json

app.js

+32-12
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const path = require('path');
33
const axios = require('axios');
44
const markdownit = require('markdown-it');
55
const md = new markdownit();
6-
// const fs = require('fs');
6+
const fs = require('fs');
77
const app = express();
88

99
const PORT = 3000;
@@ -124,6 +124,19 @@ function processResponse(eventsData) {
124124
});
125125
}
126126

127+
function getCacheResponse(username) {
128+
const filename = `temp.cache.${username}.json`;
129+
if (fs.existsSync(filename)) {
130+
const data = fs.readFileSync(filename);
131+
return JSON.parse(data);
132+
}
133+
return null;
134+
}
135+
136+
function saveCacheResponse(username, data) {
137+
const filename = `temp.cache.${username}.json`;
138+
fs.writeFileSync(filename, JSON.stringify(data));
139+
}
127140
// Serve the static HTML page
128141
app.use(express.static(path.join(__dirname, 'public')));
129142

@@ -132,18 +145,25 @@ app.get('/api/events/:username', async (req, res) => {
132145
const { username } = req.params;
133146

134147
try {
135-
// Fetching event data from GitHub API
136-
// /received_events for event user sees, /events for event user triggers
137-
const response = await axios.get(`https://api.github.com/users/${username}/received_events?page=1&per_page=100`);
138-
const response2 = await axios.get(`https://api.github.com/users/${username}/received_events?page=2&per_page=100`);
139-
const eventsData = [...response.data, ...response2.data];
140-
141-
// await fs.promises.writeFile('received_events.json', JSON.stringify(eventsData));
142-
143-
// const fileContent = await fs.promises.readFile('received_events.json', 'utf8');
144-
// const eventsData = JSON.parse(fileContent);
148+
const cache = getCacheResponse(username);
149+
let eventsData;
150+
if (cache) {
151+
eventsData = cache;
152+
} else {
153+
// Fetching event data from GitHub API
154+
// /received_events for event user sees, /events for event user triggers
155+
const response = await axios.get(`https://api.github.com/users/${username}/received_events?page=1&per_page=100`);
156+
const response2 = await axios.get(`https://api.github.com/users/${username}/received_events?page=2&per_page=100`);
157+
eventsData = [...response.data, ...response2.data];
158+
console.log(`Fetched ${eventsData.length} received events for ${username}`);
159+
saveCacheResponse(username, eventsData);
160+
161+
// await fs.promises.writeFile('received_events.json', JSON.stringify(eventsData));
162+
163+
// const fileContent = await fs.promises.readFile('received_events.json', 'utf8');
164+
// const eventsData = JSON.parse(fileContent);
165+
}
145166

146-
console.log(`Fetched ${eventsData.length} received events for ${username}`);
147167

148168
const processedEvents = processResponse(eventsData);
149169
res.json(processedEvents);

0 commit comments

Comments
 (0)