1
+ import express , { Request , Response } from 'express'
2
+ import { MockFolder , MockFolderModel } from '../models/mock_folder.model'
3
+ import { ApiResponse } from '../common/api_response'
4
+ import mongoose , { Types } from 'mongoose'
5
+ import { Mock , MockModel } from "../models/mock.model" ;
6
+ import MockFolderHelper from "../helper/mock_folder.helper" ;
7
+ import Constants from "../common/constants" ;
8
+
9
+ const router = express . Router ( )
10
+
11
+ router . get ( '/' , async ( req : Request , res : Response ) : Promise < void > => {
12
+ try {
13
+ const root : MockFolderModel = {
14
+ _id : Constants . rootPath ,
15
+ parentId : null ,
16
+ name : 'Root'
17
+ }
18
+ const mockFolders : MockFolderModel [ ] = await MockFolder . find ( { parentId : Constants . rootPath } )
19
+ const mocks : MockModel [ ] = await Mock . find ( { parentId : Constants . rootPath } )
20
+ const response : ApiResponse = ApiResponse . success ( MockFolderHelper . toJson ( root , mockFolders , mocks ) )
21
+ res . status ( 200 ) . json ( response )
22
+ } catch ( error : unknown ) {
23
+ const response : ApiResponse = ApiResponse . error ( ( error as Error ) . message )
24
+ res . status ( 500 ) . json ( response )
25
+ }
26
+ } )
27
+
28
+ router . get ( '/:id' , async ( req : Request , res : Response ) : Promise < void > => {
29
+ try {
30
+ const mockFolder : MockFolderModel | null = await MockFolder . findById ( req . params . id )
31
+ if ( mockFolder != null ) {
32
+ const subFolders : MockFolderModel [ ] = await MockFolder . find ( { parentId : req . params . id } )
33
+ const mocks : MockModel [ ] = await Mock . find ( { parentId : req . params . id } )
34
+ const response : ApiResponse = ApiResponse . success ( MockFolderHelper . toJson ( mockFolder , subFolders , mocks ) )
35
+ res . status ( 200 ) . json ( response )
36
+ } else {
37
+ const response : ApiResponse = ApiResponse . error ( `No document found with id ${ req . params . id } ` )
38
+ res . status ( 404 ) . json ( response )
39
+ }
40
+ } catch ( error : unknown ) {
41
+ const response : ApiResponse = ApiResponse . error ( 'An error occurred' )
42
+ res . status ( 500 ) . json ( response )
43
+ }
44
+ } )
45
+
46
+ router . post ( '/' , async ( req : Request , res : Response ) : Promise < void > => {
47
+
48
+ const data = new MockFolder ( {
49
+ _id : new Types . ObjectId ( ) ,
50
+ parentId : req . body . parentId ,
51
+ name : req . body . name
52
+ } )
53
+ try {
54
+ const mockFolder : MockFolderModel = await data . save ( )
55
+ const response : ApiResponse = ApiResponse . success ( MockFolderHelper . toJson ( mockFolder ) , 'Document created' )
56
+ res . status ( 201 ) . json ( response )
57
+ } catch ( error : unknown ) {
58
+ const response : ApiResponse = ApiResponse . error ( ( error as Error ) . message )
59
+ res . status ( 401 ) . json ( response )
60
+ }
61
+ } )
62
+
63
+ router . put ( '/:id' , async ( req : Request , res : Response ) : Promise < void > => {
64
+ try {
65
+
66
+ const newName : string | null = req . body . name
67
+
68
+ const query : mongoose . UpdateQuery < MockFolderModel > = { name : newName }
69
+
70
+ MockFolder . findByIdAndUpdate ( req . params . id , query , ( updateError : mongoose . CallbackError ) => {
71
+ if ( updateError ) {
72
+ const response : ApiResponse = ApiResponse . error ( ( updateError as Error ) . message )
73
+ res . status ( 500 ) . json ( response )
74
+ } else {
75
+ const response : ApiResponse = ApiResponse . success ( null , 'Document updated successfully' )
76
+ res . status ( 200 ) . json ( response )
77
+ }
78
+ } )
79
+ } catch ( error : unknown ) {
80
+ const response : ApiResponse = ApiResponse . error ( ( error as Error ) . message )
81
+ res . status ( 500 ) . json ( response )
82
+ }
83
+ } )
84
+
85
+ router . delete ( '/:id' , async ( req : Request , res : Response ) : Promise < void > => {
86
+
87
+ try {
88
+ await deleteChildren ( req . params . id )
89
+ const response : ApiResponse = ApiResponse . success ( null , `Document with id ${ req . params . id } removed` )
90
+ res . status ( 200 ) . json ( response )
91
+ } catch ( error : unknown ) {
92
+ const response : ApiResponse = ApiResponse . error ( ( error as Error ) . message )
93
+ res . status ( 500 ) . json ( response )
94
+ }
95
+
96
+ } )
97
+
98
+ async function deleteChildren ( folderId : string ) : Promise < void > {
99
+
100
+ // deleting folder
101
+ await MockFolder . findByIdAndDelete ( folderId )
102
+
103
+ // deleting child files
104
+ await Mock . deleteMany ( { parentId : folderId } )
105
+
106
+ // getting child folders
107
+ const childFolders : MockFolderModel [ ] = await MockFolder . find ( { parentId : folderId } )
108
+
109
+ // deleting child folders
110
+ await MockFolder . deleteMany ( { parentId : folderId } )
111
+
112
+ // recursively deleting children folder contents
113
+ for ( const childFolder of childFolders ) {
114
+ await deleteChildren ( childFolder . _id ) ;
115
+ }
116
+
117
+ }
118
+
119
+ module . exports = router
0 commit comments