Skip to content

Commit

Permalink
feat: add function to replace path parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
tutkli committed May 6, 2023
1 parent 5ea2bdc commit 71fba70
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 21 deletions.
28 changes: 14 additions & 14 deletions src/clients/anime.client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ export class AnimeClient extends BaseClient {
*/
public async getAnimeFullById(mal_id: number): Promise<JikanResponse<Anime>> {
return new Promise<JikanResponse<Anime>>((resolve, reject) => {
const endpoint = `${AnimeEndpoints.AnimeFullById.replace('{id}', String(mal_id))}`;
const endpoint = this.replacePathParams(AnimeEndpoints.AnimeFullById, { id: mal_id });
this.api
.get<JikanResponse<Anime>>(endpoint)
.then((response: CacheAxiosResponse<JikanResponse<Anime>>) => resolve(response.data))
Expand All @@ -68,7 +68,7 @@ export class AnimeClient extends BaseClient {
*/
public async getAnimeById(mal_id: number): Promise<JikanResponse<Anime>> {
return new Promise<JikanResponse<Anime>>((resolve, reject) => {
const endpoint = `${AnimeEndpoints.AnimeById.replace('{id}', String(mal_id))}`;
const endpoint = this.replacePathParams(AnimeEndpoints.AnimeById, { id: mal_id });
this.api
.get<JikanResponse<Anime>>(endpoint)
.then((response: CacheAxiosResponse<JikanResponse<Anime>>) => resolve(response.data))
Expand All @@ -83,7 +83,7 @@ export class AnimeClient extends BaseClient {
*/
public async getAnimeCharacters(mal_id: number): Promise<JikanResponse<AnimeCharacter[]>> {
return new Promise<JikanResponse<AnimeCharacter[]>>((resolve, reject) => {
const endpoint = `${AnimeEndpoints.AnimeCharacters.replace('{id}', String(mal_id))}`;
const endpoint = this.replacePathParams(AnimeEndpoints.AnimeCharacters, { id: mal_id });
this.api
.get<JikanResponse<AnimeCharacter[]>>(endpoint)
.then((response: CacheAxiosResponse<JikanResponse<AnimeCharacter[]>>) => resolve(response.data))
Expand All @@ -98,7 +98,7 @@ export class AnimeClient extends BaseClient {
*/
public async getAnimeStaff(mal_id: number): Promise<JikanResponse<AnimeStaff[]>> {
return new Promise<JikanResponse<AnimeStaff[]>>((resolve, reject) => {
const endpoint = `${AnimeEndpoints.AnimeStaff.replace('{id}', String(mal_id))}`;
const endpoint = this.replacePathParams(AnimeEndpoints.AnimeStaff, { id: mal_id });
this.api
.get<JikanResponse<AnimeStaff[]>>(endpoint)
.then((response: CacheAxiosResponse<JikanResponse<AnimeStaff[]>>) => resolve(response.data))
Expand All @@ -114,7 +114,7 @@ export class AnimeClient extends BaseClient {
*/
public async getAnimeEpisodes(mal_id: number, page = 1): Promise<JikanResponse<AnimeEpisode[]>> {
return new Promise<JikanResponse<AnimeEpisode[]>>((resolve, reject) => {
const endpoint = `${AnimeEndpoints.AnimeEpisodes.replace('{id}', String(mal_id))}`;
const endpoint = this.replacePathParams(AnimeEndpoints.AnimeEpisodes, { id: mal_id });
this.api
.get<JikanResponse<AnimeEpisode[]>>(endpoint, { params: { page } })
.then((response: CacheAxiosResponse<JikanResponse<AnimeEpisode[]>>) => resolve(response.data))
Expand All @@ -130,10 +130,10 @@ export class AnimeClient extends BaseClient {
*/
public async getAnimeEpisodeById(anime_mal_id: number, episode_mal_id: number): Promise<JikanResponse<AnimeEpisode>> {
return new Promise<JikanResponse<AnimeEpisode>>((resolve, reject) => {
const endpoint = `${AnimeEndpoints.AnimeEpisodeById.replace('{id}', String(anime_mal_id)).replace(
'{episode}',
String(episode_mal_id)
)}`;
const endpoint = this.replacePathParams(AnimeEndpoints.AnimeEpisodeById, {
id: anime_mal_id,
episode: episode_mal_id,
});
this.api
.get<JikanResponse<AnimeEpisode>>(endpoint)
.then((response: CacheAxiosResponse<JikanResponse<AnimeEpisode>>) => resolve(response.data))
Expand All @@ -148,7 +148,7 @@ export class AnimeClient extends BaseClient {
*/
public async getAnimeVideos(mal_id: number): Promise<JikanResponse<AnimeVideos>> {
return new Promise<JikanResponse<AnimeVideos>>((resolve, reject) => {
const endpoint = `${AnimeEndpoints.AnimeVideos.replace('{id}', String(mal_id))}`;
const endpoint = this.replacePathParams(AnimeEndpoints.AnimeVideos, { id: mal_id });
this.api
.get<JikanResponse<AnimeVideos>>(endpoint)
.then((response: CacheAxiosResponse<JikanResponse<AnimeVideos>>) => resolve(response.data))
Expand All @@ -164,7 +164,7 @@ export class AnimeClient extends BaseClient {
*/
public async getAnimeEpisodeVideos(mal_id: number, page = 1): Promise<JikanResponse<AnimeEpisodeVideo[]>> {
return new Promise<JikanResponse<AnimeEpisodeVideo[]>>((resolve, reject) => {
const endpoint = `${AnimeEndpoints.AnimeVideosEpisodes.replace('{id}', String(mal_id))}`;
const endpoint = this.replacePathParams(AnimeEndpoints.AnimeVideosEpisodes, { id: mal_id });
this.api
.get<JikanResponse<AnimeEpisodeVideo[]>>(endpoint, { params: { page } })
.then((response: CacheAxiosResponse<JikanResponse<AnimeEpisodeVideo[]>>) => resolve(response.data))
Expand All @@ -179,7 +179,7 @@ export class AnimeClient extends BaseClient {
*/
public async getAnimePictures(mal_id: number): Promise<JikanResponse<AnimePicture[]>> {
return new Promise<JikanResponse<AnimePicture[]>>((resolve, reject) => {
const endpoint = `${AnimeEndpoints.AnimePictures.replace('{id}', String(mal_id))}`;
const endpoint = this.replacePathParams(AnimeEndpoints.AnimePictures, { id: mal_id });
this.api
.get<JikanResponse<AnimePicture[]>>(endpoint)
.then((response: CacheAxiosResponse<JikanResponse<AnimePicture[]>>) => resolve(response.data))
Expand All @@ -194,7 +194,7 @@ export class AnimeClient extends BaseClient {
*/
public async getAnimeStatistics(mal_id: number): Promise<JikanResponse<AnimeStatistics>> {
return new Promise<JikanResponse<AnimeStatistics>>((resolve, reject) => {
const endpoint = `${AnimeEndpoints.AnimeStatistics.replace('{id}', String(mal_id))}`;
const endpoint = this.replacePathParams(AnimeEndpoints.AnimeStatistics, { id: mal_id });
this.api
.get<JikanResponse<AnimeStatistics>>(endpoint)
.then((response: CacheAxiosResponse<JikanResponse<AnimeStatistics>>) => resolve(response.data))
Expand All @@ -209,7 +209,7 @@ export class AnimeClient extends BaseClient {
*/
public async getAnimeRecommendations(mal_id: number): Promise<JikanResponse<Recommendation[]>> {
return new Promise<JikanResponse<Recommendation[]>>((resolve, reject) => {
const endpoint = `${AnimeEndpoints.AnimeRecommendations.replace('{id}', String(mal_id))}`;
const endpoint = this.replacePathParams(AnimeEndpoints.AnimeRecommendations, { id: mal_id });
this.api
.get<JikanResponse<Recommendation[]>>(endpoint)
.then((response: CacheAxiosResponse<JikanResponse<Recommendation[]>>) => resolve(response.data))
Expand Down
10 changes: 10 additions & 0 deletions src/clients/base.client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,16 @@ export abstract class BaseClient {
}
}

protected replacePathParams(path: string, params: { [key in string]: unknown }): string {
for (const param of Object.keys(params)) {
if (!path.match(`{${param}}`)) throw new Error(`Path does not contain "${param}" parameter.`);

path = path.replace(`{${param}}`, String(params[param]));
}

return path;
}

private addLoggingInterceptors(): void {
this.api.interceptors.request.use(
(config: CacheRequestConfig) => handleRequest(config),
Expand Down
12 changes: 6 additions & 6 deletions src/clients/manga.client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ export class MangaClient extends BaseClient {
*/
public async getMangaFullById(mal_id: number): Promise<JikanResponse<Manga>> {
return new Promise<JikanResponse<Manga>>((resolve, reject) => {
const endpoint = `${MangaEndpoints.MangaFullById.replace('{id}', String(mal_id))}`;
const endpoint = this.replacePathParams(MangaEndpoints.MangaFullById, { id: mal_id });
this.api
.get<JikanResponse<Manga>>(endpoint)
.then((response: CacheAxiosResponse<JikanResponse<Manga>>) => resolve(response.data))
Expand All @@ -64,7 +64,7 @@ export class MangaClient extends BaseClient {
*/
public async getMangaById(mal_id: number): Promise<JikanResponse<Manga>> {
return new Promise<JikanResponse<Manga>>((resolve, reject) => {
const endpoint = `${MangaEndpoints.MangaById.replace('{id}', String(mal_id))}`;
const endpoint = this.replacePathParams(MangaEndpoints.MangaById, { id: mal_id });
this.api
.get<JikanResponse<Manga>>(endpoint)
.then((response: CacheAxiosResponse<JikanResponse<Manga>>) => resolve(response.data))
Expand All @@ -79,7 +79,7 @@ export class MangaClient extends BaseClient {
*/
public async getMangaCharacters(mal_id: number): Promise<JikanResponse<CommonCharacter[]>> {
return new Promise<JikanResponse<CommonCharacter[]>>((resolve, reject) => {
const endpoint = `${MangaEndpoints.MangaCharacters.replace('{id}', String(mal_id))}`;
const endpoint = this.replacePathParams(MangaEndpoints.MangaCharacters, { id: mal_id });
this.api
.get<JikanResponse<CommonCharacter[]>>(endpoint)
.then((response: CacheAxiosResponse<JikanResponse<CommonCharacter[]>>) => resolve(response.data))
Expand All @@ -94,7 +94,7 @@ export class MangaClient extends BaseClient {
*/
public async getMangaPictures(mal_id: number): Promise<JikanResponse<JikanImages[]>> {
return new Promise<JikanResponse<JikanImages[]>>((resolve, reject) => {
const endpoint = `${MangaEndpoints.MangaPictures.replace('{id}', String(mal_id))}`;
const endpoint = this.replacePathParams(MangaEndpoints.MangaPictures, { id: mal_id });
this.api
.get<JikanResponse<JikanImages[]>>(endpoint)
.then((response: CacheAxiosResponse<JikanResponse<JikanImages[]>>) => resolve(response.data))
Expand All @@ -109,7 +109,7 @@ export class MangaClient extends BaseClient {
*/
public async getMangaStatistics(mal_id: number): Promise<JikanResponse<MangaStatistics>> {
return new Promise<JikanResponse<MangaStatistics>>((resolve, reject) => {
const endpoint = `${MangaEndpoints.MangaStatistics.replace('{id}', String(mal_id))}`;
const endpoint = this.replacePathParams(MangaEndpoints.MangaStatistics, { id: mal_id });
this.api
.get<JikanResponse<MangaStatistics>>(endpoint)
.then((response: CacheAxiosResponse<JikanResponse<MangaStatistics>>) => resolve(response.data))
Expand All @@ -124,7 +124,7 @@ export class MangaClient extends BaseClient {
*/
public async getMangaRecommendations(mal_id: number): Promise<JikanResponse<Recommendation[]>> {
return new Promise<JikanResponse<Recommendation[]>>((resolve, reject) => {
const endpoint = `${MangaEndpoints.MangaRecommendations.replace('{id}', String(mal_id))}`;
const endpoint = this.replacePathParams(MangaEndpoints.MangaRecommendations, { id: mal_id });
this.api
.get<JikanResponse<Recommendation[]>>(endpoint)
.then((response: CacheAxiosResponse<JikanResponse<Recommendation[]>>) => resolve(response.data))
Expand Down
2 changes: 1 addition & 1 deletion src/clients/seasons.client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export class SeasonsClient extends BaseClient {
searchParams?: Partial<JikanSeasonsParams>
): Promise<JikanResponse<Anime[]>> {
return new Promise<JikanResponse<Anime[]>>((resolve, reject) => {
const endpoint = `${SeasonsEndpoints.Season.replace('{year}', String(year)).replace('{season}', season)}`;
const endpoint = this.replacePathParams(SeasonsEndpoints.Season, { year: year, season: season });
this.api
.get<JikanResponse<Anime[]>>(endpoint, { params: searchParams })
.then((response: CacheAxiosResponse<JikanResponse<Anime[]>>) => resolve(response.data))
Expand Down

0 comments on commit 71fba70

Please sign in to comment.