📙 Finishing implementing routes of v3

pull/33/head
capitanwesler 4 years ago
parent e327b4be11
commit 6325d31cc1

@ -3,6 +3,13 @@ import { requestGot } from '../utils/requestCall';
import { animeFlvInfo, jkanimeInfo, videoServersJK } from '../utils/util'; import { animeFlvInfo, jkanimeInfo, videoServersJK } from '../utils/util';
import { transformUrlServer } from '../utils/transformerUrl'; import { transformUrlServer } from '../utils/transformerUrl';
import AnimeModel, { Anime as ModelA } from '../database/models/anime.model'; import AnimeModel, { Anime as ModelA } from '../database/models/anime.model';
import {
animeExtraInfo,
getAnimeVideoPromo,
getAnimeCharacters,
getRelatedAnimesFLV,
getRelatedAnimesMAL,
} from '../utils/util';
import urls from '../utils/urls'; import urls from '../utils/urls';
/* /*
@ -272,7 +279,51 @@ export default class AnimeController {
} }
} }
async getAnimeGenres(req: Request, res: Response, next: NextFunction) { async getRandomAnime(req: Request, res: Response, next: NextFunction) {
const { genre, order, page } = req.params; let animeQuery: ModelA[] | null;
let animeResult: any;
try {
animeQuery = await AnimeModel.aggregate([{ $sample: { size: 1 } }]);
} catch (err) {
return next(err);
}
if (!animeQuery[0].jkanime) {
animeResult = {
title: animeQuery[0].title || null,
poster: animeQuery[0].poster || null,
synopsis: animeQuery[0].description || null,
status: animeQuery[0].state || null,
type: animeQuery[0].type || null,
rating: animeQuery[0].score || null,
genres: animeQuery[0].genres || null,
moreInfo: await animeExtraInfo(animeQuery[0].mal_id),
promo: await getAnimeVideoPromo(animeQuery[0].mal_id),
characters: await getAnimeCharacters(animeQuery[0].mal_id),
related: await getRelatedAnimesFLV(animeQuery[0].id),
};
} else {
animeResult = {
title: animeQuery[0].title || null,
poster: animeQuery[0].poster || null,
synopsis: animeQuery[0].description || null,
status: animeQuery[0].state || null,
type: animeQuery[0].type || null,
rating: animeQuery[0].score || null,
genres: animeQuery[0].genres || null,
moreInfo: await animeExtraInfo(animeQuery[0].mal_id),
promo: await getAnimeVideoPromo(animeQuery[0].mal_id),
characters: await getAnimeCharacters(animeQuery[0].mal_id),
related: await getRelatedAnimesMAL(animeQuery[0].mal_id),
};
}
if (animeResult) {
res.set('Cache-Control', 'no-store');
res.status(200).json({ animeResult });
} else {
res.status(500).json({ message: 'Aruppi lost in the shell' });
}
} }
} }

@ -1,6 +1,7 @@
import { NextFunction, Request, Response } from 'express'; import { NextFunction, Request, Response } from 'express';
import { requestGot } from '../utils/requestCall'; import { requestGot } from '../utils/requestCall';
import AnimeModel, { Anime } from '../database/models/anime.model'; import AnimeModel, { Anime } from '../database/models/anime.model';
import GenreModel, { Genre } from '../database/models/genre.model';
import { import {
animeExtraInfo, animeExtraInfo,
getAnimeVideoPromo, getAnimeVideoPromo,
@ -209,4 +210,51 @@ export default class DirectoryController {
res.status(500).json({ message: 'Aruppi lost in the shell' }); res.status(500).json({ message: 'Aruppi lost in the shell' });
} }
} }
async getAnimeGenres(req: Request, res: Response, next: NextFunction) {
const { genre, order, page } = req.params;
let data: Genre[];
let resultReq: any;
try {
if (genre === undefined && order === undefined && page === undefined) {
data = await GenreModel.find();
} else {
if (page !== undefined) {
resultReq = await requestGot(
`${urls.BASE_ANIMEFLV_JELU}Genres/${genre}/${order}/${page}`,
{ parse: true, scrapy: false },
);
} else {
resultReq = await requestGot(
`${urls.BASE_ANIMEFLV_JELU}Genres/${genre}/${order}/1`,
{ parse: true, scrapy: false },
);
}
}
} catch (err) {
return next(err);
}
const result: any[] = resultReq.animes.map((item: any) => {
return {
id: item.id,
title: item.title.trim(),
mention: genre,
page: page,
poster: item.poster,
banner: item.banner,
synopsis: item.synopsis,
type: item.type,
rating: item.rating,
genre: item.genre,
};
});
if (result.length > 0) {
res.status(200).json({ result });
} else {
res.status(500).json({ message: 'Aruppi lost in the shell' });
}
}
} }

@ -415,4 +415,76 @@ export default class UtilsController {
res.status(500).json({ message: 'Aruppi lost in the shell' }); res.status(500).json({ message: 'Aruppi lost in the shell' });
} }
} }
async getDestAnimePlatforms(req: Request, res: Response, next: NextFunction) {
let data: any;
try {
data = await requestGot(
`${urls.BASE_ARUPPI}res/documents/animelegal/top.json`,
{ parse: true, scrapy: false },
);
} catch (err) {
return next(err);
}
const result: any[] = data.map((item: any) => {
return {
id: item.id,
name: item.name,
logo: item.logo,
link: item.link,
};
});
if (result.length > 0) {
res.status(200).json({ result });
} else {
res.status(500).json({ message: 'Aruppi lost in the shell' });
}
}
async getPlatforms(req: Request, res: Response, next: NextFunction) {
const { id } = req.params;
let data: any;
if (id === undefined) {
data = await requestGot(
`${urls.BASE_ARUPPI}res/documents/animelegal/type/platforms.json`,
{ parse: true, scrapy: false },
);
} else if (
id === 'producers' ||
id === 'apps' ||
id === 'publishers' ||
'events'
) {
data = await requestGot(
`${urls.BASE_ARUPPI}res/documents/animelegal/type/${id}.json`,
{ parse: true, scrapy: false },
);
} else {
data = await requestGot(
`${urls.BASE_ARUPPI}res/documents/animelegal/type/${id}.json`,
{ parse: true, scrapy: false },
);
}
const result: any[] = data.map((item: any) => {
return {
id: item.id,
name: item.name,
type: item.type,
logo: item.logo,
cover: item.cover,
webpage: item.webpage,
};
});
if (result.length > 0) {
res.status(200).json({ result });
} else {
res.status(500).json({ message: 'Aruppi lost in the shell' });
}
}
} }

@ -79,6 +79,7 @@ routes.get(
'/api/v4/getAnimeServers/:id([^/]+/[^/]+)', '/api/v4/getAnimeServers/:id([^/]+/[^/]+)',
animeController.getServers, animeController.getServers,
); );
routes.get('/api/v4/randomAnime', animeController.getRandomAnime);
/* Directory Controller */ /* Directory Controller */
routes.get( routes.get(
@ -90,6 +91,10 @@ routes.get('/api/v4/allSeasons', directoryController.allSeasons);
routes.get('/api/v4/laterSeasons', directoryController.laterSeasons); routes.get('/api/v4/laterSeasons', directoryController.laterSeasons);
routes.get('/api/v4/moreInfo/:title', directoryController.getMoreInfo); routes.get('/api/v4/moreInfo/:title', directoryController.getMoreInfo);
routes.get('/api/v4/search/:title', directoryController.search); routes.get('/api/v4/search/:title', directoryController.search);
routes.get(
'/api/v4/getByGenres/:genre?/:order?/:page?',
directoryController.getAnimeGenres,
);
/* Utils Controller */ /* Utils Controller */
routes.get('/api/v4/anitakume', utilsController.getAnitakume); routes.get('/api/v4/anitakume', utilsController.getAnitakume);
@ -103,5 +108,7 @@ routes.get('/api/v4/themes/:title', utilsController.getOpAndEd);
routes.get('/api/v4/themesYear/:year?', utilsController.getThemesYear); routes.get('/api/v4/themesYear/:year?', utilsController.getThemesYear);
routes.get('/api/v4/randomTheme', utilsController.randomTheme); routes.get('/api/v4/randomTheme', utilsController.randomTheme);
routes.get('/api/v4/artists/:id?', utilsController.getArtist); routes.get('/api/v4/artists/:id?', utilsController.getArtist);
routes.get('/api/v4/destAnimePlatforms', utilsController.getDestAnimePlatforms);
routes.get('/api/v4/platforms/:id?', utilsController.getPlatforms);
export default routes; export default routes;

Loading…
Cancel
Save