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 }