mirror of
https://github.com/mainflux/mainflux.git
synced 2025-04-29 13:49:28 +08:00

* Add repo to Notify Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Remove notify Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Add initial repo implementation Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Add Subscriptions repo implementation Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Add working version of main method Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Add Notifier API Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Add API layer Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Add Notifier interface Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix SMTP notifier main Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix email sending Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix main log Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Add Readme and fix env vars Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Update README Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Remove commented code Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Rename notifiers to notify Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Move Consumer API to writers Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix contact naming Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix spacing in init.go Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix API Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Add mocks Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Add initial service test Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Use pagination Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Update List method Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix listing Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Rename SubscriptionPage to Page Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Finish service tests Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Add DB tests Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Add API tests Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Add more API tests Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Remove Things dependency Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Add API docs Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Add docs Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix Things references Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix AuthN typo Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix linter warnings Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Add license comments Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix test order Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Use service error for wrappers Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix repo setup test Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Use total const in tests Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Use constant contacts Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix code formatting Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Rename notifier implementation Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Rename Notify to Notifiers Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Resolve remarks Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix naming and docs Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix docker-compose Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Rename Subscriptions to Notifiers service Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix logging Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix formatting and typo Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Resolve remarks Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com> * Fix topic request Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com>
71 lines
2.0 KiB
Go
71 lines
2.0 KiB
Go
// Copyright (c) Mainflux
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package postgres
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
|
|
"github.com/jmoiron/sqlx"
|
|
"github.com/lib/pq"
|
|
notifiers "github.com/mainflux/mainflux/consumers/notifiers"
|
|
"github.com/mainflux/mainflux/pkg/errors"
|
|
"github.com/opentracing/opentracing-go"
|
|
)
|
|
|
|
var _ Database = (*database)(nil)
|
|
|
|
type database struct {
|
|
db *sqlx.DB
|
|
}
|
|
|
|
// Database provides a database interface
|
|
type Database interface {
|
|
NamedExecContext(context.Context, string, interface{}) (sql.Result, error)
|
|
QueryRowxContext(context.Context, string, ...interface{}) *sqlx.Row
|
|
NamedQueryContext(context.Context, string, interface{}) (*sqlx.Rows, error)
|
|
GetContext(context.Context, interface{}, string, ...interface{}) error
|
|
}
|
|
|
|
// NewDatabase creates a SubscriptionsDatabase instance
|
|
func NewDatabase(db *sqlx.DB) Database {
|
|
return &database{
|
|
db: db,
|
|
}
|
|
}
|
|
|
|
func (dm database) NamedExecContext(ctx context.Context, query string, args interface{}) (sql.Result, error) {
|
|
addSpanTags(ctx, query)
|
|
result, err := dm.db.NamedExecContext(ctx, query, args)
|
|
if pqErr, ok := err.(*pq.Error); ok && errDuplicate == pqErr.Code.Name() {
|
|
return result, errors.Wrap(notifiers.ErrConflict, err)
|
|
}
|
|
return result, err
|
|
}
|
|
|
|
func (dm database) QueryRowxContext(ctx context.Context, query string, args ...interface{}) *sqlx.Row {
|
|
addSpanTags(ctx, query)
|
|
return dm.db.QueryRowxContext(ctx, query, args...)
|
|
}
|
|
|
|
func (dm database) NamedQueryContext(ctx context.Context, query string, args interface{}) (*sqlx.Rows, error) {
|
|
addSpanTags(ctx, query)
|
|
return dm.db.NamedQueryContext(ctx, query, args)
|
|
}
|
|
|
|
func (dm database) GetContext(ctx context.Context, dest interface{}, query string, args ...interface{}) error {
|
|
addSpanTags(ctx, query)
|
|
return dm.db.GetContext(ctx, dest, query, args...)
|
|
}
|
|
|
|
func addSpanTags(ctx context.Context, query string) {
|
|
span := opentracing.SpanFromContext(ctx)
|
|
if span != nil {
|
|
span.SetTag("sql.statement", query)
|
|
span.SetTag("span.kind", "client")
|
|
span.SetTag("peer.service", "postgres")
|
|
span.SetTag("db.type", "sql")
|
|
}
|
|
}
|