Get nodes per country list with /lightning/nodes/country/:country API

This commit is contained in:
nymkappa 2022-07-13 00:25:40 +02:00
parent 561d75c694
commit fc5fd244d0
No known key found for this signature in database
GPG Key ID: E155910B16E8BD04
2 changed files with 28 additions and 0 deletions

View File

@ -124,6 +124,21 @@ class NodesApi {
throw e;
}
}
public async $getNodesPerCountry(country: string) {
try {
const query = `SELECT nodes.* FROM nodes
JOIN geo_names ON geo_names.id = nodes.country_id
WHERE LOWER(json_extract(names, '$.en')) = ?
`;
const [rows]: any = await DB.query(query, [`"${country}"`]);
return rows;
} catch (e) {
logger.err(`Cannot get nodes for country ${country}. Reason: ${e instanceof Error ? e.message : e}`);
throw e;
}
}
}
export default new NodesApi();

View File

@ -6,6 +6,7 @@ class NodesRoutes {
public initRoutes(app: Application) {
app
.get(config.MEMPOOL.API_URL_PREFIX + 'lightning/nodes/country/:country', this.$getNodesPerCountry)
.get(config.MEMPOOL.API_URL_PREFIX + 'lightning/nodes/search/:search', this.$searchNode)
.get(config.MEMPOOL.API_URL_PREFIX + 'lightning/nodes/top', this.$getTopNodes)
.get(config.MEMPOOL.API_URL_PREFIX + 'lightning/nodes/asShare', this.$getNodesAsShare)
@ -69,6 +70,18 @@ class NodesRoutes {
res.status(500).send(e instanceof Error ? e.message : e);
}
}
private async $getNodesPerCountry(req: Request, res: Response) {
try {
const nodes = await nodesApi.$getNodesPerCountry(req.params.country.toLowerCase());
res.header('Pragma', 'public');
res.header('Cache-control', 'public');
res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString());
res.json(nodes);
} catch (e) {
res.status(500).send(e instanceof Error ? e.message : e);
}
}
}
export default new NodesRoutes();