62 lines
1.7 KiB
Go
62 lines
1.7 KiB
Go
package models
|
|
|
|
import "database/sql"
|
|
|
|
type Like struct {
|
|
ID int
|
|
PostID int
|
|
UserID int
|
|
Type string // "like" or "dislike"
|
|
}
|
|
|
|
func GetLikesByPostID(db *sql.DB, postID int) ([]Like, error) {
|
|
query := "SELECT id, post_id, user_id, type FROM likes WHERE post_id = ?"
|
|
rows, err := db.Query(query, postID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
|
|
var likes []Like
|
|
for rows.Next() {
|
|
like := Like{}
|
|
err := rows.Scan(&like.ID, &like.PostID, &like.UserID, &like.Type)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
likes = append(likes, like)
|
|
}
|
|
return likes, nil
|
|
}
|
|
|
|
func GetLikeByPostAndUser(db *sql.DB, postID, userID int) (*Like, error) {
|
|
query := "SELECT id, post_id, user_id, type FROM likes WHERE post_id = ? AND user_id = ?"
|
|
row := db.QueryRow(query, postID, userID)
|
|
like := &Like{}
|
|
err := row.Scan(&like.ID, &like.PostID, &like.UserID, &like.Type)
|
|
if err == sql.ErrNoRows {
|
|
return nil, nil
|
|
}
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return like, nil
|
|
}
|
|
|
|
func CreateLike(db *sql.DB, like Like) error {
|
|
query := "INSERT INTO likes (post_id, user_id, type) VALUES (?, ?, ?)"
|
|
_, err := db.Exec(query, like.PostID, like.UserID, like.Type)
|
|
return err
|
|
}
|
|
|
|
func UpdateLikeType(db *sql.DB, postID, userID int, likeType string) error {
|
|
query := "UPDATE likes SET type = ? WHERE post_id = ? AND user_id = ?"
|
|
_, err := db.Exec(query, likeType, postID, userID)
|
|
return err
|
|
}
|
|
|
|
func DeleteLike(db *sql.DB, postID, userID int) error {
|
|
query := "DELETE FROM likes WHERE post_id = ? AND user_id = ?"
|
|
_, err := db.Exec(query, postID, userID)
|
|
return err
|
|
} |