Skip to content

Commit

Permalink
feat(archiver): set only one default archiver per user
Browse files Browse the repository at this point in the history
  • Loading branch information
ncarlier committed Mar 22, 2019
1 parent 20876ec commit ab1fb38
Showing 1 changed file with 41 additions and 2 deletions.
43 changes: 41 additions & 2 deletions pkg/db/postgres/archiver.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,48 @@ func (pg *DB) updateArchiver(archiver model.Archiver) (*model.Archiver, error) {

// CreateOrUpdateArchiver creates or updates an archiver into the DB
func (pg *DB) CreateOrUpdateArchiver(archiver model.Archiver) (*model.Archiver, error) {
var result *model.Archiver
var err error

tx, err := pg.db.Begin()
if err != nil {
return nil, err
}

if archiver.ID != nil {
return pg.updateArchiver(archiver)
result, err = pg.updateArchiver(archiver)
} else {
result, err = pg.createArchiver(archiver)
}
if err != nil {
tx.Rollback()
return nil, err
}
if result != nil && result.IsDefault {
// Unset previous archiver default
err = pg.setDefaultArchiver(result)
if err != nil {
tx.Rollback()
return nil, err
}
}
return pg.createArchiver(archiver)
return result, tx.Commit()
}

func (pg *DB) setDefaultArchiver(archiver *model.Archiver) error {
update := map[string]interface{}{
"is_default": false,
}
query, args, _ := pg.psql.Update(
"archivers",
).SetMap(update).Where(
sq.NotEq{"id": archiver.ID},
).Where(
sq.Eq{"user_id": archiver.UserID},
).ToSql()

_, err := pg.db.Exec(query, args...)
return err
}

// GetArchiverByID get an archiver from the DB
Expand All @@ -107,6 +145,7 @@ func (pg *DB) GetArchiverByUserIDAndAlias(uid uint, alias string) (*model.Archiv
"archivers",
).Where(
sq.Eq{"user_id": uid},
).Where(
sq.Eq{"alias": alias},
).ToSql()
row := pg.db.QueryRow(query, args...)
Expand Down

0 comments on commit ab1fb38

Please sign in to comment.