Diff
1diff --git a/db/channels.go b/db/channels.go
2index 00cd8f20cbd2891711f900333b4e7015533eddfb..835e9773cf698f35a8b857629eecc3f757e90df9 100644
3--- a/db/channels.go
4+++ b/db/channels.go
5@@ -3,25 +3,20 @@ package db
6 import (
7 "context"
8
9- "github.com/lib/pq"
10-
11 "gitea.theedgeofrage.com/TheEdgeOfRage/ytrssil-api/models"
12 )
13
14-var createChannelQuery = `INSERT INTO channels (id, name) VALUES ($1, $2)`
15+var createChannelQuery = `INSERT INTO channels (id, name) VALUES ($1, $2) ON CONFLICT DO NOTHING`
16
17 func (d *postgresDB) CreateChannel(ctx context.Context, channel models.Channel) error {
18- _, err := d.db.ExecContext(ctx, createChannelQuery, channel.ID, channel.Name)
19+ resp, err := d.db.ExecContext(ctx, createChannelQuery, channel.ID, channel.Name)
20 if err != nil {
21- if pgerr, ok := err.(*pq.Error); ok {
22- if pgerr.Code == "23505" {
23- return ErrChannelExists
24- }
25- }
26-
27 d.l.Log("level", "ERROR", "function", "db.CreateChannel", "error", err)
28 return err
29 }
30+ if affected, _ := resp.RowsAffected(); affected == 0 {
31+ return ErrChannelExists
32+ }
33
34 return nil
35 }
36@@ -74,19 +69,23 @@ func (d *postgresDB) GetChannelSubscribers(ctx context.Context, channelID string
37 return subs, nil
38 }
39
40-var subscribeUserToChannelQuery = `INSERT INTO user_subscriptions (username, channel_id) VALUES ($1, $2)`
41+var subscribeUserToChannelQuery = `
42+INSERT INTO user_subscriptions (
43+ username
44+ , channel_id
45+) VALUES ($1, $2)
46+ON CONFLICT DO NOTHING
47+`
48
49 func (d *postgresDB) SubscribeUserToChannel(ctx context.Context, username string, channelID string) error {
50- _, err := d.db.ExecContext(ctx, subscribeUserToChannelQuery, username, channelID)
51+ resp, err := d.db.ExecContext(ctx, subscribeUserToChannelQuery, username, channelID)
52 if err != nil {
53- if pgerr, ok := err.(*pq.Error); ok {
54- if pgerr.Code == "23505" {
55- return ErrAlreadySubscribed
56- }
57- }
58 d.l.Log("level", "ERROR", "function", "db.SubscribeUserToChannel", "error", err)
59 return err
60 }
61+ if affected, _ := resp.RowsAffected(); affected == 0 {
62+ return ErrAlreadySubscribed
63+ }
64
65 return nil
66 }
67diff --git a/db/users.go b/db/users.go
68index 64bb9f53bda323837b09526c5bd5c1ef904fbdd0..c70cae8c0e174117d19bdd7104d834429f7bb652 100644
69--- a/db/users.go
70+++ b/db/users.go
71@@ -6,7 +6,6 @@ import (
72 "errors"
73
74 "github.com/alexedwards/argon2id"
75- "github.com/lib/pq"
76
77 "gitea.theedgeofrage.com/TheEdgeOfRage/ytrssil-api/models"
78 )
79@@ -35,20 +34,19 @@ func (d *postgresDB) AuthenticateUser(ctx context.Context, user models.User) (bo
80 return match, nil
81 }
82
83-var createUserQuery = `INSERT INTO users (username, password) VALUES ($1, $2)`
84+var createUserQuery = `INSERT INTO users (username, password) VALUES ($1, $2) ON CONFLICT DO NOTHING`
85
86 func (d *postgresDB) CreateUser(ctx context.Context, user models.User) error {
87- _, err := d.db.ExecContext(ctx, createUserQuery, user.Username, user.Password)
88+ resp, err := d.db.ExecContext(ctx, createUserQuery, user.Username, user.Password)
89 if err != nil {
90- if pgerr, ok := err.(*pq.Error); ok {
91- if pgerr.Code == "23505" {
92- return ErrUserExists
93- }
94- }
95 d.l.Log("level", "ERROR", "function", "db.CreateUser", "error", err)
96 return err
97 }
98
99+ if affected, _ := resp.RowsAffected(); affected == 0 {
100+ return ErrUserExists
101+ }
102+
103 return nil
104 }
105
106diff --git a/db/videos.go b/db/videos.go
107index 4630f3ba94e82f2db143a275540ee7c97d626344..ee8e82e611c0024ea7e9dffde77c7de1d3207ba2 100644
108--- a/db/videos.go
109+++ b/db/videos.go
110@@ -5,7 +5,6 @@ import (
111 "time"
112
113 "gitea.theedgeofrage.com/TheEdgeOfRage/ytrssil-api/models"
114- "github.com/lib/pq"
115 )
116
117 var getNewVideosQuery = `
118@@ -98,24 +97,30 @@ func (d *postgresDB) GetWatchedVideos(ctx context.Context, username string) ([]m
119 return videos, nil
120 }
121
122-var addVideoQuery = `INSERT INTO videos (id, title, published_timestamp, channel_id) VALUES ($1, $2, $3, $4)`
123+var addVideoQuery = `
124+INSERT INTO videos (
125+ id
126+ , title
127+ , published_timestamp
128+ , channel_id
129+) VALUES ($1, $2, $3, $4)
130+ON CONFLICT DO NOTHING
131+`
132
133 func (d *postgresDB) AddVideo(ctx context.Context, video models.Video, channelID string) error {
134- _, err := d.db.ExecContext(ctx, addVideoQuery, video.ID, video.Title, video.PublishedTime, channelID)
135+ resp, err := d.db.ExecContext(ctx, addVideoQuery, video.ID, video.Title, video.PublishedTime, channelID)
136 if err != nil {
137- if pgerr, ok := err.(*pq.Error); ok {
138- if pgerr.Code == "23505" {
139- return ErrVideoExists
140- }
141- }
142 d.l.Log("level", "ERROR", "function", "db.AddVideo", "call", "sql.Exec", "error", err)
143 return err
144 }
145+ if affected, _ := resp.RowsAffected(); affected == 0 {
146+ return ErrVideoExists
147+ }
148
149 return nil
150 }
151
152-var addVideoToUserQuery = `INSERT INTO user_videos (username, video_id) VALUES ($1, $2)`
153+var addVideoToUserQuery = `INSERT INTO user_videos (username, video_id) VALUES ($1, $2) ON CONFLICT DO NOTHING`
154
155 func (d *postgresDB) AddVideoToUser(ctx context.Context, username string, videoID string) error {
156 _, err := d.db.ExecContext(ctx, addVideoToUserQuery, username, videoID)