257 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			257 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package controllers
 | 
						|
 | 
						|
import (
 | 
						|
	"encoding/json"
 | 
						|
	"fmt"
 | 
						|
	"net/http"
 | 
						|
	"os"
 | 
						|
	"sqldb-ws/security"
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"forge.redroom.link/yves/sqldb"
 | 
						|
	beego "github.com/beego/beego/v2/server/web"
 | 
						|
	"github.com/rs/zerolog/log"
 | 
						|
)
 | 
						|
 | 
						|
// Operations about table
 | 
						|
type TableController struct {
 | 
						|
	beego.Controller
 | 
						|
}
 | 
						|
 | 
						|
type TableQuery struct {
 | 
						|
	Table       string `json:"table,omitempty"`
 | 
						|
	Columns     string `json:"columns,omitempty"`
 | 
						|
	Restriction string `json:"restriction,omitempty"`
 | 
						|
	Sortkeys    string `json:"sortkeys,omitempty"`
 | 
						|
	Direction   string `json:"direction,omitempty"`
 | 
						|
}
 | 
						|
 | 
						|
// @Title Put data in table
 | 
						|
// @Description put data in table
 | 
						|
// @Param	table		path 	string	true		"Name of the table"
 | 
						|
// @Param	data		body 	json	true		"body for data content (Json format)"
 | 
						|
// @Success 200 {string} success
 | 
						|
// @Failure 403 :table put issue
 | 
						|
// @router /:table [put]
 | 
						|
func (t *TableController) Put() {
 | 
						|
	// var FilterUserPost = func(ctx *context.Context) {
 | 
						|
 | 
						|
	// if strings.HasPrefix(ctx, "/") {
 | 
						|
	// 	return
 | 
						|
	// }
 | 
						|
 | 
						|
	// _, ok := ctx.Input.Session("user_id").(int)
 | 
						|
	// if !ok {
 | 
						|
	// 	ctx.Redirect(302, "/l")
 | 
						|
	// }
 | 
						|
	table := t.GetString(":table")
 | 
						|
	db := sqldb.Open(os.Getenv("driverdb"), os.Getenv("paramsdb"))
 | 
						|
	defer db.Close()
 | 
						|
 | 
						|
	var data sqldb.AssRow
 | 
						|
	json.Unmarshal(t.Ctx.Input.RequestBody, &data)
 | 
						|
	println(fmt.Sprintf("%v", data))
 | 
						|
 | 
						|
	uid, err := db.Table(table).UpdateOrInsert(data)
 | 
						|
	if err != nil {
 | 
						|
		log.Error().Msg(err.Error())
 | 
						|
		t.Ctx.Output.SetStatus(http.StatusBadRequest)
 | 
						|
	} else {
 | 
						|
		t.Ctx.Output.SetStatus(http.StatusOK)
 | 
						|
	}
 | 
						|
	t.Data["json"] = map[string]int64{"uid": uid}
 | 
						|
	t.ServeJSON()
 | 
						|
}
 | 
						|
 | 
						|
// web.InsertFilter("/*", web.BeforeRouter, FilterUserPost)
 | 
						|
// }
 | 
						|
 | 
						|
// @Title Delete
 | 
						|
// @Description delete the data in table
 | 
						|
// @Param	table		path 	string	true		"Name of the table"
 | 
						|
// @Param	body		body 			true		"body for data content (Json format)"
 | 
						|
// @Success 200 {string} delete success!
 | 
						|
// @Failure 403 delete issue
 | 
						|
// @router /:table [delete]
 | 
						|
func (t *TableController) Delete() {
 | 
						|
	table := t.GetString(":table")
 | 
						|
	db := sqldb.Open(os.Getenv("driverdb"), os.Getenv("paramsdb"))
 | 
						|
 | 
						|
	var data sqldb.AssRow
 | 
						|
	json.Unmarshal(t.Ctx.Input.RequestBody, &data)
 | 
						|
	println(fmt.Sprintf("%v", data))
 | 
						|
 | 
						|
	db.Table(table).Delete(data)
 | 
						|
	t.Data["json"] = "delete success!"
 | 
						|
	t.Ctx.Output.SetStatus(http.StatusOK)
 | 
						|
	t.ServeJSON()
 | 
						|
	db.Close()
 | 
						|
}
 | 
						|
 | 
						|
// @Title GetAllTable
 | 
						|
// @Description get all Datas
 | 
						|
// @Param	table			path 	string	true		"Name of the table"
 | 
						|
// @Success 200 {string} success !
 | 
						|
// @Failure 403 no table
 | 
						|
// @router /:table [get]
 | 
						|
func (t *TableController) GetAllTable() {
 | 
						|
	table := t.GetString(":table")
 | 
						|
	db := sqldb.Open(os.Getenv("driverdb"), os.Getenv("paramsdb"))
 | 
						|
	columns := []string{"*"}
 | 
						|
	restriction := ""
 | 
						|
	sortkeys := []string{}
 | 
						|
	dir := ""
 | 
						|
	data, err := db.Table(table).GetAssociativeArray(columns, restriction, sortkeys, dir)
 | 
						|
	if err != nil {
 | 
						|
		log.Error().Msg(err.Error())
 | 
						|
		t.Ctx.Output.SetStatus(http.StatusBadRequest)
 | 
						|
	} else {
 | 
						|
		t.Data["json"] = data
 | 
						|
	}
 | 
						|
	str, err := json.Marshal(data)
 | 
						|
	if err != nil {
 | 
						|
		log.Error().Msg(err.Error())
 | 
						|
		t.Ctx.Output.SetStatus(http.StatusBadRequest)
 | 
						|
	}
 | 
						|
	strToByte := []byte(strings.ReplaceAll(string(str), "\"\\u003cnil\\u003e\"", "null"))
 | 
						|
	t.Ctx.Output.Header("Content-Type", "application/json")
 | 
						|
	t.Ctx.Output.Body(strToByte)
 | 
						|
	t.Ctx.Output.SetStatus(http.StatusOK)
 | 
						|
	db.Close()
 | 
						|
	t.Ctx.Output.Body(strToByte)
 | 
						|
}
 | 
						|
 | 
						|
// @Title GetAllTableColumn
 | 
						|
// @Description get all Datas
 | 
						|
// @Param	table			path 	string	true		"Name of the table"
 | 
						|
// @Param	columns			path 	string	true		"Name of the columns (separate with a comma)"
 | 
						|
// @Success 200 {string} success !
 | 
						|
// @Failure 403 no table
 | 
						|
// @router /:table/:columns [get]
 | 
						|
func (t *TableController) GetAllTableColumn() {
 | 
						|
	table := t.GetString(":table")
 | 
						|
	db := sqldb.Open(os.Getenv("driverdb"), os.Getenv("paramsdb"))
 | 
						|
	columns := strings.Split(t.GetString(":columns"), ",")
 | 
						|
	restriction := ""
 | 
						|
	sortkeys := []string{}
 | 
						|
	dir := ""
 | 
						|
	data, err := db.Table(table).GetAssociativeArray(columns, restriction, sortkeys, dir)
 | 
						|
	if err != nil {
 | 
						|
		log.Error().Msg(err.Error())
 | 
						|
		t.Data["json"] = map[string]string{"error": err.Error()}
 | 
						|
	} else {
 | 
						|
		t.Data["json"] = data
 | 
						|
	}
 | 
						|
	t.ServeJSON()
 | 
						|
	db.Close()
 | 
						|
}
 | 
						|
 | 
						|
// @Title GetAllTableColumnRestriction
 | 
						|
// @Description get all Datas
 | 
						|
// @Param	table			path 	string	true		"Name of the table"
 | 
						|
// @Param	columns			path 	string	true		"Name of the columns (separate with a comma)"
 | 
						|
// @Param	restriction		path 	string	true		"SQL restriction"
 | 
						|
// @Success 200 {string} success !
 | 
						|
// @Failure 403 no table
 | 
						|
// @router /:table/:columns/:restriction [get]
 | 
						|
func (t *TableController) GetAllTableColumnRestriction() {
 | 
						|
	table := t.GetString(":table")
 | 
						|
 | 
						|
	columns := fmt.Sprintf("%v", strings.Split(t.GetString(":columns"), ","))
 | 
						|
	cols := strings.Split(t.GetString(":columns"), ",")
 | 
						|
	restriction := t.GetString(":restriction")
 | 
						|
	sortkeys := []string{}
 | 
						|
	dir := ""
 | 
						|
	dbuser_id := fmt.Sprintf("%v", 1)
 | 
						|
 | 
						|
	db := sqldb.Open(os.Getenv("driverdb"), os.Getenv("paramsdb"))
 | 
						|
	security.CheckSelect(dbuser_id, &table, &columns, &restriction)
 | 
						|
	data, err := db.Table(table).GetAssociativeArray(cols, restriction, sortkeys, dir)
 | 
						|
	if err != nil {
 | 
						|
		log.Error().Msg(err.Error())
 | 
						|
	}
 | 
						|
	data2 := fmt.Sprintf("%v", data)
 | 
						|
	fmt.Println(data2)
 | 
						|
	t.Data["json"] = data
 | 
						|
 | 
						|
	t.ServeJSON()
 | 
						|
 | 
						|
	db.Close()
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
// @Title GetAllTableColumnRestrictionSortkeys
 | 
						|
// @Description get all Datas
 | 
						|
// @Param	table			path 	string	true		"Name of the table"
 | 
						|
// @Param	columns			path 	string	true		"Name of the columns (separate with a comma)"
 | 
						|
// @Param	restriction		path 	string	true		"SQL restriction"
 | 
						|
// @Param	sortkeys		path	string	true		"Order by: columns names (separate with a comma)"
 | 
						|
// @Success 200 {string} success !
 | 
						|
// @Failure 403 no table
 | 
						|
// @router /:table/:columns/:restriction/:sortkeys [get]
 | 
						|
func (t *TableController) GetAllTableColumnRestrictionSortkeys() {
 | 
						|
	table := t.GetString(":table")
 | 
						|
	db := sqldb.Open(os.Getenv("driverdb"), os.Getenv("paramsdb"))
 | 
						|
	columns := strings.Split(t.GetString(":columns"), ",")
 | 
						|
	restriction := t.GetString(":restriction")
 | 
						|
	sortkeys := strings.Split(t.GetString(":sortkeys"), ",")
 | 
						|
	dir := ""
 | 
						|
	data, err := db.Table(table).GetAssociativeArray(columns, restriction, sortkeys, dir)
 | 
						|
	if err != nil {
 | 
						|
		log.Error().Msg(err.Error())
 | 
						|
	}
 | 
						|
	t.Data["json"] = data
 | 
						|
	t.ServeJSON()
 | 
						|
	db.Close()
 | 
						|
}
 | 
						|
 | 
						|
// @Title GetAllTableColumnRestrictionSortkeysDir
 | 
						|
// @Description get all Datas
 | 
						|
// @Param	table			path 	string	true		"Name of the table"
 | 
						|
// @Param	columns			path 	string	true		"Name of the columns (separate with a comma)"
 | 
						|
// @Param	restriction		path 	string	true		"SQL restriction"
 | 
						|
// @Param	sortkeys		path	string	true		"Order by: columns names (separate with a comma)"
 | 
						|
// @Param	dir				path	string	true		"asc or desc"
 | 
						|
// @Success 200 {string} success !
 | 
						|
// @Failure 403 no table
 | 
						|
// @router /:table/:columns/:restriction/:sortkeys/:dir [get]
 | 
						|
func (t *TableController) GetAllTableColumnRestrictionSortkeysDir() {
 | 
						|
	table := t.GetString(":table")
 | 
						|
	db := sqldb.Open(os.Getenv("driverdb"), os.Getenv("paramsdb"))
 | 
						|
	columns := strings.Split(t.GetString(":columns"), ",")
 | 
						|
	restriction := t.GetString(":restriction")
 | 
						|
	sortkeys := strings.Split(t.GetString(":sortkeys"), ",")
 | 
						|
	dir := t.GetString(":dir")
 | 
						|
	data, err := db.Table(table).GetAssociativeArray(columns, restriction, sortkeys, dir)
 | 
						|
	if err != nil {
 | 
						|
		log.Error().Msg(err.Error())
 | 
						|
	}
 | 
						|
	t.Data["json"] = data
 | 
						|
	t.ServeJSON()
 | 
						|
	db.Close()
 | 
						|
}
 | 
						|
 | 
						|
// @Title TablePost
 | 
						|
// @Description get all Datas
 | 
						|
// @Param	table			path 	string	true		"Name of the table"
 | 
						|
// @Param	body		body 	TableQuery	true		"TableQuery"
 | 
						|
// @Success 200 {string} success !
 | 
						|
// @Failure 403 no table
 | 
						|
// @router /:table [post]
 | 
						|
func (t *TableController) TablePost() {
 | 
						|
	table := t.GetString(":table")
 | 
						|
	var request TableQuery
 | 
						|
	json.Unmarshal(t.Ctx.Input.RequestBody, &request)
 | 
						|
 | 
						|
	db := sqldb.Open(os.Getenv("driverdb"), os.Getenv("paramsdb"))
 | 
						|
	data, err := db.Table(table).GetAssociativeArray(strings.Split(request.Columns, ","), request.Restriction, strings.Split(request.Sortkeys, ","), request.Direction)
 | 
						|
	if err != nil {
 | 
						|
		log.Error().Msg(err.Error())
 | 
						|
		t.Ctx.Output.SetStatus(http.StatusBadRequest)
 | 
						|
	}
 | 
						|
	t.Data["json"] = data
 | 
						|
	t.Ctx.Output.SetStatus(http.StatusOK)
 | 
						|
	t.ServeJSON()
 | 
						|
	db.Close()
 | 
						|
}
 |