refactoring and modularize some functions, added prettier rules, change package manager to YARN

pull/1/head
carlos-burelo 4 years ago
parent fc71f89422
commit d7755d7f32

@ -0,0 +1,7 @@
{
"tabWidth": 2,
"useTabs": false,
"semi": true,
"singleQuote": true,
"printWidth": 100
}

@ -1,6 +1,6 @@
{ {
"watch": ["src"], "watch": ["src"],
"ext": "ts", "ext": "ts",
"ignore": ["src/**/.spect.ts"], "ignore": ["src/**/.spect.ts"],
"exec": "npx ts-node" "exec": "ts-node src/index.ts"
} }

3958
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -1,33 +1,33 @@
{ {
"name": "monoschinos-api-ts", "name": "monoschinos-api-ts",
"version": "1.0.0", "version": "1.2.0",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"start": "echo \"Error: no test specified\" && exit 1", "start": "node dist/index.js",
"build": "tsc ", "build": "tsc ",
"dev": "nodemon src/index.ts" "dev": "nodemon"
}, },
"keywords": [], "keywords": [],
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"devDependencies": { "devDependencies": {
"@types/axios": "^0.14.0", "@types/axios": "^0.14.0",
"@types/cheerio": "^0.22.28", "@types/cheerio": "^0.22.28",
"@types/cors": "^2.8.10", "@types/cors": "^2.8.10",
"@types/dotenv": "^8.2.0", "@types/dotenv": "^8.2.0",
"@types/express": "^4.17.11", "@types/express": "^4.17.11",
"@types/morgan": "^1.9.2", "@types/morgan": "^1.9.2",
"nodemon": "^2.0.7", "nodemon": "^2.0.7",
"ts-node": "^9.1.1", "ts-node": "^9.1.1",
"typescript": "^4.2.3" "typescript": "^4.2.3"
}, },
"dependencies": { "dependencies": {
"axios": "^0.21.1", "axios": "^0.21.1",
"cheerio": "^1.0.0-rc.5", "cheerio": "^1.0.0-rc.5",
"cors": "^2.8.5", "cors": "^2.8.5",
"dotenv": "^8.2.0", "dotenv": "^8.2.0",
"express": "^4.17.1", "express": "^4.17.1",
"morgan": "^1.10.0" "morgan": "^1.10.0"
} }
} }

@ -1,16 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://carlos-burelo.github.io/src/css/main.css">
<title>Document</title>
</head>
<body>
<h1>Hello from my server</h1>
</body>
</html>

@ -1,14 +1,9 @@
import express from "express"; import express from 'express';
import cors from "cors"; import cors from 'cors';
import morgan from "morgan"; import morgan from 'morgan';
import routes from './routes/api.routes'; import routes from './routes/api.routes';
const app = express();
const app = express() app.use(cors(), morgan('dev'));
// app.use('/', express.static('docs'));
app.use(cors(),morgan('dev'));
app.use('/', express.static('public'));
app.use('/', routes); app.use('/', routes);
export default app;
export default app;

@ -1,21 +1,18 @@
const appConfig = { const appConfig = {
host: process.env.HOST || 'localhost', host: process.env.HOST || 'localhost',
port: process.env.PORT || 8000 port: process.env.PORT || 5000,
} };
const page = "https://monoschinos2.com"; const page = 'https://monoschinos2.com';
const urls = { const urls = {
main: page, main: page,
emision: page +'/emision?page=', emision: page + '/emision?page=',
search: page +'/search?q=', search: page + '/search?q=',
anime: page +'/anime', anime: page + '/anime',
episode: page +'/ver', episode: page + '/ver',
gender: page +'/genero', gender: page + '/genero',
letter: page +'/letra', letter: page + '/letra',
ova: page +'/categoria/ova' ova: page + '/categoria/ova',
} };
export { export { urls, appConfig };
urls,
appConfig
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,34 @@
import axios from 'axios';
import cheerio from 'cheerio';
import { Request, Response } from 'express';
import { urls } from '../config';
export async function getEmision(req: Request, res: Response) {
try {
let { page = '1' } = req.query;
const { data } = await axios.get(`${urls.emision}${page}`);
const $ = cheerio.load(data);
const animes = $('.animes .container .row article')
.map((i, e) => {
let el: cheerio.Cheerio = $(e);
let category: string = el.find('.category').text();
return {
id: el.find('a').attr('href').split('/')[4],
title: el.find('.Title').text(),
img: el.find('.Image img').attr('src'),
category: el.find('.category').text().substring(1, category.length),
year: parseInt(el.find('.fecha').text()),
};
})
.toArray();
let pagesBase: string = $('.pagination').text().match(/\d/g).pop();
let pages = parseInt(pagesBase);
res.json({ animes, pages }).status(200);
} catch (err) {
res.json({
message: err.message,
success: false,
});
}
}
// 46 lines before refactoring

@ -0,0 +1,32 @@
import cheerio from 'cheerio';
import axios from 'axios';
import { urls } from '../config';
import { Response, Request } from 'express';
export async function getLastest(req: Request, res: Response) {
try {
const { data } = await axios.get(urls.main);
const $ = cheerio.load(data);
let getLastest = $('.container .caps .container')[0];
const animes: cheerio.Element[] = $(getLastest)
.find('.row article')
.map((i, e) => {
let el: cheerio.Cheerio = $(e);
let type: string = el.find('.Image figure span').text();
return {
id: el
.find('a')
.attr('href')
.replace(/https:\/\/monoschinos2\.com\/ver\//, ''),
title: el.find('.Title').html().split('\t')[0],
cover: el.find('.Image img').attr('src'),
type: type.substring(1, type.length),
episode: parseInt(el.find('.dataEpi .episode').text().split('\n')[1]),
};
})
.toArray();
return res.json(animes).status(200);
} catch (error) {
return res.json({ error: error.message }).status(500);
}
}

@ -0,0 +1,2 @@
export * from './getLastest';
export * from './getEmision';

@ -2,8 +2,9 @@ import app from './app';
import { appConfig } from './config' import { appConfig } from './config'
function init(host:any, port:any) { function init(host:any, port:any) {
app.listen(port, () => { app.listen(port, host, ( ) => {
console.info(`API Running on: ${host}:${port}`); console.clear()
console.info(`API Running on: ${host}:${port} ============================`);
}) })
} }

@ -3,14 +3,16 @@ export interface EmisionResponse{
pages: number; pages: number;
} }
export interface EmisionI{ export interface EmisionI{
id?:string; id: string;
title:string; title: string;
cover:string; img: string;
category:string; category: string;
year:string; year: number;
} }
// const anime: {
// }
export interface LastestAnimeI { export interface LastestAnimeI {
title: string title: string
cover: string cover: string
@ -19,33 +21,33 @@ export interface LastestAnimeI {
type: string type: string
} }
export interface AnimeI{ export interface AnimeI{
id?: string; id: string;
title?: string; title: string;
banner?: string; banner: string;
type?: string; type: string;
cover?: string; cover: string;
sinopsis?: string; sinopsis: string;
status?: string; status: string;
date?: string; date: string;
genders?: Array<GenderI>; genders: GenderI[];
sugestions?: Array<SuggestionI>; sugestions: SuggestionI[];
episodes?: Array<EpI>; episodes: EpI[];
} }
export interface GenderI{ export interface GenderI{
id?:string; id:string;
title:string; title:string;
} }
export interface SuggestionI{ export interface SuggestionI{
id?:string; id:string;
title?:string; title:string;
cover?:string; cover:string;
year?:number; year:number;
} }
export interface EpI{ export interface EpI{
id?:string; id:string;
number?:string; number:number;
} }
export interface AnimeSearchI { export interface AnimeSearchI {

@ -1,70 +1,69 @@
import { Router } from 'express'; import { Router } from 'express';
const routes = Router(); const routes = Router();
import { import {
getEmision, getAnime,
getLastest, getAnimes,
getAnime, searchAnime,
getAnimes, getEpisode,
searchAnime, getGenders,
getEpisode, getGender,
getGenders, getCategories,
getGender, getYears,
getCategories, getYear,
getYears, getLetters,
getYear, getBy,
getLetters, } from '../controllers/controller';
getBy
} from '../controllers/controller'
import { getEmision, getLastest } from '../controllers';
routes.get('/lastest', (req, res) => { routes.get('/lastest', (req, res) => {
getLastest(req, res); getLastest(req, res);
}); });
routes.get('/emision', (req, res) => { routes.get('/emision', (req, res) => {
getEmision(req, res); getEmision(req, res);
}); });
routes.get('/anime/:id', (req, res) => { routes.get('/anime/:id', (req, res) => {
getAnime(req, res); getAnime(req, res);
}); });
routes.get('/animes/:page', (req, res) => { routes.get('/animes/:page', (req, res) => {
getAnimes(req, res); getAnimes(req, res);
}); });
routes.get('/ver/:id', (req, res) => { routes.get('/ver/:id', (req, res) => {
getEpisode(req, res); getEpisode(req, res);
}); });
routes.get('/search/:id', (req, res) => { routes.get('/search/:id', (req, res) => {
searchAnime(req, res); searchAnime(req, res);
}); });
routes.get('/genders', (req, res) => { routes.get('/genders', (req, res) => {
getGenders(req, res); getGenders(req, res);
}); });
routes.get('/gender/:gender/:page', (req, res) => { routes.get('/gender/:gender/:page', (req, res) => {
getGender(req, res); getGender(req, res);
}); });
routes.get('/categories', (req, res) => { routes.get('/categories', (req, res) => {
getCategories(req, res); getCategories(req, res);
}); });
routes.get('/years', (req, res) => { routes.get('/years', (req, res) => {
getYears(req, res); getYears(req, res);
}); });
routes.get('/year/:year/:page', (req, res) => { routes.get('/year/:year/:page', (req, res) => {
getYear(req, res); getYear(req, res);
}); });
routes.get('/letters', (req, res) => { routes.get('/letters', (req, res) => {
getLetters(req, res); getLetters(req, res);
}); });
routes.get('/category/:category/gender/:gender', (req, res) => { routes.get('/category/:category/gender/:gender', (req, res) => {
getBy(req, res, true) getBy(req, res, true);
}) });
routes.get('/gender/:gender', (req, res) => { routes.get('/gender/:gender', (req, res) => {
getBy(req, res); getBy(req, res);
}) });
routes.get('/letter/:letter', (req, res) => { routes.get('/letter/:letter', (req, res) => {
getBy(req, res); getBy(req, res);
}) });
routes.get('/category/:category', (req, res) => { routes.get('/category/:category', (req, res) => {
getBy(req, res); getBy(req, res);
}) });
export default routes export default routes;

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save