From d29050221276348b0cd6a70baa74259560cfc4fd Mon Sep 17 00:00:00 2001 From: ayocodingit Date: Thu, 9 Mar 2023 21:36:07 +0700 Subject: [PATCH] feat(news): add endpoint find all --- src/internal/news/delivery/http/handler.ts | 23 ++++++++++++++++ src/internal/news/entity/interface.ts | 4 +++ src/internal/news/entity/schema.ts | 0 src/internal/news/news.ts | 26 +++++++++++++++++++ .../news/repository/mongo/repository.ts | 0 src/internal/news/usecase/usecase.ts | 15 +++++++++++ src/main.ts | 2 ++ 7 files changed, 70 insertions(+) create mode 100644 src/internal/news/delivery/http/handler.ts create mode 100644 src/internal/news/entity/interface.ts create mode 100644 src/internal/news/entity/schema.ts create mode 100644 src/internal/news/news.ts create mode 100644 src/internal/news/repository/mongo/repository.ts create mode 100644 src/internal/news/usecase/usecase.ts diff --git a/src/internal/news/delivery/http/handler.ts b/src/internal/news/delivery/http/handler.ts new file mode 100644 index 0000000..1689e0f --- /dev/null +++ b/src/internal/news/delivery/http/handler.ts @@ -0,0 +1,23 @@ +import { NextFunction, Response } from 'express' +import winston from 'winston' +import Usecase from '../../usecase/usecase' +import statusCode from '../../../../pkg/statusCode' +import { Paginate } from '../../../../helpers/paginate' + +class Handler { + constructor(private usecase: Usecase, private logger: winston.Logger) {} + public FindAll() { + return async (req: any, res: Response, next: NextFunction) => { + try { + const paginate = Paginate(req.query) + + const result = await this.usecase.FindAll(paginate) + return res.status(statusCode.OK).json(result) + } catch (error) { + return next(error) + } + } + } +} + +export default Handler diff --git a/src/internal/news/entity/interface.ts b/src/internal/news/entity/interface.ts new file mode 100644 index 0000000..c0c56c0 --- /dev/null +++ b/src/internal/news/entity/interface.ts @@ -0,0 +1,4 @@ +export interface FindAll { + limit: number + page: number +} diff --git a/src/internal/news/entity/schema.ts b/src/internal/news/entity/schema.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/internal/news/news.ts b/src/internal/news/news.ts new file mode 100644 index 0000000..e3d371b --- /dev/null +++ b/src/internal/news/news.ts @@ -0,0 +1,26 @@ +import winston from 'winston' +import { Config } from '../../config/config.interface' +import Jabarprov from '../../external/jabarprov' +import Http from '../../transport/http/http' +import Handler from './delivery/http/handler' +import Usecase from './usecase/usecase' + +class News { + constructor( + private http: Http, + private logger: winston.Logger, + private config: Config + ) { + const repository = new Jabarprov(config, logger) + const usecase = new Usecase(repository, logger) + + this.loadHttp(usecase) + } + + private loadHttp(usecase: Usecase) { + const handler = new Handler(usecase, this.logger) + this.http.app.get('/v1/news', handler.FindAll()) + } +} + +export default News diff --git a/src/internal/news/repository/mongo/repository.ts b/src/internal/news/repository/mongo/repository.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/internal/news/usecase/usecase.ts b/src/internal/news/usecase/usecase.ts new file mode 100644 index 0000000..ebb970a --- /dev/null +++ b/src/internal/news/usecase/usecase.ts @@ -0,0 +1,15 @@ +import winston from 'winston' +import Jabarprov from '../../../external/jabarprov' +import { PropPaginate } from '../../../helpers/paginate' + +class Usecase { + constructor(private jabarprov: Jabarprov, private logger: winston.Logger) {} + + public async FindAll({ limit, page }: PropPaginate) { + const res = await this.jabarprov.Search(page, limit) + + return res + } +} + +export default Usecase diff --git a/src/main.ts b/src/main.ts index 36424d5..b1c3bfd 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,5 +1,6 @@ import config from './config/config' import Mongo from './database/mongo/mongo' +import News from './internal/news/news' import PrayerTime from './internal/prayerTimes/prayerTimes' import Logger from './pkg/logger' import Redis from './pkg/redis' @@ -13,6 +14,7 @@ const main = async () => { // Load App Internal new PrayerTime(http, logger, config) + new News(http, logger, config) if (config.app.env !== 'test') { http.Run(config.app.port.http)