package route import ( "email-notification/helper" "email-notification/middleware" "email-notification/model" "email-notification/query" "fmt" "log" "net/http" "time" "gorm.io/gorm" ) func Route(db *gorm.DB) { http.HandleFunc("/birthday-notification", middleware.ResponseTimeMiddleware(func(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodGet { http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) } sessionID := helper.GenerateSessionID() module := "BIRTHDAY NOTIFICATION" log.Printf("%+v %+v request %+v", sessionID, module, nil) data := new([]model.Birthday) month := int(time.Now().Month()) day := time.Now().Day() subject := "Happy Birthday 🎉🎂🥳" err := query.GetBirthday(db, data, fmt.Sprint(month), fmt.Sprint(day)) if err != nil { log.Printf("%+v %+v response %+v", sessionID, module, err.Error()) w.WriteHeader(500) w.Write([]byte(err.Error())) } for _, v := range *data { fmt.Println("Birthday", v.Fullname) sendTo := []string{v.Email} type Data struct { Name string } data := Data{Name: v.Fullname} htmlString := helper.ParseHTML("template/birthday.html", data) go func(v model.Birthday) { log.Printf("%+v %+v SENDING EMAIL TO %+v", sessionID, module, v.Email) err := helper.SendEmail(sendTo, sendTo, "", subject, "", htmlString) if err != nil { log.Printf("%+v %+v response %+v", sessionID, module, err.Error()) } else { log.Printf("%+v %+v EMAIL SENT TO %+v", sessionID, module, v.Email) } }(v) } log.Printf("%+v %+v response %+v", sessionID, module, "success") w.Write([]byte("success")) })) http.HandleFunc("/workanniversary-notification", middleware.ResponseTimeMiddleware(func(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodGet { http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) } sessionID := helper.GenerateSessionID() module := "WORKANNIVERSARY NOTIFICATION" log.Printf("%+v %+v request %+v", sessionID, module, nil) data := new([]model.Workanniversary) month := int(time.Now().Month()) day := time.Now().Day() err := query.GetWorkanniversary(db, data, fmt.Sprint(month), fmt.Sprint(day)) if err != nil { log.Printf("%+v %+v response %+v", sessionID, module, err.Error()) w.WriteHeader(500) w.Write([]byte(err.Error())) } subject := "Work Anniversary 🎉" for _, v := range *data { fmt.Println("Workanniversary", v.Fullname) sendTo := []string{v.Email} type Data struct { Name string Year string } duration := helper.FormatSince(v.HireDate) // duration := time.Since(v.HireDate).String() data := Data{Name: v.Fullname, Year: duration} htmlString := helper.ParseHTML("template/workanniversary.html", data) go func(v model.Workanniversary) { log.Printf("%+v %+v SENDING EMAIL TO %+v", sessionID, module, v.Email) err := helper.SendEmail(sendTo, sendTo, "", subject, "", htmlString) if err != nil { log.Printf("%+v %+v response %+v", sessionID, module, err.Error()) } else { log.Printf("%+v %+v EMAIL SENT TO %+v", sessionID, module, v.Email) } }(v) } log.Printf("%+v %+v response %+v", sessionID, module, "success") w.Write([]byte("success")) })) http.HandleFunc("*", middleware.ResponseTimeMiddleware(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(404) w.Write([]byte("what are you looking for!?")) })) http.Handle("/", middleware.ResponseTimeMiddleware(func(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodGet { http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) } w.Write([]byte("Welcome!")) })) }