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  }