generate pie chart templ
This commit is contained in:
301
services/chart.services.go
Normal file
301
services/chart.services.go
Normal file
@@ -0,0 +1,301 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/emarifer/go-templ-project-structure/db"
|
||||
)
|
||||
|
||||
func NewServicesPiechart(u Piechart, uStore db.PieChartStore) *ServicesPiechart {
|
||||
|
||||
return &ServicesPiechart{
|
||||
Piechart: u,
|
||||
PieChartStore: uStore,
|
||||
}
|
||||
}
|
||||
|
||||
// type Option struct {
|
||||
// Title struct {
|
||||
// Text string
|
||||
// Left string
|
||||
// }
|
||||
// Tooltip struct {
|
||||
// Trigger string
|
||||
// }
|
||||
// Legend struct {
|
||||
// Top string
|
||||
// Left string
|
||||
// Orient string
|
||||
// }
|
||||
// Series []Series
|
||||
// }
|
||||
|
||||
type SeriesData struct {
|
||||
Value int `json:"value"`
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
type Series struct {
|
||||
Label struct {
|
||||
Position string `json:"position"`
|
||||
Formatter string `json:"formatter"`
|
||||
} `json:"label"`
|
||||
Name string `json:"name"`
|
||||
Type string `json:"type"`
|
||||
Radius []string `json:"radius"`
|
||||
ItemStyle struct {
|
||||
BorderRadius int `json:"borderRadius"`
|
||||
BorderColor string `json:"borderColor"`
|
||||
BorderWidth int `json:"borderWidth"`
|
||||
} `json:"itemStyle"`
|
||||
Data []SeriesData `json:"data"`
|
||||
Emphasis struct {
|
||||
ItemStyle struct {
|
||||
ShadowBlur int `json:"shadowBlur"`
|
||||
ShadowOffsetX int `json:"shadowOffsetX"`
|
||||
ShadowColor string `json:"shadowColor"`
|
||||
} `json:"itemStyle"`
|
||||
} `json:"emphasis"`
|
||||
}
|
||||
|
||||
type Piechart struct {
|
||||
// ID int `json:"id"`
|
||||
// Xsamplename string `json:"Xsamplename"`
|
||||
// Email string `json:"email"`
|
||||
// CreatedAt time.Time `json:"created_at,omitempty"`
|
||||
|
||||
Title struct {
|
||||
Text string `json:"text"`
|
||||
Left string `json:"left"`
|
||||
} `json:"title"`
|
||||
Tooltip struct {
|
||||
Trigger string `json:"trigger"`
|
||||
} `json:"tooltip"`
|
||||
Legend struct {
|
||||
Top string `json:"top"`
|
||||
Left string `json:"left"`
|
||||
Orient string `json:"orient"`
|
||||
} `json:"legend"`
|
||||
Series []Series `json:"series"`
|
||||
}
|
||||
|
||||
type ServicesPiechart struct {
|
||||
Piechart Piechart
|
||||
PieChartStore db.PieChartStore
|
||||
}
|
||||
|
||||
// func (su *ServicesPiechart) GetAllXsamples() ([]Piechart, error) {
|
||||
// query := `SELECT id, Xsamplename, email, created_at FROM Xsamples ORDER BY created_at DESC`
|
||||
|
||||
// rows, err := su.PieChartStore.Db.Query(query)
|
||||
// if err != nil {
|
||||
// return []Piechart{}, err
|
||||
// }
|
||||
// // We close the resource
|
||||
// defer rows.Close()
|
||||
|
||||
// Xsamples := []Piechart{}
|
||||
// for rows.Next() {
|
||||
// rows.Scan(
|
||||
// &su.Piechart.ID,
|
||||
// &su.Piechart.Xsamplename,
|
||||
// &su.Piechart.Email,
|
||||
// &su.Piechart.CreatedAt,
|
||||
// )
|
||||
|
||||
// Xsamples = append(Xsamples, su.Piechart)
|
||||
// }
|
||||
|
||||
// return Xsamples, nil
|
||||
// }
|
||||
|
||||
// func (su *ServicesPiechart) GetXsampleById(id int) (Piechart, error) {
|
||||
|
||||
// query := `SELECT id, Xsamplename, email, created_at FROM Xsamples
|
||||
// WHERE id = ?`
|
||||
|
||||
// stmt, err := su.PieChartStore.Db.Prepare(query)
|
||||
// if err != nil {
|
||||
// return Piechart{}, err
|
||||
// }
|
||||
|
||||
// defer stmt.Close()
|
||||
|
||||
// su.Piechart.ID = id
|
||||
// err = stmt.QueryRow(
|
||||
// su.Piechart.ID,
|
||||
// ).Scan(
|
||||
// &su.Piechart.ID,
|
||||
// &su.Piechart.Xsamplename,
|
||||
// &su.Piechart.Email,
|
||||
// &su.Piechart.CreatedAt,
|
||||
// )
|
||||
// if err != nil {
|
||||
// return Piechart{}, err
|
||||
// }
|
||||
|
||||
// return su.Piechart, nil
|
||||
// }
|
||||
|
||||
// Peserta MCU -- MCU001
|
||||
func GetPieChartMcu001(code string, id int) (string, Piechart, error) {
|
||||
var title = "Status Index Masa Tubuh (BMI)"
|
||||
option := Piechart{
|
||||
Title: struct {
|
||||
Text string `json:"text"`
|
||||
Left string `json:"left"`
|
||||
}{
|
||||
Text: title,
|
||||
Left: "center",
|
||||
},
|
||||
Tooltip: struct {
|
||||
Trigger string `json:"trigger"`
|
||||
}{
|
||||
Trigger: "item",
|
||||
},
|
||||
Legend: struct {
|
||||
Top string `json:"top"`
|
||||
Left string `json:"left"`
|
||||
Orient string `json:"orient"`
|
||||
}{
|
||||
Top: "bottom",
|
||||
Left: "center",
|
||||
Orient: "vertical",
|
||||
},
|
||||
Series: []Series{
|
||||
{
|
||||
Label: struct {
|
||||
Position string `json:"position"`
|
||||
Formatter string `json:"formatter"`
|
||||
}{
|
||||
Position: "inner",
|
||||
Formatter: "{d}%",
|
||||
},
|
||||
Name: "Access From",
|
||||
Type: "pie",
|
||||
Radius: []string{"20%", "50%"},
|
||||
ItemStyle: struct {
|
||||
BorderRadius int `json:"borderRadius"`
|
||||
BorderColor string `json:"borderColor"`
|
||||
BorderWidth int `json:"borderWidth"`
|
||||
}{
|
||||
BorderRadius: 10,
|
||||
BorderColor: "#fff",
|
||||
BorderWidth: 2,
|
||||
},
|
||||
Data: []SeriesData{
|
||||
{Value: 506, Name: "Sudah MCU : 506 Peserta"},
|
||||
{Value: 54, Name: "Belum MCU : 54 Peserta"},
|
||||
},
|
||||
Emphasis: struct {
|
||||
ItemStyle struct {
|
||||
ShadowBlur int `json:"shadowBlur"`
|
||||
ShadowOffsetX int `json:"shadowOffsetX"`
|
||||
ShadowColor string `json:"shadowColor"`
|
||||
} `json:"itemStyle"`
|
||||
}{
|
||||
ItemStyle: struct {
|
||||
ShadowBlur int `json:"shadowBlur"`
|
||||
ShadowOffsetX int `json:"shadowOffsetX"`
|
||||
ShadowColor string `json:"shadowColor"`
|
||||
}{
|
||||
ShadowBlur: 10,
|
||||
ShadowOffsetX: 0,
|
||||
ShadowColor: "rgba(0, 0, 0, 0.5)",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
return title, option, nil
|
||||
}
|
||||
|
||||
// Kepersertaan MCU Berdasarkan Jenis Kelamin -- MCU002
|
||||
|
||||
// Status Index Masa Tubuh (BMI) -- MCU006
|
||||
func GetPieChartMcu006(code string, id int) (string, Piechart, error) {
|
||||
var title = "Status Index Masa Tubuh (BMI)"
|
||||
option := Piechart{
|
||||
Title: struct {
|
||||
Text string `json:"text"`
|
||||
Left string `json:"left"`
|
||||
}{
|
||||
Text: title,
|
||||
Left: "center",
|
||||
},
|
||||
Tooltip: struct {
|
||||
Trigger string `json:"trigger"`
|
||||
}{
|
||||
Trigger: "item",
|
||||
},
|
||||
Legend: struct {
|
||||
Top string `json:"top"`
|
||||
Left string `json:"left"`
|
||||
Orient string `json:"orient"`
|
||||
}{
|
||||
Top: "bottom",
|
||||
Left: "center",
|
||||
Orient: "vertical",
|
||||
},
|
||||
Series: []Series{
|
||||
{
|
||||
Label: struct {
|
||||
Position string `json:"position"`
|
||||
Formatter string `json:"formatter"`
|
||||
}{
|
||||
Position: "inner",
|
||||
Formatter: "{d}%",
|
||||
},
|
||||
Name: "Access From",
|
||||
Type: "pie",
|
||||
Radius: []string{"20%", "50%"},
|
||||
ItemStyle: struct {
|
||||
BorderRadius int `json:"borderRadius"`
|
||||
BorderColor string `json:"borderColor"`
|
||||
BorderWidth int `json:"borderWidth"`
|
||||
}{
|
||||
BorderRadius: 10,
|
||||
BorderColor: "#fff",
|
||||
BorderWidth: 2,
|
||||
},
|
||||
Data: []SeriesData{
|
||||
{Value: 19, Name: "Underweight : 19 Peserta"},
|
||||
{Value: 104, Name: "Normal : 104 Peserta"},
|
||||
{Value: 230, Name: "Obese 1 : 230 Peserta"},
|
||||
{Value: 99, Name: "Obese 2 : 99 Peserta"},
|
||||
},
|
||||
Emphasis: struct {
|
||||
ItemStyle struct {
|
||||
ShadowBlur int `json:"shadowBlur"`
|
||||
ShadowOffsetX int `json:"shadowOffsetX"`
|
||||
ShadowColor string `json:"shadowColor"`
|
||||
} `json:"itemStyle"`
|
||||
}{
|
||||
ItemStyle: struct {
|
||||
ShadowBlur int `json:"shadowBlur"`
|
||||
ShadowOffsetX int `json:"shadowOffsetX"`
|
||||
ShadowColor string `json:"shadowColor"`
|
||||
}{
|
||||
ShadowBlur: 10,
|
||||
ShadowOffsetX: 0,
|
||||
ShadowColor: "rgba(0, 0, 0, 0.5)",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return title, option, nil
|
||||
}
|
||||
|
||||
func (su *ServicesPiechart) GetPieChart(code string, id int) (string, Piechart, error) {
|
||||
if code == "mcu001" {
|
||||
return GetPieChartMcu001(code, id)
|
||||
}
|
||||
|
||||
if code == "mcu006" {
|
||||
return GetPieChartMcu006(code, id)
|
||||
}
|
||||
|
||||
return "", Piechart{}, fmt.Errorf("code " + code + " not found")
|
||||
}
|
||||
Reference in New Issue
Block a user