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"],
"ext": "ts",
"ignore": ["src/**/.spect.ts"],
"exec": "npx ts-node"
"watch": ["src"],
"ext": "ts",
"ignore": ["src/**/.spect.ts"],
"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",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "echo \"Error: no test specified\" && exit 1",
"build": "tsc ",
"dev": "nodemon src/index.ts"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@types/axios": "^0.14.0",
"@types/cheerio": "^0.22.28",
"@types/cors": "^2.8.10",
"@types/dotenv": "^8.2.0",
"@types/express": "^4.17.11",
"@types/morgan": "^1.9.2",
"nodemon": "^2.0.7",
"ts-node": "^9.1.1",
"typescript": "^4.2.3"
},
"dependencies": {
"axios": "^0.21.1",
"cheerio": "^1.0.0-rc.5",
"cors": "^2.8.5",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"morgan": "^1.10.0"
}
"name": "monoschinos-api-ts",
"version": "1.2.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node dist/index.js",
"build": "tsc ",
"dev": "nodemon"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@types/axios": "^0.14.0",
"@types/cheerio": "^0.22.28",
"@types/cors": "^2.8.10",
"@types/dotenv": "^8.2.0",
"@types/express": "^4.17.11",
"@types/morgan": "^1.9.2",
"nodemon": "^2.0.7",
"ts-node": "^9.1.1",
"typescript": "^4.2.3"
},
"dependencies": {
"axios": "^0.21.1",
"cheerio": "^1.0.0-rc.5",
"cors": "^2.8.5",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"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 cors from "cors";
import morgan from "morgan";
import express from 'express';
import cors from 'cors';
import morgan from 'morgan';
import routes from './routes/api.routes';
const app = express()
app.use(cors(),morgan('dev'));
app.use('/', express.static('public'));
const app = express();
app.use(cors(), morgan('dev'));
// app.use('/', express.static('docs'));
app.use('/', routes);
export default app;

@ -1,21 +1,18 @@
const appConfig = {
host: process.env.HOST || 'localhost',
port: process.env.PORT || 8000
}
const page = "https://monoschinos2.com";
host: process.env.HOST || 'localhost',
port: process.env.PORT || 5000,
};
const page = 'https://monoschinos2.com';
const urls = {
main: page,
emision: page +'/emision?page=',
search: page +'/search?q=',
anime: page +'/anime',
episode: page +'/ver',
gender: page +'/genero',
letter: page +'/letra',
ova: page +'/categoria/ova'
}
main: page,
emision: page + '/emision?page=',
search: page + '/search?q=',
anime: page + '/anime',
episode: page + '/ver',
gender: page + '/genero',
letter: page + '/letra',
ova: page + '/categoria/ova',
};
export {
urls,
appConfig
}
export { 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'
function init(host:any, port:any) {
app.listen(port, () => {
console.info(`API Running on: ${host}:${port}`);
app.listen(port, host, ( ) => {
console.clear()
console.info(`API Running on: ${host}:${port} ============================`);
})
}

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

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

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