generate pie chart templ

This commit is contained in:
sindhu
2024-04-30 13:51:19 +07:00
parent 976753fc8e
commit ae59d63940
12 changed files with 723 additions and 8 deletions

301
services/chart.services.go Normal file
View 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")
}