github.com/rehabaam/TDBackend@v0.0.0-20231117190225-f9f7c226e96f/services/common.go (about) 1 package commands 2 3 import ( 4 "fmt" 5 "io" 6 "net/http" 7 "os" 8 "path/filepath" 9 "time" 10 11 labels "github.com/rehabaam/TDBackend/localization" 12 "github.com/rehabaam/TDBackend/logger" 13 14 "github.com/gorilla/mux" 15 ) 16 17 var ( 18 repo = make(map[string]string) 19 fNames = []string{"Deals", "FAQs", "Kit", "Partners", "Sessions"} 20 ) 21 22 // loadFileToMemory func loads data into memory for better response 23 func loadFileToMemory() { 24 25 // Get current time 26 t := time.Now() 27 28 for _, v := range fNames { 29 data, err := readFile(v) 30 if err != nil { 31 logger.AppLogger(labels.Error, "Error while opening "+v+" file!", time.Since(t).Nanoseconds(), labels.Error+"|"+err.Error()) 32 } 33 repo[v] = data 34 } 35 } 36 37 // readFile func reads data from files 38 func readFile(endPoint string) (string, error) { 39 40 // Get current time 41 t := time.Now() 42 43 // Get file name 44 fileName := filepath.Join("static", fmt.Sprintf("%s.json", endPoint)) 45 46 // Open our jsonFile 47 jsonFile, err := os.Open(filepath.Clean(fileName)) 48 49 // if we os.Open returns an error then handle it 50 if err != nil { 51 logger.AppLogger(labels.Error, "Error while opening "+endPoint+" file!", time.Since(t).Nanoseconds(), labels.Error+"|"+err.Error()) 52 return "", err 53 } 54 55 // defer the closing of our jsonFile so that we can parse it later on 56 defer func() { 57 if err := jsonFile.Close(); err != nil { 58 logger.AppLogger(labels.Error, "Error closing file:", time.Since(t).Nanoseconds(), err.Error()) 59 } 60 }() 61 62 // Read the data from file 63 byteValue, errFile := io.ReadAll(jsonFile) 64 if errFile != nil { 65 // Set HTTP code to 500 66 logger.AppLogger(labels.Error, "Error while reading "+endPoint+" file!", time.Since(t).Nanoseconds(), labels.Error+"|"+errFile.Error()) 67 return "", errFile 68 } 69 70 var data string = string(byteValue) 71 logger.AppLogger(labels.Debug, "Data read from "+endPoint+" file!", time.Since(t).Nanoseconds(), labels.Data+"|"+data) 72 73 return data, nil 74 } 75 76 // getData func sends data back 77 func getData(endPoint string, w http.ResponseWriter, r *http.Request) (int, error) { 78 79 // Get current time 80 t := time.Now() 81 82 logger.AppLogger(labels.Debug, "REQUEST HEADERS", time.Since(t).Nanoseconds(), labels.Data+"|"+fmt.Sprintf("%v", r.Header)) 83 logger.AppLogger(labels.Debug, "REQUEST CONTEXT", time.Since(t).Nanoseconds(), labels.Data+"|"+fmt.Sprintf("%v", r.Context())) 84 logger.AppLogger(labels.Debug, "REQUEST", time.Since(t).Nanoseconds(), labels.Data+"|"+fmt.Sprintf("%v", r)) 85 86 // Set JSON as a Content-Type and User-Agent for output 87 w.Header().Add(labels.HTTPContentTypeKey, labels.HTTPContentTypeValue) 88 w.Header().Add(labels.HTTPUSERAGENTKey, labels.HTTPUSERAGENTValue) 89 90 logger.AppLogger(labels.Debug, "Result of GET "+endPoint+" func", time.Since(t).Nanoseconds(), labels.Code+"|"+fmt.Sprintf("%v", http.StatusOK)) 91 92 // Send data out 93 return w.Write([]byte(repo[endPoint])) 94 } 95 96 // getImage func for Serving images 97 func getImage(w http.ResponseWriter, r *http.Request) (int, error) { 98 99 // Get current time 100 t := time.Now() 101 102 // Get file name 103 params := mux.Vars(r) 104 105 fmt.Println(params) 106 107 fmt.Println("image name: ", params["name"]) 108 // Get file name 109 fileName := filepath.Join("static/img", params["name"]) 110 111 // Open our jsonFile 112 jsonFile, err := os.Open(filepath.Clean(fileName)) 113 114 // if we os.Open returns an error then handle it 115 if err != nil { 116 w.WriteHeader(http.StatusInternalServerError) 117 logger.AppLogger(labels.Error, "Error while opening "+params["name"]+" file!", time.Since(t).Nanoseconds(), labels.Error+"|"+err.Error()) 118 return 0, err 119 } 120 121 defer func() { 122 if err := jsonFile.Close(); err != nil { 123 logger.AppLogger(labels.Error, "Error closing file:", time.Since(t).Nanoseconds(), err.Error()) 124 } 125 }() 126 127 // Read the data from file 128 byteValue, errFile := io.ReadAll(jsonFile) 129 if errFile != nil { 130 // Set HTTP code to 500 131 w.WriteHeader(http.StatusInternalServerError) 132 logger.AppLogger(labels.Error, "Error while reading "+params["name"]+" file!", time.Since(t).Nanoseconds(), labels.Error+"|"+errFile.Error()) 133 return 0, errFile 134 } 135 136 // Set JSON as a Content-Type and User-Agent for output 137 w.Header().Add(labels.HTTPContentTypeKey, labels.HTTPContentTypeIMGValue) 138 w.Header().Add(labels.HTTPUSERAGENTKey, labels.HTTPUSERAGENTValue) 139 140 logger.AppLogger(labels.Debug, "Result of GET func", time.Since(t).Nanoseconds(), labels.Code+"|"+fmt.Sprintf("%v", http.StatusOK)) 141 142 // Send data out 143 return w.Write(byteValue) 144 }