hikan.ru/mvc/models/db.go

92 lines
2.3 KiB
Go
Raw Normal View History

2025-02-02 16:43:55 +03:00
package models
import (
"database/sql"
"main/tools"
"slices"
_ "modernc.org/sqlite"
)
// UpdatePost обновляет существующий пост по переданному ID
func UpdatePost(db *sql.DB, id int, author, title, body, tags string) error {
updateTime := tools.GetCurTime()
_, err := db.Exec("UPDATE posts SET author = ?, title = ?, body = ?, update_time = ?, tags = ? WHERE id = ?",
author, title, body, updateTime, tags, id)
return err
}
// AddPost добавляет новый пост
func AddPost(db *sql.DB, author, title, body, tags string) error {
postingTime, updateTime := tools.GetCurTime(), tools.GetCurTime()
_, err := db.Exec("INSERT INTO posts (author, title, body, posting_time, update_time, tags) VALUES (?, ?, ?, ?, ?, ?)",
author, title, body, postingTime, updateTime, tags)
return err
}
// DelPost удаляет пост
func DelPost(db *sql.DB, postID int) error {
_, err := db.Exec("DELETE FROM posts WHERE id = ?", postID)
if err != nil {
return err
}
_, err = db.Exec("UPDATE posts SET id = id - 1 WHERE id > ?", postID)
return err
}
// Извлекает список постов из базы данных
func PostsListFromDB(db *sql.DB) (Posts, error) {
rows, err := db.Query("SELECT * FROM posts")
if err != nil {
return nil, err
}
defer rows.Close()
var posts Posts
for rows.Next() {
var post Post
if err := rows.Scan(&post.ID,
&post.Author,
&post.Title,
&post.Body,
&post.PostingTime,
&post.UpdateTime,
&post.Tags); err != nil {
return nil, err
}
posts = append(posts, post)
}
slices.Reverse(posts)
return posts, nil
}
// AccessCheck проверяет доступ пользователя
func AccessCheck(db *sql.DB, nick, password string) (int, error) {
hashed, err := tools.Sha256HashString(password + "chak_chak")
if err != nil {
return 0, err
}
var userLevel int
err = db.QueryRow("SELECT LVL FROM users WHERE NICK = ? AND PASS = ?", nick, hashed).Scan(&userLevel)
if err != nil {
if err == sql.ErrNoRows {
return 0, nil // пользователь не найден
}
return 0, err
}
return userLevel, nil
}
func DBConnect(path string) (*sql.DB, error) {
db, err := sql.Open("sqlite", "./"+path)
if err != nil {
return nil, err
}
return db, nil
}
func DBClose(db *sql.DB) {
db.Close()
}