go-sdk

module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 6, 2023 License: Apache-2.0

README

Go-Sdk

The SDK contains commonly used golang packages like HTTP middlewares, GRPC libraries, Excel Sheet Reader/Writer, QR code generator, SQL database building block, Logger & Tracer by different microservices.

Here are some example use cases:

REST Api server Example

package main

import (
	"log"
	"net/http"
	"time"

	"github.com/gin-gonic/gin"
	sdkhttp "github.com/Raj63/go-sdk/http"
	sdkgin "github.com/Raj63/go-sdk/http/gin"
	"github.com/Raj63/go-sdk/logger"
)

func main() {
	// initialize the router
	router := gin.Default()

	_logger := logger.NewLogger()

	// make sure the middleware configs are passed for HTTP server
	err := sdkgin.AddBasicHandlers(router, &sdkgin.MiddlewaresConfig{
		DebugEnabled: true,
		RateLimiterConfig: struct {
			Enabled    bool
			Interval   time.Duration
			BucketSize int
		}{
			Enabled:    true,
			Interval:   time.Second * 1,
			BucketSize: 3,
		},
		CorsOptions: struct {
			Enabled         bool
			AllowOrigins    []string
			AllowMethods    []string
			AllowHeaders    []string
			ExposeHeader    []string
			AllowOriginFunc func(origin string) bool
			MaxAge          time.Duration
		}{
			Enabled:      true,
			AllowOrigins: []string{"http://localhost:8080"},
			AllowMethods: []string{http.MethodGet, http.MethodPost, http.MethodPut, http.MethodDelete, http.MethodOptions},
			AllowHeaders: []string{"Origin"},
			ExposeHeader: []string{"Content-Length"},
		},
		StaticFilesOptions: struct {
			Enabled    bool
			ServeFiles []struct {
				Prefix                 string
				FilePath               string
				AllowDirectoryIndexing bool
			}
		}{
			Enabled: true,
			ServeFiles: []struct {
				Prefix                 string
				FilePath               string
				AllowDirectoryIndexing bool
			}{
				{
					Prefix:                 "/",
					FilePath:               "assets/static",
					AllowDirectoryIndexing: true,
				},
			},
		},
		PrometheusEnabled: true,
		NewRelicOptions: struct {
			ServiceName string
			LicenseKey  string
		}{
			ServiceName: "ServiceName",
			LicenseKey:  "NewRelicLicenseKey",
		},
	}, _logger)
	if err != nil {
		_logger.Errorf("error setting up HTTP basic middlewares: %v", err)
		log.Fatalln(err)
	}

	// register the application routes here
	// routes.ApplicationV1Router(router)

	httpServer, err := sdkhttp.NewServer(
		&sdkhttp.ServerConfig{
			Name:    "service-name",
			Address: "0.0.0.0:8080",
			GracefulShutdownHandler: func() error {
				// gracefully shutdown database stuff
				return nil
			},
		},
		_logger,
		func() error { return nil },
		router)
	if err != nil {
		_logger.Errorf("error creating server: %v", err)
		log.Fatalln(err)
	}

	// finally serve the server
	if err := httpServer.Serve(); err != nil {
		_logger.Fatal(err)
	}
}

GRPC server Example

    package main

import (
	"log"

	sdkgrpc "github.com/Raj63/go-sdk/grpc"
	"github.com/Raj63/go-sdk/logger"
	"google.golang.org/grpc"
)

func main() {
	_logger := logger.NewLogger()

	// Setup the gRPC/HTTP server.
	server, err := sdkgrpc.NewServer(
		&sdkgrpc.ServerConfig{},
		_logger,
		func() error {
			return nil
		},
		[]grpc.UnaryServerInterceptor{}...,
	)
	if err != nil {
		log.Fatalln(err)
	}

	// Register the gRPC server implementation.
	// api.RegisterAuthServiceServer(
	// 	server.GRPCServer(),
	// 	&pkggrpc.Server{},
	// )

	// finally serve the server
	if err := server.Serve(); err != nil {
		_logger.Fatal(err)
	}

}

Excel Read/Write Example

package main

import (
	"fmt"

	"github.com/Raj63/go-sdk/excel"
	"github.com/Raj63/go-sdk/excel/excelize"
	"github.com/Raj63/go-sdk/logger"
)

func main() {
	ReadSample()
	ReadSheet()
	ReadRow()
}

// read samples of each sheets from a excel 
func ReadSample() {
	logger := logger.NewLogger()
	excel := excelize.NewExcel(excel.FileInfo{FilePath: "some-excel-file.xlsx"}, logger)

	data, err := excel.ReadSample()
	if err != nil {
		fmt.Printf("Error reading: %v", err)
		return
	}

	for _, sheet := range data.Sheets {
		fmt.Printf("Sheet: %s\n", sheet.Name)
		for _, row := range sheet.DataRow {
			for _, data := range row.Data {
				fmt.Printf("%s: %s\n", data.Header, data.Value)
			}
			fmt.Println("")
		}
		fmt.Println("")
	}
}

func ReadSheet() {
	logger := logger.NewLogger()
	excel := excelize.NewExcel(excel.FileInfo{FilePath: "some-excel-file.xlsx"}, logger)

	sheet, err := excel.ReadSheet("Sheet 1")
	if err != nil {
		fmt.Printf("Error reading: %v", err)
		return
	}

	fmt.Printf("Sheet: %s\n", sheet.Name)
	for _, row := range sheet.DataRow {
		for _, data := range row.Data {
			fmt.Printf("%s: %s\n", data.Header, data.Value)
		}
		fmt.Println("")
	}
	fmt.Println("")
}

func ReadRow() {
	logger := logger.NewLogger()
	exl := excelize.NewExcel(excel.FileInfo{FilePath: "some-excel-file.xlsx"}, logger)

	executor := func(row excel.DataRow) error {
		for _, data := range row.Data {
			fmt.Printf("%s: %s\n", data.Header, data.Value)
		}
		fmt.Println("")
		return nil
	}
	err := exl.ReadRow("Sheet 1", executor)
	if err != nil {
		fmt.Printf("Error reading: %v", err)
		return
	}
}

QR Code Generation Example

package main

import (
	"fmt"
	"io"
	"log"
	"os"

	myqr "github.com/Raj63/go-sdk/qrcode"
	"github.com/Raj63/go-sdk/qrcode/yeqown"

	"github.com/pkg/errors"
)

func main() {
	TestQrCodeWithWriter()
	TestQrCode()
	TestQrCodeN(10)
}

func TestQrCodeWithWriter() {
	//setup qr config
	qrConfig := myqr.DefaultQrConfig()
	qrConfig.LogoPath = "../../assets/images/logo-100.jpeg"
	qrConfig.Shape = myqr.CircleShape

	qr, err := yeqown.NewQrcode(qrConfig)
	if err != nil {
		log.Fatal(err)
	}

	file, err := NewFile("./generated/qrcode-with-url-logo.jpeg")
	if err != nil {
		log.Fatal(err)
	}

	err = qr.CreateWithWriter(myqr.ProductInfo{Host: "https://amritmahotsav.nic.in/writereaddata/Portal/Images/89/290537667_353719030246146_3235967459984024871_n.jpg"}, file)
	if err != nil {
		log.Fatal(err)
	}
}

func TestQrCode() {
	//setup qr config
	qrConfig := myqr.DefaultQrConfig()
	qrConfig.LogoPath = "../../assets/images/logo-100.jpeg"
	qrConfig.Shape = myqr.RectangleShape

	qr, err := yeqown.NewQrcode(qrConfig)
	if err != nil {
		log.Fatal(err)
	}

	file, err := NewFile("./generated/qrcode-with-url-logo.jpeg")
	if err != nil {
		log.Fatal(err)
	}
	defer file.Close()

	result, err := qr.Create(myqr.ProductInfo{Text: `
Name:	Medha Biswas
Guardian Name:	Rajesh Biswas
Emergency Contact:	9902260563
Blood Group:	A+
Address:	1-108/1, Hyderabad
School:	Mayalaxmi International School
School Contact:	8702711233
Class:	LKG
Roll Number:	M23CLR3`})
	if err != nil {
		log.Fatal(err)
	}

	file.Write(result.QRCode)
}

func TestQrCodeN(len int) {
	//setup qr config
	qrConfig := myqr.DefaultQrConfig()
	qrConfig.LogoPath = "../../assets/images/logo-100.jpeg"
	qrConfig.Shape = myqr.CircleShape

	qr, err := yeqown.NewQrcode(qrConfig)
	if err != nil {
		log.Fatal(err)
	}

	products := make([]myqr.ProductInfo, 0)
	for i := 0; i < len; i++ {
		products = append(products, myqr.ProductInfo{
			Text: fmt.Sprintf("text-%d", i),
		})
	}

	result, err := qr.CreateN(products)
	if err != nil {
		log.Fatal(err)
	}

	for _, eachQR := range result {
		{
			file, err := NewFile(fmt.Sprintf("./generated/qrcode-range-%s.jpeg", eachQR.ProductInfo.Text))
			if err != nil {
				log.Fatal(err)
			}
			defer file.Close()

			file.Write(eachQR.QRCode)
		}
	}
}

func NewFile(filename string) (io.WriteCloser, error) {
	if _, err := os.Stat(filename); err != nil && os.IsExist(err) {
		// custom path got: "file exists"
		return nil, fmt.Errorf("could not find path: %s", filename)
	}

	fd, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
	if err != nil {
		return nil, errors.Wrap(err, "create file failed")
	}

	return fd, nil
}

Directories

Path Synopsis
Package errors defines the domain errors used in the application.
Package errors defines the domain errors used in the application.
examples
excel command
grpc command
http command
qrcode command
Package grpc implements a set of utilities around gRPC + Protobuf to provide low-latency API-contract-driven development.
Package grpc implements a set of utilities around gRPC + Protobuf to provide low-latency API-contract-driven development.
gin
gin/errors
Package errors contains the error handler controller
Package errors contains the error handler controller
yeqown
Package yeqown is a wrapper around library Ref: https://github.com/yeqown/go-qrcode
Package yeqown is a wrapper around library Ref: https://github.com/yeqown/go-qrcode

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL