1+ // Blog controller factories (Clean Architecture)
2+ const defaultHeaders = {
3+ 'Content-Type' : 'application/json' ,
4+ 'x-content-type-options' : 'nosniff' ,
5+ } ;
6+
7+ const createBlogController = ( { createBlogUseCaseHandler, errorHandlers, logEvents } ) =>
8+ async function createBlogControllerHandler ( httpRequest ) {
9+ const { body } = httpRequest ;
10+ if ( ! body || Object . keys ( body ) . length === 0 ) {
11+ return {
12+ headers : defaultHeaders ,
13+ statusCode : 400 ,
14+ errorMessage : 'No blog data provided' ,
15+ } ;
16+ }
17+ try {
18+ const createdBlog = await createBlogUseCaseHandler ( body ) ;
19+ return {
20+ headers : defaultHeaders ,
21+ statusCode : 201 ,
22+ data : { createdBlog } ,
23+ } ;
24+ } catch ( e ) {
25+ logEvents && logEvents ( e . message , 'blogController.log' ) ;
26+ return {
27+ headers : defaultHeaders ,
28+ statusCode : 500 ,
29+ errorMessage : e . message ,
30+ } ;
31+ }
32+ } ;
33+
34+ const findAllBlogsController = ( { findAllBlogsUseCaseHandler, logEvents } ) =>
35+ async function findAllBlogsControllerHandler ( httpRequest ) {
36+ try {
37+ const blogs = await findAllBlogsUseCaseHandler ( ) ;
38+ return {
39+ headers : defaultHeaders ,
40+ statusCode : 200 ,
41+ data : { blogs } ,
42+ } ;
43+ } catch ( e ) {
44+ logEvents && logEvents ( e . message , 'blogController.log' ) ;
45+ return {
46+ headers : defaultHeaders ,
47+ statusCode : 500 ,
48+ errorMessage : e . message ,
49+ } ;
50+ }
51+ } ;
52+
53+ const findOneBlogController = ( { findOneBlogUseCaseHandler, logEvents } ) =>
54+ async function findOneBlogControllerHandler ( httpRequest ) {
55+ const { blogId } = httpRequest . params ;
56+ if ( ! blogId ) {
57+ return {
58+ headers : defaultHeaders ,
59+ statusCode : 400 ,
60+ errorMessage : 'No blog Id provided' ,
61+ } ;
62+ }
63+ try {
64+ const blog = await findOneBlogUseCaseHandler ( { blogId } ) ;
65+ return {
66+ headers : defaultHeaders ,
67+ statusCode : 200 ,
68+ data : { blog } ,
69+ } ;
70+ } catch ( e ) {
71+ logEvents && logEvents ( e . message , 'blogController.log' ) ;
72+ return {
73+ headers : defaultHeaders ,
74+ statusCode : 500 ,
75+ errorMessage : e . message ,
76+ } ;
77+ }
78+ } ;
79+
80+ const updateBlogController = ( { updateBlogUseCaseHandler, logEvents } ) =>
81+ async function updateBlogControllerHandler ( httpRequest ) {
82+ const { blogId } = httpRequest . params ;
83+ const updateData = httpRequest . body ;
84+ if ( ! blogId || ! updateData ) {
85+ return {
86+ headers : defaultHeaders ,
87+ statusCode : 400 ,
88+ errorMessage : 'No blog Id or update data provided' ,
89+ } ;
90+ }
91+ try {
92+ const updatedBlog = await updateBlogUseCaseHandler ( { blogId, updateData } ) ;
93+ return {
94+ headers : defaultHeaders ,
95+ statusCode : 200 ,
96+ data : { updatedBlog } ,
97+ } ;
98+ } catch ( e ) {
99+ logEvents && logEvents ( e . message , 'blogController.log' ) ;
100+ return {
101+ headers : defaultHeaders ,
102+ statusCode : 500 ,
103+ errorMessage : e . message ,
104+ } ;
105+ }
106+ } ;
107+
108+ const deleteBlogController = ( { deleteBlogUseCaseHandler, logEvents } ) =>
109+ async function deleteBlogControllerHandler ( httpRequest ) {
110+ const { blogId } = httpRequest . params ;
111+ if ( ! blogId ) {
112+ return {
113+ headers : defaultHeaders ,
114+ statusCode : 400 ,
115+ errorMessage : 'No blog Id provided' ,
116+ } ;
117+ }
118+ try {
119+ const deleted = await deleteBlogUseCaseHandler ( { blogId } ) ;
120+ return {
121+ headers : defaultHeaders ,
122+ statusCode : 200 ,
123+ data : deleted ,
124+ } ;
125+ } catch ( e ) {
126+ logEvents && logEvents ( e . message , 'blogController.log' ) ;
127+ return {
128+ headers : defaultHeaders ,
129+ statusCode : 500 ,
130+ errorMessage : e . message ,
131+ } ;
132+ }
133+ } ;
134+
135+ module . exports = {
136+ createBlogController,
137+ findAllBlogsController,
138+ findOneBlogController,
139+ updateBlogController,
140+ deleteBlogController,
141+ } ;
0 commit comments