2024-09-09 17:33:20 +02:00
package models
2025-01-06 12:03:37 +01:00
import (
"brainminder.speedtech.it/internal/database"
"database/sql"
"errors"
)
2024-09-09 17:33:20 +02:00
type ItemShareModel struct {
2025-03-09 17:07:49 +01:00
* BaseModel
2024-09-09 17:33:20 +02:00
}
type ItemShare struct {
Id int64 ` db:"id" `
Token string ` db:"token" `
2025-01-06 17:07:18 +01:00
ItemId int64 ` db:"item_id" `
PermissionEdit int ` db:"permission_edit" `
StartDatetime string ` db:"start_datetime" `
EndDatetime string ` db:"end_datetime" `
2025-01-06 12:03:37 +01:00
Password string ` db:"password" `
2025-03-09 17:07:49 +01:00
ItemTitle string ` db:"item_title" `
}
func ( model * ItemShareModel ) One ( id int64 ) ( * ItemShare , bool , error ) {
ctx , cancel := database . GetContext ( )
defer cancel ( )
var row ItemShare
query := ` SELECT bmi . title AS item_title , bmis . * FROM bm_item_shares bmis
INNER JOIN bm_item bmi ON bmis . item_id = bmi . id WHERE bmis . id = $ 1 `
err := model . DB . GetContext ( ctx , & row , query , id )
if errors . Is ( err , sql . ErrNoRows ) {
return nil , false , nil
}
return & row , true , err
2024-09-09 17:33:20 +02:00
}
func ( model * ItemShareModel ) Create ( ItemShare * ItemShare ) ( int64 , error ) {
ctx , cancel := database . GetContext ( )
defer cancel ( )
2025-01-06 17:07:18 +01:00
query := ` INSERT INTO bm_item_shares (token, item_id, permission_edit, start_datetime, end_datetime, password) VALUES (:token, :item_id, :permission_edit, :start_datetime, :end_datetime, :password) `
2024-09-09 17:33:20 +02:00
result , err := model . DB . NamedExecContext ( ctx , query , ItemShare )
if err != nil {
return 0 , err
}
id , err := result . LastInsertId ( )
if err != nil {
return 0 , err
}
return id , err
}
2025-01-06 12:03:37 +01:00
2025-03-09 17:07:49 +01:00
func ( model * ItemShareModel ) Update ( ItemShare * ItemShare ) error {
ctx , cancel := database . GetContext ( )
defer cancel ( )
query := ` UPDATE bm_item_shares SET token=:token, permission_edit=:permission_edit, start_datetime=:start_datetime, end_datetime=:end_datetime WHERE id = :id `
_ , err := model . DB . NamedExecContext ( ctx , query , ItemShare )
if err != nil {
return err
}
return err
}
2025-01-06 12:03:37 +01:00
func ( model * ItemShareModel ) Delete ( id int ) ( bool , error ) {
ctx , cancel := database . GetContext ( )
defer cancel ( )
2025-01-06 17:07:18 +01:00
_ , err := model . DB . ExecContext ( ctx , ` DELETE FROM bm_item_shares WHERE id = $1 ` , id )
2025-01-06 12:03:37 +01:00
if errors . Is ( err , sql . ErrNoRows ) {
return false , nil
}
return true , err
}