kv-tube/backend/services/subscription.go
KV-Tube Deployer 95cfe06f2c
Some checks failed
CI / lint (push) Failing after 6s
CI / test (push) Failing after 1s
Docker Build & Push / build (push) Failing after 1s
CI / build (push) Has been skipped
chore: setup Dockerfiles and CI for Forgejo and Synology
2026-02-22 17:29:42 +07:00

72 lines
1.6 KiB
Go
Executable file

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
}