diff --git a/db/channels.go b/db/channels.go index 00cd8f2..835e977 100644 --- a/db/channels.go +++ b/db/channels.go @@ -3,25 +3,20 @@ package db import ( "context" - "github.com/lib/pq" - "gitea.theedgeofrage.com/TheEdgeOfRage/ytrssil-api/models" ) -var createChannelQuery = `INSERT INTO channels (id, name) VALUES ($1, $2)` +var createChannelQuery = `INSERT INTO channels (id, name) VALUES ($1, $2) ON CONFLICT DO NOTHING` func (d *postgresDB) CreateChannel(ctx context.Context, channel models.Channel) error { - _, err := d.db.ExecContext(ctx, createChannelQuery, channel.ID, channel.Name) + resp, err := d.db.ExecContext(ctx, createChannelQuery, channel.ID, channel.Name) if err != nil { - if pgerr, ok := err.(*pq.Error); ok { - if pgerr.Code == "23505" { - return ErrChannelExists - } - } - d.l.Log("level", "ERROR", "function", "db.CreateChannel", "error", err) return err } + if affected, _ := resp.RowsAffected(); affected == 0 { + return ErrChannelExists + } return nil } @@ -74,19 +69,23 @@ func (d *postgresDB) GetChannelSubscribers(ctx context.Context, channelID string return subs, nil } -var subscribeUserToChannelQuery = `INSERT INTO user_subscriptions (username, channel_id) VALUES ($1, $2)` +var subscribeUserToChannelQuery = ` +INSERT INTO user_subscriptions ( + username + , channel_id +) VALUES ($1, $2) +ON CONFLICT DO NOTHING +` func (d *postgresDB) SubscribeUserToChannel(ctx context.Context, username string, channelID string) error { - _, err := d.db.ExecContext(ctx, subscribeUserToChannelQuery, username, channelID) + resp, err := d.db.ExecContext(ctx, subscribeUserToChannelQuery, username, channelID) if err != nil { - if pgerr, ok := err.(*pq.Error); ok { - if pgerr.Code == "23505" { - return ErrAlreadySubscribed - } - } d.l.Log("level", "ERROR", "function", "db.SubscribeUserToChannel", "error", err) return err } + if affected, _ := resp.RowsAffected(); affected == 0 { + return ErrAlreadySubscribed + } return nil } diff --git a/db/users.go b/db/users.go index 64bb9f5..c70cae8 100644 --- a/db/users.go +++ b/db/users.go @@ -6,7 +6,6 @@ import ( "errors" "github.com/alexedwards/argon2id" - "github.com/lib/pq" "gitea.theedgeofrage.com/TheEdgeOfRage/ytrssil-api/models" ) @@ -35,20 +34,19 @@ func (d *postgresDB) AuthenticateUser(ctx context.Context, user models.User) (bo return match, nil } -var createUserQuery = `INSERT INTO users (username, password) VALUES ($1, $2)` +var createUserQuery = `INSERT INTO users (username, password) VALUES ($1, $2) ON CONFLICT DO NOTHING` func (d *postgresDB) CreateUser(ctx context.Context, user models.User) error { - _, err := d.db.ExecContext(ctx, createUserQuery, user.Username, user.Password) + resp, err := d.db.ExecContext(ctx, createUserQuery, user.Username, user.Password) if err != nil { - if pgerr, ok := err.(*pq.Error); ok { - if pgerr.Code == "23505" { - return ErrUserExists - } - } d.l.Log("level", "ERROR", "function", "db.CreateUser", "error", err) return err } + if affected, _ := resp.RowsAffected(); affected == 0 { + return ErrUserExists + } + return nil } diff --git a/db/videos.go b/db/videos.go index 4630f3b..ee8e82e 100644 --- a/db/videos.go +++ b/db/videos.go @@ -5,7 +5,6 @@ import ( "time" "gitea.theedgeofrage.com/TheEdgeOfRage/ytrssil-api/models" - "github.com/lib/pq" ) var getNewVideosQuery = ` @@ -98,24 +97,30 @@ func (d *postgresDB) GetWatchedVideos(ctx context.Context, username string) ([]m return videos, nil } -var addVideoQuery = `INSERT INTO videos (id, title, published_timestamp, channel_id) VALUES ($1, $2, $3, $4)` +var addVideoQuery = ` +INSERT INTO videos ( + id + , title + , published_timestamp + , channel_id +) VALUES ($1, $2, $3, $4) +ON CONFLICT DO NOTHING +` func (d *postgresDB) AddVideo(ctx context.Context, video models.Video, channelID string) error { - _, err := d.db.ExecContext(ctx, addVideoQuery, video.ID, video.Title, video.PublishedTime, channelID) + resp, err := d.db.ExecContext(ctx, addVideoQuery, video.ID, video.Title, video.PublishedTime, channelID) if err != nil { - if pgerr, ok := err.(*pq.Error); ok { - if pgerr.Code == "23505" { - return ErrVideoExists - } - } d.l.Log("level", "ERROR", "function", "db.AddVideo", "call", "sql.Exec", "error", err) return err } + if affected, _ := resp.RowsAffected(); affected == 0 { + return ErrVideoExists + } return nil } -var addVideoToUserQuery = `INSERT INTO user_videos (username, video_id) VALUES ($1, $2)` +var addVideoToUserQuery = `INSERT INTO user_videos (username, video_id) VALUES ($1, $2) ON CONFLICT DO NOTHING` func (d *postgresDB) AddVideoToUser(ctx context.Context, username string, videoID string) error { _, err := d.db.ExecContext(ctx, addVideoToUserQuery, username, videoID)