From e02e60171ea056a7b68c2954967ed21caea5b407 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Wed, 28 Jan 2015 15:29:36 +0100 Subject: [PATCH] Began work on user favorites backend support & storage --- pkg/models/favorite.go | 17 +++++++++++++++ pkg/services/sqlstore/favorite.go | 34 +++++++++++++++++++++++++++++ pkg/services/sqlstore/migrations.go | 14 +++++++++++- 3 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 pkg/models/favorite.go create mode 100644 pkg/services/sqlstore/favorite.go diff --git a/pkg/models/favorite.go b/pkg/models/favorite.go new file mode 100644 index 00000000000..9d91918c6f9 --- /dev/null +++ b/pkg/models/favorite.go @@ -0,0 +1,17 @@ +package models + +type Favorite struct { + Id int64 + UserId int64 + DashboardId int64 +} + +type AddAsFavoriteCommand struct { + UserId int64 + DashboardId int64 +} + +type RemoveAsFavoriteCommand struct { + UserId int64 + DashboardId int64 +} diff --git a/pkg/services/sqlstore/favorite.go b/pkg/services/sqlstore/favorite.go new file mode 100644 index 00000000000..f2241aa678c --- /dev/null +++ b/pkg/services/sqlstore/favorite.go @@ -0,0 +1,34 @@ +package sqlstore + +import ( + "github.com/go-xorm/xorm" + + "github.com/torkelo/grafana-pro/pkg/bus" + m "github.com/torkelo/grafana-pro/pkg/models" +) + +func init() { + bus.AddHandler("sql", AddAsFavorite) + bus.AddHandler("sql", RemoveAsFavorite) +} + +func AddAsFavorite(cmd *m.AddAsFavoriteCommand) error { + return inTransaction(func(sess *xorm.Session) error { + + entity := m.Favorite{ + UserId: cmd.UserId, + DashboardId: cmd.DashboardId, + } + + _, err := sess.Insert(&entity) + return err + }) +} + +func RemoveAsFavorite(cmd *m.RemoveAsFavoriteCommand) error { + return inTransaction(func(sess *xorm.Session) error { + var rawSql = "DELETE FROM favorite WHERE user_id=? and dashboard_id=?" + _, err := sess.Exec(rawSql, cmd.UserId, cmd.DashboardId) + return err + }) +} diff --git a/pkg/services/sqlstore/migrations.go b/pkg/services/sqlstore/migrations.go index 0fddf7397d0..7ee0aa6c089 100644 --- a/pkg/services/sqlstore/migrations.go +++ b/pkg/services/sqlstore/migrations.go @@ -6,11 +6,11 @@ import . "github.com/torkelo/grafana-pro/pkg/services/sqlstore/migrator" // 1. Never change a migration that is committed and pushed to master // 2. Always add new migrations (to change or undo previous migrations) // 3. Some migraitons are not yet written (rename column, table, drop table, index etc) -// 4 func addMigrations(mg *Migrator) { addMigrationLogMigrations(mg) addUserMigrations(mg) + addFavoritesMigrations(mg) addAccountMigrations(mg) addDashboardMigration(mg) addDataSourceMigration(mg) @@ -55,6 +55,18 @@ func addUserMigrations(mg *Migrator) { Table("user").Column(&Column{Name: "rands", Type: DB_NVarchar, Length: 255, Nullable: true})) } +func addFavoritesMigrations(mg *Migrator) { + mg.AddMigration("create favorite table", new(AddTableMigration). + Name("favorite").WithColumns( + &Column{Name: "id", Type: DB_BigInt, IsPrimaryKey: true, IsAutoIncrement: true}, + &Column{Name: "user_id", Type: DB_BigInt, Nullable: false}, + &Column{Name: "dashboard_id", Type: DB_BigInt, Nullable: false}, + )) + + mg.AddMigration("add unique index favorite.user_id_dashboard_id", new(AddIndexMigration). + Table("favorite").Columns("user_id", "dashboard_id").Unique()) +} + func addAccountMigrations(mg *Migrator) { mg.AddMigration("create account table", new(AddTableMigration). Name("account").WithColumns(