kv-tube/backend/services/subscription.go

72 lines
1.6 KiB
Go

package services
import (
"log"
"kvtube-go/models"
)
type Subscription struct {
ID int `json:"id"`
ChannelID string `json:"channel_id"`
ChannelName string `json:"channel_name"`
ChannelAvatar string `json:"channel_avatar"`
}
func SubscribeChannel(channelID, channelName, channelAvatar string) error {
_, err := models.DB.Exec(
`INSERT OR IGNORE INTO subscriptions (user_id, channel_id, channel_name, channel_avatar) VALUES (1, ?, ?, ?)`,
channelID, channelName, channelAvatar,
)
if err != nil {
log.Printf("Error subscribing to channel: %v", err)
return err
}
return nil
}
func UnsubscribeChannel(channelID string) error {
_, err := models.DB.Exec(
`DELETE FROM subscriptions WHERE user_id = 1 AND channel_id = ?`,
channelID,
)
if err != nil {
log.Printf("Error unsubscribing from channel: %v", err)
return err
}
return nil
}
func IsSubscribed(channelID string) (bool, error) {
var count int
err := models.DB.QueryRow(
`SELECT COUNT(*) FROM subscriptions WHERE user_id = 1 AND channel_id = ?`,
channelID,
).Scan(&count)
if err != nil {
return false, err
}
return count > 0, nil
}
func GetSubscriptions() ([]Subscription, error) {
rows, err := models.DB.Query(
`SELECT id, channel_id, channel_name, channel_avatar FROM subscriptions WHERE user_id = 1 ORDER BY timestamp DESC`,
)
if err != nil {
log.Printf("Error querying subscriptions: %v", err)
return nil, err
}
defer rows.Close()
var subs []Subscription
for rows.Next() {
var s Subscription
if err := rows.Scan(&s.ID, &s.ChannelID, &s.ChannelName, &s.ChannelAvatar); err != nil {
continue
}
subs = append(subs, s)
}
return subs, nil
}