Browse Source

API split code by files

Vova Tkach 5 years ago
parent
commit
a8b3065a19
3 changed files with 287 additions and 273 deletions
  1. 0 273
      modules/module_api.go
  2. 47 0
      modules/module_api_images.go
  3. 240 0
      modules/module_api_xml.go

+ 0 - 273
modules/module_api.go

@@ -1,288 +1,15 @@
 package modules
 package modules
 
 
 import (
 import (
-	"bufio"
-	"bytes"
-	"html"
 	"net/http"
 	"net/http"
 	"os"
 	"os"
-	"path/filepath"
-	"strings"
-	"time"
 
 
 	"golang-fave/assets"
 	"golang-fave/assets"
 	"golang-fave/engine/fetdata"
 	"golang-fave/engine/fetdata"
 	"golang-fave/engine/wrapper"
 	"golang-fave/engine/wrapper"
 	"golang-fave/utils"
 	"golang-fave/utils"
-
-	"github.com/disintegration/imaging"
 )
 )
 
 
-func (this *Modules) api_GenerateImage(wrap *wrapper.Wrapper, width, height int, resize bool, filename string) ([]byte, bool, string, error) {
-	file_ext := ""
-	if strings.ToLower(filepath.Ext(filename)) == ".png" {
-		file_ext = "image/png"
-	} else if strings.ToLower(filepath.Ext(filename)) == ".jpg" {
-		file_ext = "image/jpeg"
-	} else if strings.ToLower(filepath.Ext(filename)) == ".jpeg" {
-		file_ext = "image/jpeg"
-	}
-
-	src, err := imaging.Open(filename)
-	if err != nil {
-		return []byte(""), false, file_ext, err
-	}
-
-	if !resize {
-		src = imaging.Fill(src, width, height, imaging.Center, imaging.Lanczos)
-	} else {
-		src = imaging.Fit(src, width, height, imaging.Lanczos)
-	}
-
-	var out_bytes bytes.Buffer
-	out := bufio.NewWriter(&out_bytes)
-
-	if file_ext == "image/png" {
-		imaging.Encode(out, src, imaging.PNG)
-	} else if file_ext == "image/jpeg" {
-		imaging.Encode(out, src, imaging.JPEG)
-	} else {
-		return []byte(""), false, file_ext, nil
-	}
-
-	return out_bytes.Bytes(), true, file_ext, nil
-}
-
-func (this *Modules) api_GenerateXmlCurrencies(wrap *wrapper.Wrapper) string {
-	result := ``
-	rows, err := wrap.DB.Query(
-		`SELECT
-			code,
-			coefficient
-		FROM
-			shop_currencies
-		ORDER BY
-			id ASC
-		;`,
-	)
-	if err == nil {
-		defer rows.Close()
-		values := make([]string, 2)
-		scan := make([]interface{}, len(values))
-		for i := range values {
-			scan[i] = &values[i]
-		}
-		for rows.Next() {
-			err = rows.Scan(scan...)
-			if err == nil {
-				result += `<currency id="` + html.EscapeString(string(values[0])) + `" rate="` + html.EscapeString(string(values[1])) + `"/>`
-			}
-		}
-	}
-	return result
-}
-
-func (this *Modules) api_GenerateXmlCategories(wrap *wrapper.Wrapper) string {
-	result := ``
-	rows, err := wrap.DB.Query(
-		`SELECT
-			data.id,
-			data.user,
-			data.name,
-			data.alias,
-			data.lft,
-			data.rgt,
-			MAX(data.parent_id) AS parent_id
-		FROM
-			(
-				SELECT
-					node.id,
-					node.user,
-					node.name,
-					node.alias,
-					node.lft,
-					node.rgt,
-					parent.id AS parent_id
-				FROM
-					shop_cats AS node,
-					shop_cats AS parent
-				WHERE
-					node.lft BETWEEN parent.lft AND parent.rgt AND
-					node.id > 1
-				ORDER BY
-					node.lft ASC
-			) AS data
-		WHERE
-			data.id <> data.parent_id
-		GROUP BY
-			data.id
-		ORDER BY
-			data.lft ASC
-		;`,
-	)
-	if err == nil {
-		defer rows.Close()
-		values := make([]string, 7)
-		scan := make([]interface{}, len(values))
-		for i := range values {
-			scan[i] = &values[i]
-		}
-		for rows.Next() {
-			err = rows.Scan(scan...)
-			if err == nil {
-				if utils.StrToInt(string(values[6])) > 1 {
-					result += `<category id="` + html.EscapeString(string(values[0])) + `" parentId="` + html.EscapeString(string(values[6])) + `">` + html.EscapeString(string(values[2])) + `</category>`
-				} else {
-					result += `<category id="` + html.EscapeString(string(values[0])) + `">` + html.EscapeString(string(values[2])) + `</category>`
-				}
-			}
-		}
-	}
-	return result
-}
-
-func (this *Modules) api_GenerateXmlOfferPictures(wrap *wrapper.Wrapper, product_id int) string {
-	result := ``
-	rows, err := wrap.DB.Query(
-		`SELECT
-			shop_product_images.product_id,
-			shop_product_images.filename
-		FROM
-			shop_product_images
-		WHERE
-			shop_product_images.product_id = ?
-		;`,
-		product_id,
-	)
-	if err == nil {
-		defer rows.Close()
-		values := make([]string, 2)
-		scan := make([]interface{}, len(values))
-		for i := range values {
-			scan[i] = &values[i]
-		}
-		for rows.Next() {
-			err = rows.Scan(scan...)
-			if err == nil {
-				result += `<picture>` + html.EscapeString((*wrap.Config).API.XML.Url) + `products/images/` + html.EscapeString(string(values[0])) + `/` + html.EscapeString(string(values[1])) + `</picture>`
-			}
-		}
-	}
-	return result
-}
-
-func (this *Modules) api_GenerateXmlOfferAttributes(wrap *wrapper.Wrapper, product_id int) string {
-	result := ``
-	filter_ids := []int{}
-	filter_names := map[int]string{}
-	filter_values := map[int][]string{}
-	rows, err := wrap.DB.Query(
-		`SELECT
-			shop_filters.id,
-			shop_filters.filter,
-			shop_filters_values.name
-		FROM
-			shop_filter_product_values
-			LEFT JOIN shop_filters_values ON shop_filters_values.id = shop_filter_product_values.filter_value_id
-			LEFT JOIN shop_filters ON shop_filters.id = shop_filters_values.filter_id
-		WHERE
-			shop_filter_product_values.product_id = ?
-		ORDER BY
-			shop_filters.filter ASC,
-			shop_filters_values.name ASC
-		;`,
-		product_id,
-	)
-	if err == nil {
-		defer rows.Close()
-		values := make([]string, 3)
-		scan := make([]interface{}, len(values))
-		for i := range values {
-			scan[i] = &values[i]
-		}
-		for rows.Next() {
-			err = rows.Scan(scan...)
-			if err == nil {
-				if !utils.InArrayInt(filter_ids, utils.StrToInt(string(values[0]))) {
-					filter_ids = append(filter_ids, utils.StrToInt(string(values[0])))
-				}
-				filter_names[utils.StrToInt(string(values[0]))] = html.EscapeString(string(values[1]))
-				filter_values[utils.StrToInt(string(values[0]))] = append(filter_values[utils.StrToInt(string(values[0]))], string(values[2]))
-			}
-		}
-	}
-	for _, filter_id := range filter_ids {
-		result += `<param name="` + html.EscapeString(filter_names[filter_id]) + `">` + html.EscapeString(strings.Join(filter_values[filter_id], ", ")) + `</param>`
-	}
-	return result
-}
-
-func (this *Modules) api_GenerateXmlOffers(wrap *wrapper.Wrapper) string {
-	result := ``
-	rows, err := wrap.DB.Query(
-		`SELECT
-			shop_products.id,
-			shop_currencies.code,
-			shop_products.price,
-			shop_products.name,
-			shop_products.alias,
-			shop_products.vendor,
-			shop_products.quantity,
-			shop_products.category,
-			shop_products.content
-		FROM
-			shop_products
-			LEFT JOIN shop_currencies ON shop_currencies.id = shop_products.currency
-		WHERE
-			shop_products.active = 1 AND
-			shop_products.category > 1
-		ORDER BY
-			shop_products.id
-		;`,
-	)
-	if err == nil {
-		defer rows.Close()
-		values := make([]string, 9)
-		scan := make([]interface{}, len(values))
-		for i := range values {
-			scan[i] = &values[i]
-		}
-		for rows.Next() {
-			err = rows.Scan(scan...)
-			if err == nil {
-				result += `<offer id="` + html.EscapeString(string(values[0])) + `" available="true">`
-				result += `<url>` + html.EscapeString((*wrap.Config).API.XML.Url) + `shop/` + html.EscapeString(string(values[4])) + `/</url>`
-				result += `<price>` + utils.Float64ToStrF(utils.StrToFloat64(string(values[2])), "%.2f") + `</price>`
-				result += `<currencyId>` + html.EscapeString(string(values[1])) + `</currencyId>`
-				result += `<categoryId>` + html.EscapeString(string(values[7])) + `</categoryId>`
-				result += this.api_GenerateXmlOfferPictures(wrap, utils.StrToInt(string(values[0])))
-				result += `<vendor>` + html.EscapeString(string(values[5])) + `</vendor>`
-				result += `<stock_quantity>` + html.EscapeString(string(values[6])) + `</stock_quantity>`
-				result += `<name>` + html.EscapeString(string(values[3])) + `</name>`
-				result += `<description><![CDATA[` + string(values[8]) + `]]></description>`
-				result += this.api_GenerateXmlOfferAttributes(wrap, utils.StrToInt(string(values[0])))
-				result += `</offer>`
-			}
-		}
-	}
-	return result
-}
-
-func (this *Modules) api_GenerateXml(wrap *wrapper.Wrapper) string {
-	return `<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
-<yml_catalog date="` + time.Unix(int64(time.Now().Unix()), 0).Format("2006-01-02 15:04") + `">
-	<shop>
-		<name>` + html.EscapeString((*wrap.Config).API.XML.Name) + `</name>
-		<company>` + html.EscapeString((*wrap.Config).API.XML.Company) + `</company>
-		<url>` + html.EscapeString((*wrap.Config).API.XML.Url) + `</url>
-		<currencies>` + this.api_GenerateXmlCurrencies(wrap) + `</currencies>
-		<categories>` + this.api_GenerateXmlCategories(wrap) + `</categories>
-		<offers>` + this.api_GenerateXmlOffers(wrap) + `</offers>
-	</shop>
-</yml_catalog>`
-}
-
 func (this *Modules) RegisterModule_Api() *Module {
 func (this *Modules) RegisterModule_Api() *Module {
 	return this.newModule(MInfo{
 	return this.newModule(MInfo{
 		WantDB: true,
 		WantDB: true,

+ 47 - 0
modules/module_api_images.go

@@ -0,0 +1,47 @@
+package modules
+
+import (
+	"bufio"
+	"bytes"
+	"path/filepath"
+	"strings"
+
+	"golang-fave/engine/wrapper"
+
+	"github.com/disintegration/imaging"
+)
+
+func (this *Modules) api_GenerateImage(wrap *wrapper.Wrapper, width, height int, resize bool, filename string) ([]byte, bool, string, error) {
+	file_ext := ""
+	if strings.ToLower(filepath.Ext(filename)) == ".png" {
+		file_ext = "image/png"
+	} else if strings.ToLower(filepath.Ext(filename)) == ".jpg" {
+		file_ext = "image/jpeg"
+	} else if strings.ToLower(filepath.Ext(filename)) == ".jpeg" {
+		file_ext = "image/jpeg"
+	}
+
+	src, err := imaging.Open(filename)
+	if err != nil {
+		return []byte(""), false, file_ext, err
+	}
+
+	if !resize {
+		src = imaging.Fill(src, width, height, imaging.Center, imaging.Lanczos)
+	} else {
+		src = imaging.Fit(src, width, height, imaging.Lanczos)
+	}
+
+	var out_bytes bytes.Buffer
+	out := bufio.NewWriter(&out_bytes)
+
+	if file_ext == "image/png" {
+		imaging.Encode(out, src, imaging.PNG)
+	} else if file_ext == "image/jpeg" {
+		imaging.Encode(out, src, imaging.JPEG)
+	} else {
+		return []byte(""), false, file_ext, nil
+	}
+
+	return out_bytes.Bytes(), true, file_ext, nil
+}

+ 240 - 0
modules/module_api_xml.go

@@ -0,0 +1,240 @@
+package modules
+
+import (
+	"html"
+	"strings"
+	"time"
+
+	"golang-fave/engine/wrapper"
+	"golang-fave/utils"
+)
+
+func (this *Modules) api_GenerateXmlCurrencies(wrap *wrapper.Wrapper) string {
+	result := ``
+	rows, err := wrap.DB.Query(
+		`SELECT
+			code,
+			coefficient
+		FROM
+			shop_currencies
+		ORDER BY
+			id ASC
+		;`,
+	)
+	if err == nil {
+		defer rows.Close()
+		values := make([]string, 2)
+		scan := make([]interface{}, len(values))
+		for i := range values {
+			scan[i] = &values[i]
+		}
+		for rows.Next() {
+			err = rows.Scan(scan...)
+			if err == nil {
+				result += `<currency id="` + html.EscapeString(string(values[0])) + `" rate="` + html.EscapeString(string(values[1])) + `"/>`
+			}
+		}
+	}
+	return result
+}
+
+func (this *Modules) api_GenerateXmlCategories(wrap *wrapper.Wrapper) string {
+	result := ``
+	rows, err := wrap.DB.Query(
+		`SELECT
+			data.id,
+			data.user,
+			data.name,
+			data.alias,
+			data.lft,
+			data.rgt,
+			MAX(data.parent_id) AS parent_id
+		FROM
+			(
+				SELECT
+					node.id,
+					node.user,
+					node.name,
+					node.alias,
+					node.lft,
+					node.rgt,
+					parent.id AS parent_id
+				FROM
+					shop_cats AS node,
+					shop_cats AS parent
+				WHERE
+					node.lft BETWEEN parent.lft AND parent.rgt AND
+					node.id > 1
+				ORDER BY
+					node.lft ASC
+			) AS data
+		WHERE
+			data.id <> data.parent_id
+		GROUP BY
+			data.id
+		ORDER BY
+			data.lft ASC
+		;`,
+	)
+	if err == nil {
+		defer rows.Close()
+		values := make([]string, 7)
+		scan := make([]interface{}, len(values))
+		for i := range values {
+			scan[i] = &values[i]
+		}
+		for rows.Next() {
+			err = rows.Scan(scan...)
+			if err == nil {
+				if utils.StrToInt(string(values[6])) > 1 {
+					result += `<category id="` + html.EscapeString(string(values[0])) + `" parentId="` + html.EscapeString(string(values[6])) + `">` + html.EscapeString(string(values[2])) + `</category>`
+				} else {
+					result += `<category id="` + html.EscapeString(string(values[0])) + `">` + html.EscapeString(string(values[2])) + `</category>`
+				}
+			}
+		}
+	}
+	return result
+}
+
+func (this *Modules) api_GenerateXmlOfferPictures(wrap *wrapper.Wrapper, product_id int) string {
+	result := ``
+	rows, err := wrap.DB.Query(
+		`SELECT
+			shop_product_images.product_id,
+			shop_product_images.filename
+		FROM
+			shop_product_images
+		WHERE
+			shop_product_images.product_id = ?
+		;`,
+		product_id,
+	)
+	if err == nil {
+		defer rows.Close()
+		values := make([]string, 2)
+		scan := make([]interface{}, len(values))
+		for i := range values {
+			scan[i] = &values[i]
+		}
+		for rows.Next() {
+			err = rows.Scan(scan...)
+			if err == nil {
+				result += `<picture>` + html.EscapeString((*wrap.Config).API.XML.Url) + `products/images/` + html.EscapeString(string(values[0])) + `/` + html.EscapeString(string(values[1])) + `</picture>`
+			}
+		}
+	}
+	return result
+}
+
+func (this *Modules) api_GenerateXmlOfferAttributes(wrap *wrapper.Wrapper, product_id int) string {
+	result := ``
+	filter_ids := []int{}
+	filter_names := map[int]string{}
+	filter_values := map[int][]string{}
+	rows, err := wrap.DB.Query(
+		`SELECT
+			shop_filters.id,
+			shop_filters.filter,
+			shop_filters_values.name
+		FROM
+			shop_filter_product_values
+			LEFT JOIN shop_filters_values ON shop_filters_values.id = shop_filter_product_values.filter_value_id
+			LEFT JOIN shop_filters ON shop_filters.id = shop_filters_values.filter_id
+		WHERE
+			shop_filter_product_values.product_id = ?
+		ORDER BY
+			shop_filters.filter ASC,
+			shop_filters_values.name ASC
+		;`,
+		product_id,
+	)
+	if err == nil {
+		defer rows.Close()
+		values := make([]string, 3)
+		scan := make([]interface{}, len(values))
+		for i := range values {
+			scan[i] = &values[i]
+		}
+		for rows.Next() {
+			err = rows.Scan(scan...)
+			if err == nil {
+				if !utils.InArrayInt(filter_ids, utils.StrToInt(string(values[0]))) {
+					filter_ids = append(filter_ids, utils.StrToInt(string(values[0])))
+				}
+				filter_names[utils.StrToInt(string(values[0]))] = html.EscapeString(string(values[1]))
+				filter_values[utils.StrToInt(string(values[0]))] = append(filter_values[utils.StrToInt(string(values[0]))], string(values[2]))
+			}
+		}
+	}
+	for _, filter_id := range filter_ids {
+		result += `<param name="` + html.EscapeString(filter_names[filter_id]) + `">` + html.EscapeString(strings.Join(filter_values[filter_id], ", ")) + `</param>`
+	}
+	return result
+}
+
+func (this *Modules) api_GenerateXmlOffers(wrap *wrapper.Wrapper) string {
+	result := ``
+	rows, err := wrap.DB.Query(
+		`SELECT
+			shop_products.id,
+			shop_currencies.code,
+			shop_products.price,
+			shop_products.name,
+			shop_products.alias,
+			shop_products.vendor,
+			shop_products.quantity,
+			shop_products.category,
+			shop_products.content
+		FROM
+			shop_products
+			LEFT JOIN shop_currencies ON shop_currencies.id = shop_products.currency
+		WHERE
+			shop_products.active = 1 AND
+			shop_products.category > 1
+		ORDER BY
+			shop_products.id
+		;`,
+	)
+	if err == nil {
+		defer rows.Close()
+		values := make([]string, 9)
+		scan := make([]interface{}, len(values))
+		for i := range values {
+			scan[i] = &values[i]
+		}
+		for rows.Next() {
+			err = rows.Scan(scan...)
+			if err == nil {
+				result += `<offer id="` + html.EscapeString(string(values[0])) + `" available="true">`
+				result += `<url>` + html.EscapeString((*wrap.Config).API.XML.Url) + `shop/` + html.EscapeString(string(values[4])) + `/</url>`
+				result += `<price>` + utils.Float64ToStrF(utils.StrToFloat64(string(values[2])), "%.2f") + `</price>`
+				result += `<currencyId>` + html.EscapeString(string(values[1])) + `</currencyId>`
+				result += `<categoryId>` + html.EscapeString(string(values[7])) + `</categoryId>`
+				result += this.api_GenerateXmlOfferPictures(wrap, utils.StrToInt(string(values[0])))
+				result += `<vendor>` + html.EscapeString(string(values[5])) + `</vendor>`
+				result += `<stock_quantity>` + html.EscapeString(string(values[6])) + `</stock_quantity>`
+				result += `<name>` + html.EscapeString(string(values[3])) + `</name>`
+				result += `<description><![CDATA[` + string(values[8]) + `]]></description>`
+				result += this.api_GenerateXmlOfferAttributes(wrap, utils.StrToInt(string(values[0])))
+				result += `</offer>`
+			}
+		}
+	}
+	return result
+}
+
+func (this *Modules) api_GenerateXml(wrap *wrapper.Wrapper) string {
+	return `<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
+<yml_catalog date="` + time.Unix(int64(time.Now().Unix()), 0).Format("2006-01-02 15:04") + `">
+	<shop>
+		<name>` + html.EscapeString((*wrap.Config).API.XML.Name) + `</name>
+		<company>` + html.EscapeString((*wrap.Config).API.XML.Company) + `</company>
+		<url>` + html.EscapeString((*wrap.Config).API.XML.Url) + `</url>
+		<currencies>` + this.api_GenerateXmlCurrencies(wrap) + `</currencies>
+		<categories>` + this.api_GenerateXmlCategories(wrap) + `</categories>
+		<offers>` + this.api_GenerateXmlOffers(wrap) + `</offers>
+	</shop>
+</yml_catalog>`
+}