mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-10-26 19:14:12 +00:00 
			
		
		
		
	Add fail safe for sponsors endpoint in case of not being able to connect
This commit is contained in:
		
							parent
							
								
									a1a3eec262
								
							
						
					
					
						commit
						349f846f32
					
				
					 2 changed files with 30 additions and 23 deletions
				
			
		|  | @ -1,20 +1,20 @@ | |||
| import { Inject, Injectable } from '@nestjs/common'; | ||||
| import * as Redis from 'ioredis'; | ||||
| import { Endpoint } from '@/server/api/endpoint-base.js'; | ||||
| import { DI } from '@/di-symbols.js'; | ||||
| import * as Redis from 'ioredis'; | ||||
| 
 | ||||
| export const meta = { | ||||
| 	tags: ["meta"], | ||||
| 	description: "Get Sharkey GH Sponsors", | ||||
| 	tags: ['meta'], | ||||
| 	description: 'Get Sharkey GH Sponsors', | ||||
| 
 | ||||
| 	requireCredential: false, | ||||
| 	requireCredentialPrivateMode: false, | ||||
| } as const; | ||||
| 
 | ||||
| export const paramDef = { | ||||
| 	type: "object", | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		forceUpdate: { type: "boolean", default: false }, | ||||
| 		forceUpdate: { type: 'boolean', default: false }, | ||||
| 	}, | ||||
| 	required: [], | ||||
| } as const; | ||||
|  | @ -25,22 +25,29 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | |||
|         @Inject(DI.redis) private redisClient: Redis.Redis, | ||||
| 	) { | ||||
| 		super(meta, paramDef, async (ps, me) => { | ||||
|             let sponsors; | ||||
|             const cachedSponsors = await this.redisClient.get("sponsors"); | ||||
|             if (!ps.forceUpdate && cachedSponsors) { | ||||
|                 sponsors = JSON.parse(cachedSponsors); | ||||
|             } else { | ||||
|                 AbortSignal.timeout ??= function timeout(ms) { | ||||
|                     const ctrl = new AbortController(); | ||||
|                     setTimeout(() => ctrl.abort(), ms); | ||||
|                     return ctrl.signal; | ||||
|                 }; | ||||
| 			let sponsors; | ||||
| 			const cachedSponsors = await this.redisClient.get('sponsors'); | ||||
| 			if (!ps.forceUpdate && cachedSponsors) { | ||||
| 				sponsors = JSON.parse(cachedSponsors); | ||||
| 			} else { | ||||
| 				AbortSignal.timeout ??= function timeout(ms) { | ||||
| 					const ctrl = new AbortController(); | ||||
| 					setTimeout(() => ctrl.abort(), ms); | ||||
| 					return ctrl.signal; | ||||
| 				}; | ||||
| 
 | ||||
|                 sponsors = await fetch("https://kaifa.ch/transfem-sponsors.json", { signal: AbortSignal.timeout(2000) }) | ||||
|                     .then((response) => response.json()); | ||||
|                 await this.redisClient.set("sponsors", JSON.stringify(sponsors), "EX", 3600); | ||||
|             } | ||||
|             return { sponsor_data: sponsors['sponsors'] }; | ||||
|         }); | ||||
|     } | ||||
| 				try { | ||||
| 					sponsors = await fetch('https://kaifa.ch/transfem-sponsors.json', { signal: AbortSignal.timeout(2000) }) | ||||
| 						.then((response) => response.json()); | ||||
| 
 | ||||
| 					await this.redisClient.set('sponsors', JSON.stringify(sponsors), 'EX', 3600); | ||||
| 				} catch (error) { | ||||
| 					sponsors = { | ||||
| 						sponsors: [], | ||||
| 					}; | ||||
| 				} | ||||
| 			} | ||||
| 			return { sponsor_data: sponsors['sponsors'] }; | ||||
| 		}); | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -121,7 +121,7 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| 						</a> | ||||
| 					</div> | ||||
| 				</FormSection> | ||||
| 				<FormSection> | ||||
| 				<FormSection v-if="sponsors[0].length > 0"> | ||||
| 					<template #label>Our lovely Sponsors</template> | ||||
| 					<div :class="$style.contributors"> | ||||
| 						<span | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue