@@ -121,128 +121,64 @@ func (pg *Pg) TagUpdate(ctx context.Context, id string, changes *models.TagChang
121121}
122122
123123func (pg * Pg ) TagPushToTarget (ctx context.Context , id string , target store.TagTarget , targetID string ) error {
124- // First verify the tag exists
125124 tag := new (entity.Tag )
126- err := pg .driver .NewSelect ().
127- Model (tag ).
128- Where ("id = ?" , id ).
129- Scan (ctx )
130- if err != nil {
125+ if err := pg .driver .NewSelect ().Model (tag ).Where ("id = ?" , id ).Scan (ctx ); err != nil {
131126 return fromSqlError (err )
132127 }
133128
134- var res bun.Result
135129 switch target {
136130 case store .TagTargetDevice :
137- res , err = pg .driver .NewInsert ().
138- Model (& struct {
139- bun.BaseModel `bun:"table:device_tags"`
140- DeviceID string `bun:"device_id,pk"`
141- TagID string `bun:"tag_id,pk"`
142- CreatedAt any `bun:"created_at"`
143- }{
144- DeviceID : targetID ,
145- TagID : id ,
146- CreatedAt : bun .Ident ("NOW()" ),
147- }).
148- On ("CONFLICT (device_id, tag_id) DO NOTHING" ).
149- Exec (ctx )
150- case store .TagTargetPublicKey :
151- res , err = pg .driver .NewInsert ().
152- Model (& struct {
153- bun.BaseModel `bun:"table:public_key_tags"`
154- PublicKeyID string `bun:"public_key_id,pk"`
155- TagID string `bun:"tag_id,pk"`
156- CreatedAt any `bun:"created_at"`
157- }{
158- PublicKeyID : targetID ,
159- TagID : id ,
160- CreatedAt : bun .Ident ("NOW()" ),
161- }).
162- On ("CONFLICT (public_key_id, tag_id) DO NOTHING" ).
163- Exec (ctx )
164- default :
165- return store .ErrInvalidTagTarget
166- }
131+ deviceTag := entity .NewDeviceTag (tag .ID , targetID )
132+ deviceTag .CreatedAt = clock .Now ()
167133
168- if err != nil {
169- return fromSqlError (err )
170- }
134+ if _ , err := pg .driver .NewInsert ().Model (deviceTag ).On ("CONFLICT (device_id, tag_id) DO NOTHING" ).Exec (ctx ); err != nil {
135+ return fromSqlError (err )
136+ }
137+ case store .TagTargetPublicKey :
138+ publickeyTag := entity .NewPublicKeyTag (tag .ID , targetID )
139+ publickeyTag .CreatedAt = clock .Now ()
171140
172- // Check if the target exists by verifying we could insert/update
173- if rows , _ := res .RowsAffected (); rows == 0 {
174- // Could be because relationship already exists or target doesn't exist
175- // We need to check if target exists
176- switch target {
177- case store .TagTargetDevice :
178- count , err := pg .driver .NewSelect ().
179- Model ((* entity .Device )(nil )).
180- Where ("id = ?" , targetID ).
181- Count (ctx )
182- if err != nil {
183- return fromSqlError (err )
184- }
185- if count == 0 {
186- return store .ErrNoDocuments
187- }
188- case store .TagTargetPublicKey :
189- count , err := pg .driver .NewSelect ().
190- Model ((* entity .PublicKey )(nil )).
191- Where ("id = ?" , targetID ).
192- Count (ctx )
193- if err != nil {
194- return fromSqlError (err )
195- }
196- if count == 0 {
197- return store .ErrNoDocuments
198- }
141+ if _ , err := pg .driver .NewInsert ().Model (publickeyTag ).On ("CONFLICT (public_key_id, tag_id) DO NOTHING" ).Exec (ctx ); err != nil {
142+ return fromSqlError (err )
199143 }
200144 }
201145
202146 return nil
203147}
204148
205149func (pg * Pg ) TagPullFromTarget (ctx context.Context , id string , target store.TagTarget , targetIDs ... string ) error {
206- // First verify the tag exists
207150 tag := new (entity.Tag )
208- err := pg .driver .NewSelect ().
209- Model (tag ).
210- Where ("id = ?" , id ).
211- Scan (ctx )
212- if err != nil {
151+ if err := pg .driver .NewSelect ().Model (tag ).Where ("id = ?" , id ).Scan (ctx ); err != nil {
213152 return fromSqlError (err )
214153 }
215154
216- var res bun.Result
217155 switch target {
218156 case store .TagTargetDevice :
219- query := pg .driver .NewDelete ().
220- Model ((* struct {
221- bun.BaseModel `bun:"table:device_tags"`
222- })(nil )).
223- Where ("tag_id = ?" , id )
224-
157+ query := pg .driver .NewDelete ().Model ((* entity .DeviceTag )(nil )).Where ("tag_id = ?" , id )
225158 if len (targetIDs ) > 0 {
226159 query = query .Where ("device_id IN (?)" , bun .In (targetIDs ))
227160 }
228161
229- res , err = query .Exec (ctx )
162+ if _ , err := query .Exec (ctx ); err != nil {
163+ return fromSqlError (err )
164+ }
230165 case store .TagTargetPublicKey :
231- query := pg .driver .NewDelete ().
232- Model ((* struct {
233- bun.BaseModel `bun:"table:public_key_tags"`
234- })(nil )).
235- Where ("tag_id = ?" , id )
236-
166+ query := pg .driver .NewDelete ().Model ((* entity .PublicKeyTag )(nil )).Where ("tag_id = ?" , id )
237167 if len (targetIDs ) > 0 {
238168 query = query .Where ("public_key_id IN (?)" , bun .In (targetIDs ))
239169 }
240170
241- res , err = query .Exec (ctx )
242- default :
243- return store . ErrInvalidTagTarget
171+ if _ , err : = query .Exec (ctx ); err != nil {
172+ return fromSqlError ( err )
173+ }
244174 }
245175
176+ return nil
177+ }
178+
179+ func (pg * Pg ) TagDelete (ctx context.Context , id string ) error {
180+ // Cascade will delete the relationships
181+ res , err := pg .driver .NewDelete ().Model ((* entity .Tag )(nil )).Where ("id = ?" , id ).Exec (ctx )
246182 if err != nil {
247183 return fromSqlError (err )
248184 }
@@ -253,43 +189,3 @@ func (pg *Pg) TagPullFromTarget(ctx context.Context, id string, target store.Tag
253189
254190 return nil
255191}
256-
257- func (pg * Pg ) TagDelete (ctx context.Context , id string ) error {
258- return pg .driver .RunInTx (ctx , nil , func (ctx context.Context , tx bun.Tx ) error {
259- // Delete the tag itself
260- res , err := tx .NewDelete ().
261- Model ((* entity .Tag )(nil )).
262- Where ("id = ?" , id ).
263- Exec (ctx )
264- if err != nil {
265- return fromSqlError (err )
266- }
267-
268- if rows , _ := res .RowsAffected (); rows == 0 {
269- return store .ErrNoDocuments
270- }
271-
272- // Delete all relationships (CASCADE should handle this, but being explicit)
273- _ , err = tx .NewDelete ().
274- Model ((* struct {
275- bun.BaseModel `bun:"table:device_tags"`
276- })(nil )).
277- Where ("tag_id = ?" , id ).
278- Exec (ctx )
279- if err != nil {
280- return fromSqlError (err )
281- }
282-
283- _ , err = tx .NewDelete ().
284- Model ((* struct {
285- bun.BaseModel `bun:"table:public_key_tags"`
286- })(nil )).
287- Where ("tag_id = ?" , id ).
288- Exec (ctx )
289- if err != nil {
290- return fromSqlError (err )
291- }
292-
293- return nil
294- })
295- }
0 commit comments