92 lines
2.3 KiB
Go
92 lines
2.3 KiB
Go
|
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()
|
||
|
}
|