You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
240 lines
7.3 KiB
240 lines
7.3 KiB
package main
|
|
|
|
import (
|
|
"github.com/jinzhu/gorm"
|
|
"github.com/gorilla/mux"
|
|
"time"
|
|
"net/http"
|
|
"strings"
|
|
"encoding/json"
|
|
"io/ioutil"
|
|
"strconv"
|
|
)
|
|
|
|
type TextTemplate struct {
|
|
gorm.Model
|
|
Name string
|
|
TemplateStr string
|
|
}
|
|
|
|
type TextTemplateJson struct {
|
|
Id int `json:"id"`
|
|
Name string `json:"name"`
|
|
TemplateStr string `json:"templateStr"`
|
|
CreateDate time.Time `json:"createDate"`
|
|
}
|
|
|
|
func (tapit *Tapit) handleTextTemplate(w http.ResponseWriter, r *http.Request) {
|
|
if strings.ToUpper(r.Method) == "GET" {
|
|
tapit.getTextTemplates(w, r)
|
|
} else if strings.ToUpper(r.Method) == "POST" {
|
|
tapit.createTextTemplate(w, r)
|
|
} else {
|
|
http.Error(w, "HTTP method not implemented", 400)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (tapit *Tapit) getTextTemplates(w http.ResponseWriter, r *http.Request) {
|
|
textTemplates := []TextTemplate{}
|
|
tapit.db.Find(&textTemplates)
|
|
jsonResults, err := json.Marshal(textTemplatesToJson(textTemplates))
|
|
if err != nil {
|
|
http.Error(w, err.Error(), 500)
|
|
return
|
|
} else {
|
|
w.Header().Set("Content-Type", "application/json")
|
|
w.Write(jsonResults)
|
|
return
|
|
}
|
|
}
|
|
|
|
func textTemplatesToJson(textTemplates []TextTemplate) []TextTemplateJson {
|
|
textTemplateJson := make([]TextTemplateJson, 0)
|
|
for _, textTemplate := range textTemplates {
|
|
var currentTextTemplateJson TextTemplateJson
|
|
currentTextTemplateJson.Id = int(textTemplate.ID)
|
|
currentTextTemplateJson.Name = textTemplate.Name
|
|
currentTextTemplateJson.TemplateStr = textTemplate.TemplateStr
|
|
currentTextTemplateJson.CreateDate = textTemplate.CreatedAt
|
|
|
|
textTemplateJson = append(textTemplateJson, currentTextTemplateJson)
|
|
}
|
|
return textTemplateJson
|
|
}
|
|
|
|
func jsonToTextTemplate(textTemplateJson TextTemplateJson) TextTemplate {
|
|
var resultTextTemplate TextTemplate
|
|
resultTextTemplate.Name = textTemplateJson.Name
|
|
resultTextTemplate.TemplateStr = textTemplateJson.TemplateStr
|
|
return resultTextTemplate
|
|
}
|
|
|
|
func (tapit *Tapit) createTextTemplate(w http.ResponseWriter, r *http.Request) {
|
|
// start doing work
|
|
requestBody, err:= ioutil.ReadAll(r.Body)
|
|
if err != nil {
|
|
http.Error(w, "Bad request", 400)
|
|
return
|
|
}
|
|
newTextTemplateJson := TextTemplateJson{}
|
|
err = json.Unmarshal(requestBody, &newTextTemplateJson)
|
|
if err != nil {
|
|
http.Error(w, "Bad request", 400)
|
|
return
|
|
}
|
|
if newTextTemplateJson.Name != "" && newTextTemplateJson.TemplateStr != "" {
|
|
newTextTemplate := jsonToTextTemplate(newTextTemplateJson)
|
|
tapit.db.NewRecord(&newTextTemplate)
|
|
tapit.db.Create(&newTextTemplate)
|
|
if newTextTemplate.ID == 0 {
|
|
notifyPopup(w, r, "failure", "Failed to create text template", nil)
|
|
return
|
|
}
|
|
newTextTemplateJson.Id = int(newTextTemplate.ID)
|
|
newTextTemplateJson.CreateDate = newTextTemplate.CreatedAt
|
|
|
|
notifyPopup(w, r, "success", "Successfully added new text template", newTextTemplate)
|
|
return
|
|
} else {
|
|
notifyPopup(w, r, "failure", "Please fill in all details", nil)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (tapit *Tapit) getSpecificTextBody(id uint) string {
|
|
var textTemplate TextTemplate
|
|
|
|
var dbSearchTT TextTemplate
|
|
dbSearchTT.ID = id
|
|
tapit.db.Where(&dbSearchTT).First(&textTemplate)
|
|
|
|
return textTemplate.TemplateStr
|
|
}
|
|
|
|
func (tapit *Tapit) handleSpecificTextTemplate(w http.ResponseWriter, r *http.Request) {
|
|
if strings.ToUpper(r.Method) == "PUT" {
|
|
tapit.updateTextTemplate(w, r)
|
|
} else if strings.ToUpper(r.Method) == "DELETE" {
|
|
tapit.deleteTextTemplate(w,r)
|
|
} else if strings.ToUpper(r.Method) == "GET" {
|
|
tapit.getTextTemplate(w,r)
|
|
} else {
|
|
http.Error(w, "HTTP method not implemented", 400)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (tapit *Tapit) updateTextTemplate(w http.ResponseWriter, r *http.Request) {
|
|
requestBody, err:= ioutil.ReadAll(r.Body)
|
|
if err != nil {
|
|
http.Error(w, "Bad request", 400)
|
|
return
|
|
}
|
|
var newTextTemplateJson TextTemplateJson
|
|
err = json.Unmarshal(requestBody, &newTextTemplateJson)
|
|
if err != nil {
|
|
http.Error(w, "Bad request", 400)
|
|
return
|
|
}
|
|
if newTextTemplateJson.Name != "" {
|
|
var newTextTemplate TextTemplate
|
|
|
|
// get current phonebook
|
|
var dbSearchTT TextTemplate
|
|
dbSearchTT.ID = uint(newTextTemplateJson.Id)
|
|
tapit.db.Where(&dbSearchTT).First(&newTextTemplate)
|
|
|
|
if newTextTemplate.ID == uint(newTextTemplateJson.Id) {
|
|
// update name & template
|
|
newTextTemplate.Name = newTextTemplateJson.Name
|
|
newTextTemplate.TemplateStr = newTextTemplateJson.TemplateStr
|
|
|
|
// update database
|
|
tapit.db.Save(&newTextTemplate)
|
|
if newTextTemplate.ID == 0 {
|
|
notifyPopup(w, r, "failure", "Failed to update phonebook", nil)
|
|
return
|
|
}
|
|
newTextTemplateJson.Id = int(newTextTemplate.ID)
|
|
newTextTemplateJson.CreateDate = newTextTemplate.CreatedAt
|
|
|
|
notifyPopup(w, r, "success", "Successfully updated text template", newTextTemplateJson)
|
|
return
|
|
} else {
|
|
notifyPopup(w, r, "failure", "Failed to update text template", nil)
|
|
return
|
|
}
|
|
} else {
|
|
notifyPopup(w, r, "failure", "Please enter the phonebook name", nil)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (tapit *Tapit) deleteTextTemplate(w http.ResponseWriter, r *http.Request) {
|
|
vars := mux.Vars(r)
|
|
tempID, err := strconv.Atoi(vars["id"])
|
|
if err != nil {
|
|
http.Error(w, "Bad request", 400)
|
|
return
|
|
}
|
|
|
|
// start working
|
|
var textTemplate TextTemplate
|
|
|
|
// get tt
|
|
var dbSearchTT TextTemplate
|
|
dbSearchTT.ID = uint(tempID)
|
|
tapit.db.Where(dbSearchTT).First(&textTemplate)
|
|
|
|
if textTemplate.ID == uint(tempID) {
|
|
// finally delete it
|
|
tapit.db.Delete(&textTemplate)
|
|
notifyPopup(w, r, "success", "Successfully deleted phonebook", nil)
|
|
return
|
|
} else {
|
|
http.Error(w, "Bad request", 400)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (tapit *Tapit) getTextTemplate(w http.ResponseWriter, r *http.Request) {
|
|
vars := mux.Vars(r)
|
|
tempID, err := strconv.Atoi(vars["id"])
|
|
if err != nil {
|
|
http.Error(w, "Bad request", 400)
|
|
return
|
|
}
|
|
|
|
// start working
|
|
var textTemplate TextTemplate
|
|
|
|
// get tt
|
|
var dbSearchTT TextTemplate
|
|
dbSearchTT.ID = uint(tempID)
|
|
tapit.db.Where(dbSearchTT).First(&textTemplate)
|
|
|
|
if textTemplate.ID == uint(tempID) {
|
|
jsonResults, err := json.Marshal(textTemplateToJson(textTemplate))
|
|
if err != nil {
|
|
http.Error(w, err.Error(), 500)
|
|
return
|
|
} else {
|
|
w.Header().Set("Content-Type", "application/json")
|
|
w.Write(jsonResults)
|
|
return
|
|
}
|
|
} else {
|
|
http.Error(w, "Bad request", 400)
|
|
return
|
|
}
|
|
}
|
|
|
|
func textTemplateToJson(textTemplate TextTemplate) TextTemplateJson {
|
|
var result TextTemplateJson
|
|
result.Id = int(textTemplate.ID)
|
|
result.Name = textTemplate.Name
|
|
result.TemplateStr = textTemplate.TemplateStr
|
|
result.CreateDate = textTemplate.CreatedAt
|
|
return result
|
|
}
|