Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
Empty file added .gitignore
Empty file.
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,19 @@ Hackathon Challenge Season2
ตัวอย่าง Data visualization

[dev-mountain-visualization](https://dev-moutain-dataviz.netlify.app/)

<hr>

## Team [LAzyDev](https://github.com/LAzyDev-101)
### Team member
- [@Endifly](https://github.com/Endifly)
- [@new4761](https://github.com/new4761)
- [@markkj](https://github.com/markkj)

**[Repo](https://github.com/LAzyDev-101/todo)**

### How to run Bonus question(Data Visualization)
```shell
go run cmd/bonusQ/main.go
```
is will serve at http://localhost:8081/
7 changes: 7 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module github.com/markkj/hackathon-season2

go 1.18

require github.com/mattn/go-sqlite3 v1.14.15

require github.com/go-echarts/go-echarts/v2 v2.2.4
19 changes: 19 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-echarts/go-echarts/v2 v2.2.4 h1:SKJpdyNIyD65XjbUZjzg6SwccTNXEgmh+PlaO23g2H0=
github.com/go-echarts/go-echarts/v2 v2.2.4/go.mod h1:6TOomEztzGDVDkOSCFBq3ed7xOYfbOqhaBzD0YV771A=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/mattn/go-sqlite3 v1.14.15 h1:vfoHhTN1af61xCRSWzFIWzx2YskyMTwHLrExkBOjvxI=
github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.6.0 h1:jlIyCplCJFULU/01vCkhKuTyc3OorI3bJFuw6obfgho=
github.com/stretchr/testify v1.6.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
Binary file added internal/.DS_Store
Binary file not shown.
159 changes: 159 additions & 0 deletions internal/csv/csv.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
package csv

import (
"bufio"
"fmt"
"io"
"os"
"strings"
)

type CsvData struct {
Columns []string
Records []string
}

func (c *CsvData) BuildCsvFile(outPath string) error {
csvFile, err := os.Create(outPath)
if err != nil {
return err
}
defer csvFile.Close()

_, err = csvFile.WriteString(prepareColunm(c.Columns))
if err != nil {
return err
}

err = prepareRow(c.Records, csvFile)
if err != nil {
return err
}
return err
}

func prepareRow(rows []string, file *os.File) error {
for i, s := range rows {
var sb strings.Builder
sb.WriteString(s)
// if is last data of rows no need to add "\n"
if i != len(rows)-1 {
sb.WriteString("\n")
}
_, err := file.Write([]byte(sb.String()))
if err != nil {
return err
}
}
return nil
}

func prepareColunm(columns []string) string {
var sb strings.Builder
for i, s := range columns {
sb.WriteString(s)
// if is last data of column no need to add ";"
if i != len(columns)-1 {
sb.WriteString(";")
}
}
//add newline for end of colunm
sb.WriteString("\n")
return sb.String()
}

func (c *CsvData) SetColumn(columns []string) {
c.Columns = columns
}

func (c *CsvData) AddRecord(data []string) {
var sb strings.Builder
for i, s := range data {
sb.WriteString(s)
// if is last data of column no need to add ";"
if i != len(data)-1 {
sb.WriteString(";")
}
}
c.Records = append(c.Records, sb.String())
}

// CSVFileToMap reads csv file into slice of map
func CSVFileToMap(filePath string) (returnMap []map[string]interface{}, err error) {

// read csv file
csvfile, err := os.Open(filePath)
if err != nil {
return nil, fmt.Errorf(err.Error())
}

defer csvfile.Close()

reader := bufio.NewReader(csvfile)
if err != nil {
return nil, err
}
header := []string{} // holds first row (header)
isFirstRow := true
for {
row, _, err := reader.ReadLine()
if err != nil {
// if EOF error we just jump out of loop
if err == io.EOF {
break
}
return nil, err
}
rowStr := string(row)
if isFirstRow {
str := strings.Split(rowStr, ";")
header = append(header, str...)
isFirstRow = false
} else {
// for each cell, map[string]string k=header v=value
line := make(map[string]interface{})
str := strings.Split(rowStr, ";")
for i := 0; i < len(str); i++ {
line[header[i]] = str[i]
}
returnMap = append(returnMap, line)
}
}
return
}

func CSVFileToList(filePath string) (returnMap [][]string, err error) {

// read csv file
csvfile, err := os.Open(filePath)
if err != nil {
return nil, fmt.Errorf(err.Error())
}

defer csvfile.Close()

reader := bufio.NewReader(csvfile)
if err != nil {
return nil, err
}

isFirstRow := true
for {
row, _, err := reader.ReadLine()
if err != nil {
// if EOF error we just jump out of loop
if err == io.EOF {
break
}
return nil, err
}
rowStr := string(row)
if isFirstRow {
isFirstRow = false
} else {
str := strings.Split(rowStr, ";")
returnMap = append(returnMap, str)
}
}
return
}
34 changes: 34 additions & 0 deletions internal/json/json.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package json

import (
"encoding/json"
"os"
)

func ExportToJsonFile(records []map[string]interface{}, fileName string) error {
jsonFile, err := os.Create(fileName + ".json")
if err != nil {
return err
}
// adjust format of output
jsonFile.WriteString("[\n")
defer jsonFile.Close()
for i, row := range records {
jsonStr, err := json.MarshalIndent(row, "", " ")
if err != nil {
return err
}
//only add "," if not the last row
str := string(jsonStr)
if i != len(records)-1 {
str = str + ","
}
_, err = jsonFile.WriteString(str)
if err != nil {
return err
}
}
// adjust format of output
jsonFile.WriteString("\n]")
return nil
}
Loading