Commit 0c9b74ac authored by Разиев Абдрашид's avatar Разиев Абдрашид 💬

#1 Добавлена начальная настройка сервера

parent 04ff1da5
......@@ -13,6 +13,8 @@
"author": "",
"license": "ISC",
"dependencies": {
"@types/cors": "^2.8.14",
"cors": "^2.8.5",
"express": "^4.18.2",
"ts-node": "^10.9.1",
"tslib": "^2.6.0",
......@@ -21,13 +23,7 @@
"devDependencies": {
"@types/express": "^4.17.17",
"@types/node": "^20.4.2",
"@typescript-eslint/eslint-plugin": "^6.0.0",
"@typescript-eslint/parser": "^6.0.0",
"eslint": "^8.45.0",
"eslint-config-prettier": "^8.8.0",
"eslint-plugin-prettier": "^5.0.0",
"nodemon": "^3.0.1",
"tsconfig-paths": "^4.2.0",
"prettier": "^3.0.0"
"tsconfig-paths": "^4.2.0"
}
}
......@@ -2,6 +2,7 @@ import express from 'express';
import { Application, RequestHandler } from 'express';
import { AppInit } from './interfaces/AppInit.interface';
import { IRoute } from './interfaces/IRoute.interface';
import {errorHandler} from "@/middlewares/errorHandler";
class App {
public app: Application;
......@@ -13,12 +14,22 @@ class App {
this.initAssets();
this.initMiddlewares(appInit.middlewares);
this.initRoutes(appInit.controllers);
this.initErrorHandler()
}
private initMiddlewares(middlewares: RequestHandler[]) {
middlewares.forEach((middleware) => {
this.app.use(middleware);
});
}
private initErrorHandler = () =>{
this.app.use('*', (req, res)=>{
res.status(404).send({
success: false,
messages: 'Resource not found'
})
})
this.app.use(errorHandler())
}
private initRoutes(routes: IRoute[]) {
routes.forEach((route) => {
this.app.use(route.path, route.router);
......
import { RequestHandler } from 'express';
import { ArticleService } from '../services/article.service';
export class ArticleController {
private service: ArticleService;
constructor() {
this.service = new ArticleService();
}
getAllArticles: RequestHandler = (req, res): void => {
const articles = this.service.getAllArticles;
res.send(articles);
};
getArticle: RequestHandler = (req, res): void => {
const article = this.service.getArticle(req.params.id);
res.send(article);
};
createArticle: RequestHandler = (req, res): void => {
const article = this.service.createArticle(req.body);
res.send(article);
};
}
import { RequestHandler } from 'express';
import {MessagesService} from "@/services/messages.service";
export class MessagesController {
private service: MessagesService;
constructor() {
this.service = new MessagesService();
}
getMessage: RequestHandler = (req,res,next) =>{
try {
const message = this.service.getMessage(req.params.date)
if(message){
res.send(message)
}else{
res.status(400).send({
"error": "error date"
})
}
}catch (e){
next()
}
}
getAllMessages: RequestHandler = (req, res, next): void => {
try {
const articles = this.service.getAllMessages();
res.send(articles);
}
catch (e){
next(e)
}
};
createMessages: RequestHandler = (req, res): void => {
const messages = this.service.createMessages(req.body)
res.send(messages);
};
}
import App from './app';
import logger from './middlewares/logger';
import { ArticleRoute } from './routes/article.route';
import cors from 'cors'
import {MessagesRoute} from "@/routes/messages.route";
const app = new App({
port: 8000,
middlewares: [logger()],
controllers: [new ArticleRoute()],
middlewares: [logger(), cors()],
controllers: [new MessagesRoute()],
});
app.listen();
export interface IArticle {
id: string;
title: string;
description: string;
}
import { Router } from 'express';
import { ArticleController } from '../controllers/article.controller';
import { IRoute } from '../interfaces/IRoute.interface';
export class ArticleRoute implements IRoute {
public path = '/articles';
public router = Router();
private controller: ArticleController;
constructor() {
this.controller = new ArticleController();
this.init();
}
private init() {
this.router.get('/', this.controller.getAllArticles);
this.router.get('/:id', this.controller.getArticle);
this.router.post('/', this.controller.createArticle);
}
}
import { Router } from 'express';
import { MessagesController } from '../controllers/messages.controller';
import { IRoute } from '../interfaces/IRoute.interface';
import {createMessageValidator} from "@/middlewares/createMessageValidator";
import {getMessageValidator} from "@/middlewares/getMessageValidator";
export class MessagesRoute implements IRoute {
public path = '/messages';
public router = Router();
private controller: MessagesController;
constructor() {
this.controller = new MessagesController();
this.init();
}
private init() {
this.router.post('/', createMessageValidator(), this.controller.createMessages);
this.router.get('/', this.controller.getAllMessages);
this.router.get('/:date', getMessageValidator(), this.controller.getMessage);
}
}
import { IArticle } from '../interfaces/IArticle.interface';
export class ArticleService {
private articles: IArticle[] = [];
getAllArticles = (): IArticle[] => {
return this.articles;
};
getArticle = (id: string): IArticle => {
const article = this.articles.find((article) => article.id === id);
if (article) return article;
else throw new Error('invalid id');
};
createArticle = (data: IArticle): IArticle => {
return {
id: Math.random().toString(),
title: data.title,
description: data.description,
};
};
}
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment