Skip to content

Commit

Permalink
Introduce gorm
Browse files Browse the repository at this point in the history
  • Loading branch information
pocke committed Jan 11, 2019
1 parent aa40ced commit eb90550
Show file tree
Hide file tree
Showing 7 changed files with 130 additions and 105 deletions.
2 changes: 1 addition & 1 deletion determine_merged.go
Expand Up @@ -8,7 +8,7 @@ import (
)

func StartDetermineMerged(ctx context.Context) error {
as, err := SelectAccounts(ctx)
as, err := SelectAccountsOld(ctx)
if err != nil {
return err
}
Expand Down
4 changes: 2 additions & 2 deletions fetch_issues.go
Expand Up @@ -32,7 +32,7 @@ func StartFetchIssues(ctx context.Context) error {
}

for _, c := range chs {
go func(c Channel) {
go func(c ChannelOld) {
for {
childCtx, cancel := context.WithCancel(ctx)
err := startFetchIssuesWithChannel(childCtx, c)
Expand Down Expand Up @@ -66,7 +66,7 @@ func sendErrToSlack(err error) error {
return err
}

func startFetchIssuesWithChannel(ctx context.Context, c Channel) error {
func startFetchIssuesWithChannel(ctx context.Context, c ChannelOld) error {
client := ghClient(ctx, c.account.accessToken)
var qs []string
if c.system.Valid == true {
Expand Down
2 changes: 2 additions & 0 deletions go.mod
Expand Up @@ -5,6 +5,8 @@ require (
github.com/dgrijalva/jwt-go v3.2.0+incompatible // indirect
github.com/google/go-github/v21 v21.0.0
github.com/gorilla/websocket v1.4.0
github.com/jinzhu/gorm v1.9.2
github.com/jinzhu/inflection v0.0.0-20180308033659-04140366298a // indirect
github.com/labstack/echo v3.3.5+incompatible
github.com/labstack/gommon v0.2.8 // indirect
github.com/luna-duclos/instrumentedsql v0.0.0-20181127104832-b7d587d28109
Expand Down
4 changes: 4 additions & 0 deletions go.sum
Expand Up @@ -11,6 +11,10 @@ github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASu
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/jinzhu/gorm v1.9.2 h1:lCvgEaqe/HVE+tjAR2mt4HbbHAZsQOv3XAZiEZV37iw=
github.com/jinzhu/gorm v1.9.2/go.mod h1:Vla75njaFJ8clLU1W44h34PjIkijhjHIYnZxMqCdxqo=
github.com/jinzhu/inflection v0.0.0-20180308033659-04140366298a h1:eeaG9XMUvRBYXJi4pg1ZKM7nxc5AfXfojeLLW7O5J3k=
github.com/jinzhu/inflection v0.0.0-20180308033659-04140366298a/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/labstack/echo v3.3.5+incompatible h1:9PfxPUmasKzeJor9uQTaXLT6WUG/r+vSTmvXxvv3JO4=
github.com/labstack/echo v3.3.5+incompatible/go.mod h1:0INS7j/VjnFxD4E2wkz67b8cVwCLbBmJyDaka6Cmk1s=
github.com/labstack/gommon v0.2.8 h1:JvRqmeZcfrHC5u6uVleB4NxxNbzx6gpbJiQknDbKQu0=
Expand Down
92 changes: 92 additions & 0 deletions gorm.go
@@ -0,0 +1,92 @@
package main

import (
"database/sql"

"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/sqlite"
homedir "github.com/mitchellh/go-homedir"
)

type Issue struct {
ID int `gorm:"primary_key"`
Number int
Title string
RepoOwner string `gorm:"column:repoOwner"`
RepoName string `gorm:column:repoName`
State string
Locked bool
Comments int
CreatedAt string `gorm:"column:createdAt"`
UpdatedAt string `gorm:"column:updatedAt"`
ClosedAt NullStringJSON `gorm:"column:closedAt"`
IsPullRequest bool `gorm:"column:isPullRequest"`
Body string
AlreadyRead bool `gorm:"column:alreadyRead"`
Merged NullBoolJSON

User *User
Labels []*Label
Assignees []*User
}

type Label struct {
ID int
Name string
Color string
Default bool
}

type User struct {
ID int
Login string
AvatarURL string
}

type Account struct {
ID int
DisplayName string `gorm:"column:displayName"`
UrlBase string `gorm:"column:urlBase"`
ApiUrlBase string `gorm:"column:apiUrlBase"`
AccessToken string `gorm:"column:accessToken"`

Channels []Channel
}

type Channel struct {
ID int
DisplayName string `gorm:"column:displayName"`
System sql.NullString
QueriesRow string `gorm:"column:queries"`
Queries []string
AccountID int `gorm:"column:accountID"`
}

func SelectAccounts() ([]Account, error) {
accounts := make([]Account, 0)
if err := gormConn.Preload("Channels").Find(&accounts).Error; err != nil {
return nil, err
}
return accounts, nil
}

func init() {
fname, err := homedir.Expand("~/.cache/korat/development.sqlite3")
if err != nil {
panic(err)
}
db, err := gorm.Open("sqlite3", fname)
if err != nil {
panic(err)
}

// Will not set CreatedAt and UpdatedAt on .Create() call
db.Callback().Create().Remove("gorm:update_time_stamp")
// Will not update UpdatedAt on .Save() call
db.Callback().Update().Remove("gorm:update_time_stamp")
db.LogMode(true)

gormConn = db
}

var gormConn *gorm.DB
18 changes: 1 addition & 17 deletions http.go
@@ -1,7 +1,6 @@
package main

import (
"database/sql"
"encoding/json"
"fmt"
"net/http"
Expand Down Expand Up @@ -32,23 +31,8 @@ func StartHTTPServer(port int) {
e.Logger.Fatal(e.Start(fmt.Sprintf(":%d", port)))
}

type ResponseAccount struct {
ID int
DisplayName string
UrlBase string
ApiUrlBase string
Channels []*ResponseChannel
}

type ResponseChannel struct {
ID int
DisplayName string
System sql.NullString
Queries []string
}

func accountsIndex(c echo.Context) error {
accounts, err := SelectAccountForAPI(c.Request().Context())
accounts, err := SelectAccounts()
if err != nil {
return err
}
Expand Down
113 changes: 28 additions & 85 deletions models.go
Expand Up @@ -13,26 +13,26 @@ import (
"github.com/google/go-github/v21/github"
)

type Account struct {
type AccountOld struct {
id int
displayName string
urlBase string
apiUrlBase string
accessToken string
}

type Channel struct {
type ChannelOld struct {
id int
displayName string
system sql.NullString
queries []string

account *Account
account *AccountOld
}

func SelectChannels(ctx context.Context) ([]Channel, error) {
res := make([]Channel, 0)
accounts := make(map[int]*Account)
func SelectChannels(ctx context.Context) ([]ChannelOld, error) {
res := make([]ChannelOld, 0)
accounts := make(map[int]*AccountOld)

rows, err := Conn.QueryContext(ctx, `
select
Expand All @@ -46,7 +46,7 @@ func SelectChannels(ctx context.Context) ([]Channel, error) {

for rows.Next() {
var accountID int
var ch Channel
var ch ChannelOld
var queries string

if err := rows.Scan(&ch.id, &ch.displayName, &ch.system, &queries, &accountID); err != nil {
Expand All @@ -60,7 +60,7 @@ func SelectChannels(ctx context.Context) ([]Channel, error) {
if a, ok := accounts[accountID]; ok {
ch.account = a
} else {
a := &Account{}
a := &AccountOld{}
err := Conn.QueryRowContext(ctx, `
select
id, displayName, urlBase, apiUrlBase, accessToken
Expand Down Expand Up @@ -117,62 +117,6 @@ func SelectChannelsUnreadCount(ctx context.Context) ([]*UnreadCount, error) {
return res, nil
}

func SelectAccountForAPI(ctx context.Context) ([]*ResponseAccount, error) {
res := make([]*ResponseAccount, 0)
rows, err := Conn.QueryContext(ctx, `
select
id, displayName, urlBase, apiUrlBase
from
accounts
;
`)
if err != nil {
return nil, err
}
defer rows.Close()

for rows.Next() {
a := &ResponseAccount{}
err := rows.Scan(&a.ID, &a.DisplayName, &a.UrlBase, &a.ApiUrlBase)
if err != nil {
return nil, err
}
channelRows, err := Conn.QueryContext(ctx, `
select
ID, DisplayName, System, Queries
from
channels
where
accountID = ?
;
`, a.ID)
if err != nil {
return nil, err
}
for channelRows.Next() {
c := &ResponseChannel{}
var queries string
err := channelRows.Scan(&c.ID, &c.DisplayName, &c.System, &queries)
if err != nil {
channelRows.Close()
return nil, err
}
err = json.Unmarshal([]byte(queries), &c.Queries)
if err != nil {
channelRows.Close()
return nil, err
}

a.Channels = append(a.Channels, c)
}
channelRows.Close()

res = append(res, a)
}

return res, nil
}

func UnreadCountForIssue(ctx context.Context, issueIDs []int) ([]*UnreadCount, error) {
issueIDsStr := make([]string, len(issueIDs))
for idx, issueID := range issueIDs {
Expand Down Expand Up @@ -266,7 +210,7 @@ func (n NullBoolJSON) MarshalJSON() ([]byte, error) {
return []byte("null"), nil
}

type Issue struct {
type IssueOld struct {
ID int
Number int
Title string
Expand All @@ -283,26 +227,26 @@ type Issue struct {
AlreadyRead bool
Merged NullBoolJSON

User *User
Labels []*Label
Assignees []*User
UserOld *UserOld
Labels []*LabelOld
Assignees []*UserOld
}

type Label struct {
type LabelOld struct {
ID int
Name string
Color string
Default bool
}

type User struct {
type UserOld struct {
ID int
Login string
AvatarURL string
}

func SelectIssues(ctx context.Context, q *SearchIssuesQuery) ([]*Issue, error) {
res := make([]*Issue, 0)
func SelectIssues(ctx context.Context, q *SearchIssuesQuery) ([]*IssueOld, error) {
res := make([]*IssueOld, 0)
additionalConds := buildFilterForSelectIssues(q.filter)

rows, err := Conn.QueryContext(ctx, fmt.Sprintf(`
Expand Down Expand Up @@ -332,11 +276,11 @@ func SelectIssues(ctx context.Context, q *SearchIssuesQuery) ([]*Issue, error) {
defer rows.Close()

for rows.Next() {
u := &User{}
i := &Issue{
Labels: []*Label{},
Assignees: []*User{},
User: u,
u := &UserOld{}
i := &IssueOld{
Labels: []*LabelOld{},
Assignees: []*UserOld{},
UserOld: u,
}
err := rows.Scan(&i.ID, &i.Number, &i.Title, &i.RepoOwner, &i.RepoName, &i.State, &i.Locked, &i.Comments, &i.CreatedAt, &i.UpdatedAt, &i.ClosedAt, &i.IsPullRequest, &i.Body, &i.AlreadyRead, &i.Merged,
&u.ID, &u.Login, &u.AvatarURL)
Expand Down Expand Up @@ -393,9 +337,9 @@ func buildFilterForSelectIssues(f *SearchIssueFilter) string {
return res
}

func includeLabelsToIssues(ctx context.Context, issues []*Issue) error {
func includeLabelsToIssues(ctx context.Context, issues []*IssueOld) error {
issueIDs := make([]string, len(issues))
issueMap := make(map[int]*Issue, len(issues))
issueMap := make(map[int]*IssueOld, len(issues))
for idx, i := range issues {
issueIDs[idx] = strconv.Itoa(i.ID)
issueMap[i.ID] = i
Expand All @@ -418,7 +362,7 @@ func includeLabelsToIssues(ctx context.Context, issues []*Issue) error {
defer rows.Close()

for rows.Next() {
label := &Label{}
label := &LabelOld{}
var issueID int

if err := rows.Scan(&label.ID, &label.Name, &label.Color, &label.Default, &issueID); err != nil {
Expand All @@ -430,9 +374,9 @@ func includeLabelsToIssues(ctx context.Context, issues []*Issue) error {
return nil
}

func includeAssigneesToIssues(ctx context.Context, issues []*Issue) error {
func includeAssigneesToIssues(ctx context.Context, issues []*IssueOld) error {
issueIDs := make([]string, len(issues))
issueMap := make(map[int]*Issue, len(issues))
issueMap := make(map[int]*IssueOld, len(issues))
for idx, i := range issues {
issueIDs[idx] = strconv.Itoa(i.ID)
issueMap[i.ID] = i
Expand All @@ -455,7 +399,7 @@ func includeAssigneesToIssues(ctx context.Context, issues []*Issue) error {
defer rows.Close()

for rows.Next() {
user := &User{}
user := &UserOld{}
var issueID int

if err := rows.Scan(&user.ID, &user.Login, &user.AvatarURL, &issueID); err != nil {
Expand Down Expand Up @@ -754,8 +698,7 @@ type AccountForGitHubAPI struct {
id int
}

func SelectAccounts(ctx context.Context) ([]*AccountForGitHubAPI, error) {

func SelectAccountsOld(ctx context.Context) ([]*AccountForGitHubAPI, error) {
rows, err := Conn.QueryContext(ctx, `select id, accessToken from accounts`)
if err != nil {
return nil, err
Expand Down

0 comments on commit eb90550

Please sign in to comment.