1
+ import Tour from './../models/Tour.js'
2
+
3
+ export const createTour = async ( req , res ) => {
4
+ const newTour = new Tour ( req . body )
5
+
6
+ try {
7
+ const savedTour = await newTour . save ( )
8
+ res . status ( 200 ) . json ( { success :true , message : 'Succefully Created' , data : savedTour } )
9
+ } catch ( error ) {
10
+ res . status ( 500 ) . json ( { success :false , message : 'Failed to Create. try again' } )
11
+ }
12
+ }
13
+
14
+ //update tour
15
+ export const updateTour = async ( req , res ) => {
16
+ const id = req . params . id
17
+ try {
18
+ const updateTour = await Tour . findByIdAndUpdate ( id , {
19
+ $set : req . body
20
+ } , { new :true } )
21
+
22
+ res . status ( 200 ) . json ( { success :true , message : 'Succefully updated' , data : updateTour } )
23
+
24
+ } catch ( error ) {
25
+ res . status ( 500 ) . json ( { success :false , message : 'Failed to update. try again' } )
26
+ }
27
+ }
28
+ export const deleteTour = async ( req , res ) => {
29
+ const id = req . params . id
30
+ try {
31
+ const deletedTour = await Tour . findByIdAndDelete ( id )
32
+
33
+ res . status ( 200 ) . json ( { success :true , message : 'Succefully Deleted' } )
34
+
35
+ } catch ( error ) {
36
+ res . status ( 500 ) . json ( { success :false , message : 'Failed to Delete' } )
37
+ }
38
+ }
39
+ export const getSingleTour = async ( req , res ) => {
40
+ const id = req . params . id
41
+ try {
42
+ const tour = await Tour . findById ( id ) . populate ( 'reviews' )
43
+
44
+ res . status ( 200 ) . json ( { success :true , message : 'Succefull' , data : tour } )
45
+
46
+ } catch ( error ) {
47
+ res . status ( 404 ) . json ( { success :false , message : 'Not Found' } )
48
+ }
49
+ }
50
+
51
+ export const getAllTour = async ( req , res ) => {
52
+
53
+ //for paginaion
54
+ const page = parseInt ( req . query . page )
55
+
56
+ try {
57
+ const tours = await Tour . find ( { } ) . populate ( 'reviews' ) . skip ( page * 8 ) . limit ( 8 )
58
+
59
+ res . status ( 200 ) . json ( { success :true , count : tours . length , message : 'Succefully' , data : tours } )
60
+ } catch ( error ) {
61
+ res . status ( 404 ) . json ( { success :false , message : 'Not Found' } )
62
+ }
63
+ }
64
+
65
+ // get tour by search
66
+ export const getTourBySearch = async ( req , res ) => {
67
+
68
+ const city = new RegExp ( req . query . city , 'i' )
69
+ const distance = parseInt ( req . query . distance )
70
+ const maxGroupSize = parseInt ( req . query . maxGroupSize )
71
+
72
+ try {
73
+ //gte (Greater than Equal)
74
+ const tours = await Tour . find ( { city, distance :{ $gte :distance } , maxGroupSize :{ $gte :maxGroupSize } } ) . populate ( 'reviews' )
75
+ res . status ( 200 ) . json ( { success :true , count : tours . length , message : 'Succefully' , data : tours } )
76
+
77
+ } catch ( error ) {
78
+ res . status ( 404 ) . json ( { success :false , message : 'Not Found' } )
79
+ }
80
+ }
81
+
82
+ export const getFeaturedTour = async ( req , res ) => {
83
+
84
+ try {
85
+ const tours = await Tour . find ( { featured : true } ) . populate ( 'reviews' ) . limit ( 8 )
86
+
87
+ res . status ( 200 ) . json ( { success :true , message : 'Succefully' , data : tours } )
88
+ } catch ( error ) {
89
+ res . status ( 404 ) . json ( { success :false , message : 'Not Found' } )
90
+ }
91
+ }
92
+
93
+ // Geat Tour Counts
94
+ export const getTourCount = async ( req , res ) => {
95
+ try {
96
+ const tourCount = await Tour . estimatedDocumentCount ( )
97
+ res . status ( 200 ) . json ( { success : true , data : tourCount } )
98
+ } catch ( error ) {
99
+ res . status ( 500 ) . json ( { success :false , message : 'failed to fetch' } )
100
+ }
101
+ }
0 commit comments