feat(api): 初始化笔记应用后端基础架构
- 添加环境配置文件 .env.example 包含数据库、JWT、CORS等配置 - 创建 .gitignore 文件忽略敏感文件和临时文件 - 配置 Apache 重写规则支持路由转发 - 实现 JWT 认证中间件提供用户身份验证功能 - 添加 MySQL 数据库初始化脚本包含分组、图片、笔记表结构
This commit is contained in:
122
biji-php/src/Models/MarkdownFile.php
Normal file
122
biji-php/src/Models/MarkdownFile.php
Normal file
@@ -0,0 +1,122 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Utils\Database;
|
||||
use PDO;
|
||||
|
||||
class MarkdownFile
|
||||
{
|
||||
private $db;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->db = Database::getInstance()->getConnection();
|
||||
}
|
||||
|
||||
public function findById($id, $includeDeleted = false)
|
||||
{
|
||||
$sql = "SELECT * FROM markdown_file WHERE id = ?";
|
||||
if (!$includeDeleted) {
|
||||
$sql .= " AND is_deleted = 0";
|
||||
}
|
||||
$stmt = $this->db->prepare($sql);
|
||||
$stmt->execute([$id]);
|
||||
return $stmt->fetch();
|
||||
}
|
||||
|
||||
public function getAll()
|
||||
{
|
||||
$stmt = $this->db->prepare("SELECT * FROM markdown_file WHERE is_deleted = 0 ORDER BY updated_at DESC");
|
||||
$stmt->execute();
|
||||
return $stmt->fetchAll();
|
||||
}
|
||||
|
||||
public function getByGroupingId($groupingId)
|
||||
{
|
||||
$stmt = $this->db->prepare(
|
||||
"SELECT id, title, file_name, created_at, updated_at, is_private, grouping_id
|
||||
FROM markdown_file
|
||||
WHERE grouping_id = ? AND is_deleted = 0
|
||||
ORDER BY updated_at DESC"
|
||||
);
|
||||
$stmt->execute([$groupingId]);
|
||||
return $stmt->fetchAll();
|
||||
}
|
||||
|
||||
public function searchByTitle($keyword)
|
||||
{
|
||||
$stmt = $this->db->prepare(
|
||||
"SELECT * FROM markdown_file
|
||||
WHERE title LIKE ? AND is_deleted = 0
|
||||
ORDER BY updated_at DESC"
|
||||
);
|
||||
$stmt->execute(['%' . $keyword . '%']);
|
||||
return $stmt->fetchAll();
|
||||
}
|
||||
|
||||
public function getRecent($limit = 12)
|
||||
{
|
||||
$stmt = $this->db->prepare(
|
||||
"SELECT id, title, file_name, created_at, updated_at, is_private, grouping_id
|
||||
FROM markdown_file
|
||||
WHERE is_deleted = 0
|
||||
ORDER BY updated_at DESC
|
||||
LIMIT ?"
|
||||
);
|
||||
$stmt->execute([$limit]);
|
||||
return $stmt->fetchAll();
|
||||
}
|
||||
|
||||
public function update($id, $data)
|
||||
{
|
||||
$fields = [];
|
||||
$values = [];
|
||||
|
||||
if (isset($data['title'])) {
|
||||
$fields[] = "title = ?";
|
||||
$values[] = $data['title'];
|
||||
}
|
||||
if (isset($data['content'])) {
|
||||
$fields[] = "content = ?";
|
||||
$values[] = $data['content'];
|
||||
}
|
||||
if (isset($data['grouping_id'])) {
|
||||
$fields[] = "grouping_id = ?";
|
||||
$values[] = $data['grouping_id'];
|
||||
}
|
||||
if (isset($data['is_private'])) {
|
||||
$fields[] = "is_private = ?";
|
||||
$values[] = $data['is_private'];
|
||||
}
|
||||
|
||||
$fields[] = "updated_at = NOW()";
|
||||
$values[] = $id;
|
||||
|
||||
$sql = "UPDATE markdown_file SET " . implode(", ", $fields) . " WHERE id = ?";
|
||||
$stmt = $this->db->prepare($sql);
|
||||
return $stmt->execute($values);
|
||||
}
|
||||
|
||||
public function softDelete($id, $userId)
|
||||
{
|
||||
$stmt = $this->db->prepare(
|
||||
"UPDATE markdown_file SET is_deleted = 1, deleted_at = NOW(), deleted_by = ? WHERE id = ?"
|
||||
);
|
||||
return $stmt->execute([$userId, $id]);
|
||||
}
|
||||
|
||||
public function restore($id)
|
||||
{
|
||||
$stmt = $this->db->prepare(
|
||||
"UPDATE markdown_file SET is_deleted = 0, deleted_at = NULL, deleted_by = NULL WHERE id = ?"
|
||||
);
|
||||
return $stmt->execute([$id]);
|
||||
}
|
||||
|
||||
public function permanentDelete($id)
|
||||
{
|
||||
$stmt = $this->db->prepare("DELETE FROM markdown_file WHERE id = ?");
|
||||
return $stmt->execute([$id]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user