package main import ( "database/sql" "fmt" ) // Web type NavItem struct { Caption string Destination string } func NewNavItem(caption, destination string) NavItem { return NavItem{caption, destination} } type Stylename string func NewStyleItemList(stylenames ...Stylename) []Stylename { return stylenames } type TableColumns []string type TableRow struct { Columns TableColumns Id int } type Table struct { Collumns TableColumns Rows []TableRow } // Database type Location struct { Id sql.NullInt64 Parent sql.NullInt64 Name sql.NullString Description sql.NullString Connection *Connection } func (l *Location) ToTableRow() TableRow { columns := make(TableColumns, 3) tr := TableRow{} var path string if l.Id.Valid { columns[0] = fmt.Sprintf("%d", l.Id.Int64) tr.Id = int(l.Id.Int64) path, _ = l.Connection.QueryLocationFullPath(l.Id.Int64) } else { columns[0] = "NULL" tr.Id = -1 } columns[1] = path if l.Description.Valid { columns[2] = l.Description.String } else { columns[2] = "NULL" } tr.Columns = columns return tr } func (l *Location) GetParent() *Location { return nil } type Container struct { Id sql.NullInt64 Name sql.NullString } func (c *Container) ToTableRow() TableRow { columns := make(TableColumns, 2) tr := TableRow{} if c.Id.Valid { columns[0] = fmt.Sprintf("%d", c.Id.Int64) tr.Id = int(c.Id.Int64) } else { columns[0] = "NULL" tr.Id = -1 } if c.Name.Valid { columns[1] = c.Name.String } else { columns[1] = "NULL" } tr.Columns = columns return tr } type Part struct { Id sql.NullInt64 Name sql.NullString Tags sql.NullString Location Location Container Container Connection *Connection } func (p *Part) ToTableRow() TableRow { columns := make(TableColumns, 5) tr := TableRow{} if p.Id.Valid { columns[0] = fmt.Sprintf("%d", p.Id.Int64) tr.Id = int(p.Id.Int64) } else { columns[0] = "NULL" tr.Id = -1 } if p.Name.Valid { columns[1] = p.Name.String } else { columns[1] = "NULL" } if p.Tags.Valid { columns[2] = p.Tags.String } else { columns[2] = "NULL" } if p.Location.Id.Valid { fullPath, err := p.Connection.QueryLocationFullPath(p.Location.Id.Int64) if err != nil { fmt.Println(err) } columns[3] = fullPath } else { columns[3] = "NULL" } if p.Container.Name.Valid { columns[4] = p.Container.Name.String } else { columns[4] = "NULL" } tr.Columns = columns return tr } // Interfaces type DatabaseType interface { ToTableRow() TableRow }