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() }