summaryrefslogtreecommitdiff
path: root/interface
diff options
context:
space:
mode:
authorAndrew Guschin <guschin.drew@gmail.com>2022-05-24 12:57:09 +0400
committerAndrew Guschin <guschin.drew@gmail.com>2022-05-24 12:57:09 +0400
commit5ac59d00add5c7982bc3eefa9145bfe676044734 (patch)
treecbf50112eda1839b6a514dcf85b657c7f77aa9d1 /interface
parent31d4558821bfffbc07d5fae54fa063c019a6f7a9 (diff)
Базовая версия интерфейса
Diffstat (limited to 'interface')
-rw-r--r--interface/database.go116
-rw-r--r--interface/go.mod29
-rw-r--r--interface/main.go140
3 files changed, 285 insertions, 0 deletions
diff --git a/interface/database.go b/interface/database.go
new file mode 100644
index 0000000..446b015
--- /dev/null
+++ b/interface/database.go
@@ -0,0 +1,116 @@
+package main
+
+import (
+ "database/sql"
+ "fmt"
+ _ "github.com/denisenkom/go-mssqldb"
+)
+
+type SQLConnection struct {
+ db *sql.DB
+}
+
+func (conn *SQLConnection) init() error {
+ //query := url.Values{}
+ //query.Add("app name", "MyAppName")
+ //
+ //u := &url.URL{
+ // Scheme: "sqlserver",
+ // User: url.UserPassword("sa", "Datab@sed1337"),
+ // Host: fmt.Sprintf("%s:%d", "", 1431),
+ // // Path: instance, // if connecting to an instance instead of a port
+ // RawQuery: query.Encode(),
+ //}
+ //var err error
+ //conn.db, err = sql.Open("sqlserver", u.String())
+ //return err
+ var err error
+ conn.db, err = sql.Open("sqlserver", "server=localhost;user id=sa;password=Datab@sed1337;")
+ return err
+}
+
+type Box struct {
+ id int
+ orderId int
+ warehouseId int
+ wrappingId int
+ volume float32
+ weight float32
+}
+
+func (conn *SQLConnection) getTables() ([]string, error) {
+ result, err := conn.db.Query(
+ `SELECT TABLE_CATALOG + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TABLE_NAME
+ FROM shipping.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'`)
+ if err != nil {
+ return nil, err
+ }
+
+ var tables []string
+ for result.Next() {
+ var row string
+ _ = result.Scan(&row)
+ tables = append(tables, row)
+ }
+
+ return tables, nil
+}
+
+func (conn *SQLConnection) getViews() ([]string, error) {
+ result, err := conn.db.Query(
+ `select name from sys.views where is_ms_shipped=0;`)
+ if err != nil {
+ return nil, err
+ }
+
+ var tables []string
+ for result.Next() {
+ var row string
+ _ = result.Scan(&row)
+ tables = append(tables, row)
+ }
+
+ return tables, nil
+}
+
+func (conn *SQLConnection) getColumns(table string) ([]string, error) {
+ result, err := conn.db.Query(fmt.Sprintf("SELECT TOP 1 * FROM %s", table))
+ if err != nil {
+ return nil, nil
+ }
+ return result.Columns()
+}
+
+func (conn *SQLConnection) getTable(table string) ([][]string, error) {
+ var err error
+ var msg [][]string
+
+ result, err := conn.db.Query(fmt.Sprintf("SELECT * FROM %s", table))
+ if err != nil {
+ return msg, err
+ }
+
+ cols, _ := result.Columns()
+ for result.Next() {
+ boxes := make([]string, len(cols))
+ dest := make([]interface{}, len(cols))
+ for i, _ := range dest {
+ dest[i] = &boxes[i]
+ }
+ _ = result.Scan(dest...)
+ msg = append(msg, boxes)
+ }
+
+ //for result.Next() {
+ // var box Box
+ // err = result.Scan(
+ // &box.id, &box.orderId,
+ // &box.warehouseId,
+ // &box.wrappingId,
+ // &box.volume, &box.weight)
+ // msg = append(msg, box)
+ //}
+ _ = result.Close()
+
+ return msg, err
+}
diff --git a/interface/go.mod b/interface/go.mod
new file mode 100644
index 0000000..9c6e871
--- /dev/null
+++ b/interface/go.mod
@@ -0,0 +1,29 @@
+module interface
+
+go 1.18
+
+require fyne.io/fyne/v2 v2.1.4
+
+require (
+ github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/denisenkom/go-mssqldb v0.12.2 // indirect
+ github.com/fredbi/uri v0.0.0-20181227131451-3dcfdacbaaf3 // indirect
+ github.com/fsnotify/fsnotify v1.4.9 // indirect
+ github.com/go-gl/gl v0.0.0-20210813123233-e4099ee2221f // indirect
+ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20211024062804-40e447a793be // indirect
+ github.com/godbus/dbus/v5 v5.0.4 // indirect
+ github.com/goki/freetype v0.0.0-20181231101311-fa8a33aabaff // indirect
+ github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe // indirect
+ github.com/golang-sql/sqlexp v0.1.0 // indirect
+ github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/srwiley/oksvg v0.0.0-20200311192757-870daf9aa564 // indirect
+ github.com/srwiley/rasterx v0.0.0-20200120212402-85cb7272f5e9 // indirect
+ github.com/stretchr/testify v1.7.0 // indirect
+ github.com/yuin/goldmark v1.3.8 // indirect
+ golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 // indirect
+ golang.org/x/image v0.0.0-20200430140353-33d19683fad8 // indirect
+ golang.org/x/net v0.0.0-20210610132358-84b48f89b13b // indirect
+ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect
+ golang.org/x/text v0.3.6 // indirect
+ gopkg.in/yaml.v2 v2.4.0 // indirect
+)
diff --git a/interface/main.go b/interface/main.go
new file mode 100644
index 0000000..8f7566d
--- /dev/null
+++ b/interface/main.go
@@ -0,0 +1,140 @@
+package main
+
+import (
+ "fmt"
+ "fyne.io/fyne/v2"
+ "fyne.io/fyne/v2/app"
+ "fyne.io/fyne/v2/canvas"
+ "fyne.io/fyne/v2/container"
+ "fyne.io/fyne/v2/layout"
+ "fyne.io/fyne/v2/widget"
+ "image/color"
+)
+
+type DBInterface struct {
+ window fyne.Window
+ db SQLConnection
+}
+
+func insertView(window fyne.Window, db SQLConnection, table string) {
+ window.SetTitle(fmt.Sprintf("Insert into table %s", table))
+ columns, _ := db.getColumns(table)
+
+ var elements []fyne.CanvasObject
+ for _, val := range columns {
+ label := canvas.NewText(val, color.White)
+ input := widget.NewEntry()
+ elements = append(elements, container.New(
+ layout.NewBorderLayout(nil, nil, label, nil),
+ label, input))
+ }
+ elements = append(elements, widget.NewButton("Вставить", func() {}))
+ elements = append(elements, widget.NewButton("Назад", func() {
+ showTable(window, db, table)
+ }))
+
+ mainContainer := container.NewVBox(elements...)
+ window.SetContent(mainContainer)
+}
+
+func showTable(window fyne.Window, db SQLConnection, table string) {
+ data, err := db.getTable(table)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ columns, err := db.getColumns(table)
+
+ list := widget.NewTable(
+ func() (int, int) {
+ return len(data), len(columns)
+ },
+ func() fyne.CanvasObject {
+ return widget.NewLabel("wide content")
+ },
+ func(i widget.TableCellID, o fyne.CanvasObject) {
+ o.(*widget.Label).SetText(fmt.Sprintf("%v", data[i.Row][i.Col]))
+ })
+
+ signup := widget.NewButton("Вставить", func() {
+ insertView(window, db, table)
+ })
+
+ back := widget.NewButton("Назад", func() {
+ adminView(window, db)
+ })
+
+ window.SetContent(container.NewBorder(nil, container.NewHBox(signup, back), nil, nil, list))
+}
+
+func adminView(window fyne.Window, db SQLConnection) {
+ tables, _ := db.getTables()
+
+ var tableBtns []fyne.CanvasObject
+ tableBtns = append(tableBtns, container.NewCenter(widget.NewLabel("Таблицы")))
+ for _, val := range tables {
+ e := val
+ tableBtns = append(
+ tableBtns, widget.NewButton(
+ fmt.Sprintf("Показать %s", val),
+ func() {
+ showTable(window, db, e)
+ }))
+ }
+
+ views, _ := db.getViews()
+ var viewsBtns []fyne.CanvasObject
+ viewsBtns = append(viewsBtns, container.NewCenter(widget.NewLabel("Представления")))
+ for _, val := range views {
+ e := val
+ viewsBtns = append(
+ viewsBtns, widget.NewButton(
+ fmt.Sprintf("Показать %s", val),
+ func() {
+ showTable(window, db, e)
+ }))
+ }
+
+ tablesScroll := container.NewVScroll(container.NewVBox(tableBtns...))
+ viewsScroll := container.NewVScroll(container.NewVBox(viewsBtns...))
+
+ dataBox := container.NewHBox(tablesScroll, viewsScroll)
+ menuBtn := widget.NewButton("В меню", func() {
+ menu(window, db)
+ })
+
+ window.SetContent(container.NewBorder(nil, menuBtn, nil, nil, dataBox))
+}
+
+func userView(window fyne.Window, db SQLConnection) {
+
+}
+
+func menu(window fyne.Window, db SQLConnection) {
+ window.SetContent(container.NewCenter(
+ container.NewVBox(
+ widget.NewButton("Режим Администратора", func() {
+ adminView(window, db)
+ }),
+ widget.NewButton("Режим Пользователя", func() {
+ userView(window, db)
+ }),
+ ),
+ ))
+}
+
+func main() {
+ myApp := app.New()
+ window := myApp.NewWindow("Table Widget")
+ window.Resize(fyne.NewSize(700, 480))
+
+ db := SQLConnection{}
+ err := db.init()
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+
+ menu(window, db)
+ window.ShowAndRun()
+}