Blame view
json_utility.go
3.44 KB
64041a2ea first commit |
1 2 3 4 5 |
package restutility import ( "net/http" "strings" |
8dbe745c3 merged tables uti... |
6 7 8 9 10 11 |
"encoding/json" "errors" "gopkg.in/rana/ora.v3" "io" "io/ioutil" "fmt" |
64041a2ea first commit |
12 |
) |
8dbe745c3 merged tables uti... |
13 |
var allPayloads []Payload |
64041a2ea first commit |
14 15 16 17 18 19 20 21 |
type LangMap map[string]map[string]string type Field struct { Parameter string `json:"param"` Type string `json:"type"` Visible bool `json:"visible"` Editable bool `json:"editable"` } |
8dbe745c3 merged tables uti... |
22 23 24 25 26 27 28 29 30 |
type CorrelationField struct { Result string `json:"result"` Elements []string `json:"elements"` Type string `json:"type"` } type Translation struct { Language string `json:"language"` FieldsLabels map[string]string `json:"fieldsLabels"` |
64041a2ea first commit |
31 |
} |
8dbe745c3 merged tables uti... |
32 33 |
type Payload struct { Type string `json:"tableType"` |
64041a2ea first commit |
34 35 |
Method string `json:"method"` Params map[string]string `json:"params"` |
8dbe745c3 merged tables uti... |
36 |
Lang []Translation `json:"lang"` |
64041a2ea first commit |
37 |
Fields []Field `json:"fields"` |
c430f3af5 fixed camel case ... |
38 |
Correlations []CorrelationField `json:"correlationFields"` |
64041a2ea first commit |
39 40 41 42 |
IdField string `json:"idField"` // Data can only hold slices of any type. It can't be used for itteration Data interface{} `json:"data"` } |
8dbe745c3 merged tables uti... |
43 44 |
func NewPayload(r *http.Request, table string) Payload { var pload Payload |
64041a2ea first commit |
45 |
|
8dbe745c3 merged tables uti... |
46 47 48 49 50 51 |
pload.Method = strings.ToLower(r.Method + " " + r.URL.Path) pload.Params = make(map[string]string, 0) pload.Lang = loadTranslations(allPayloads, table) pload.Fields = loadFields(allPayloads, table) pload.IdField = loadIdField(allPayloads, table) pload.Correlations = loadCorrelations(allPayloads, table) |
64041a2ea first commit |
52 |
|
8dbe745c3 merged tables uti... |
53 54 |
return pload } |
64041a2ea first commit |
55 |
|
8dbe745c3 merged tables uti... |
56 57 58 |
func DeliverPayload(w http.ResponseWriter, payload Payload) { json.NewEncoder(w).Encode(payload) payload.Data = nil |
64041a2ea first commit |
59 |
} |
8dbe745c3 merged tables uti... |
60 61 62 63 64 65 66 67 68 69 70 71 72 |
func loadTranslations(payloads []Payload, id string) []Translation { translations := make([]Translation, 0) for _, pload := range payloads { if pload.Type == id { for _, t := range pload.Lang { //translations[t.Language] = t.FieldsLabels translations = append(translations, Translation{ Language: t.Language, FieldsLabels: t.FieldsLabels, }) } } |
64041a2ea first commit |
73 |
} |
8dbe745c3 merged tables uti... |
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
return translations } func loadFields(payloads []Payload, id string) []Field { fields := make([]Field, 0) for _, pload := range payloads { if pload.Type == id{ for _, f := range pload.Fields { fields = append(fields, f) } } } return fields } func loadIdField(payloads []Payload, id string) string { for _, pload := range payloads { if pload.Type == id { return pload.IdField } } return "" } func loadCorrelations(payloads []Payload, id string) []CorrelationField { resp := make([]CorrelationField, 0) for _, pload := range payloads { if pload.Type == id { for _, f := range pload.Correlations { resp = append(resp, f) } } } return resp } func InitTables(db *ora.Ses, project string) error { jsonbuf, _ := fetchTablesConfig(db, EqualQuotes(project)) json.Unmarshal(jsonbuf, &allPayloads) if len(allPayloads) == 0 { return errors.New("tables config is corrupt") } fmt.Printf("broj ucitanih tabela: %d ", len(allPayloads)) return nil } func fetchTablesConfig(db *ora.Ses, project string) ([]byte, error) { stmt, err := db.Prep(`SELECT JSON_CLOB FROM TABLES_CONFIG WHERE PROJEKAT` + project, ora.S) defer stmt.Close() if err != nil { return nil, err } rset, err := stmt.Qry() if err != nil { return nil, err } bytes := make([]byte, 0) if rset.Next() { lob := rset.Row[0].(io.Reader) bytes, err = ioutil.ReadAll(lob) if err != nil { fmt.Printf("mega error: %v ", err) } |
64041a2ea first commit |
150 |
} |
8dbe745c3 merged tables uti... |
151 |
return bytes, nil |
64041a2ea first commit |
152 |
} |