feat(api): 初始化笔记应用后端基础架构

- 添加环境配置文件 .env.example 包含数据库、JWT、CORS等配置
- 创建 .gitignore 文件忽略敏感文件和临时文件
- 配置 Apache 重写规则支持路由转发
- 实现 JWT 认证中间件提供用户身份验证功能
- 添加 MySQL 数据库初始化脚本包含分组、图片、笔记表结构
This commit is contained in:
ikmkj
2026-01-26 08:49:10 +08:00
parent 0426ad22b7
commit 90f63d9df1
31 changed files with 1898 additions and 0 deletions

View File

@@ -0,0 +1,15 @@
<?php
return [
'host' => $_ENV['DB_HOST'] ?? 'localhost',
'port' => $_ENV['DB_PORT'] ?? '3306',
'database' => $_ENV['DB_NAME'] ?? 'biji_db',
'username' => $_ENV['DB_USER'] ?? 'root',
'password' => $_ENV['DB_PASS'] ?? '',
'charset' => 'utf8mb4',
'options' => [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]
];

View File

@@ -0,0 +1,62 @@
<?php
use Slim\Routing\RouteCollectorProxy;
use App\Controllers\UserController;
use App\Controllers\MarkdownController;
use App\Controllers\GroupingController;
use App\Middleware\AuthMiddleware;
// 根路径测试路由
$app->get('/', function ($request, $response) {
$data = [
'status' => 'success',
'message' => 'Biji PHP API is running',
'version' => '1.0.0',
'endpoints' => [
'POST /api/user/register' => '用户注册',
'POST /api/user/login' => '用户登录',
'GET /api/markdown' => '获取所有笔记',
'GET /api/markdown/{id}' => '获取单个笔记',
'GET /api/groupings' => '获取分组列表'
]
];
$response->getBody()->write(json_encode($data, JSON_UNESCAPED_UNICODE));
return $response->withHeader('Content-Type', 'application/json');
});
// 用户相关路由(无需认证)
$app->group('/api/user', function (RouteCollectorProxy $group) {
$group->post('/register', [UserController::class, 'register']);
$group->post('/login', [UserController::class, 'login']);
});
// 用户相关路由(需要认证)
$app->group('/api/user', function (RouteCollectorProxy $group) {
$group->post('/validate-token', [UserController::class, 'validateToken']);
$group->put('/password', [UserController::class, 'updatePassword']);
$group->delete('/deleteUser', [UserController::class, 'deleteUser']);
})->add(new AuthMiddleware());
// Markdown 相关路由
$app->group('/api/markdown', function (RouteCollectorProxy $group) {
$group->get('/{id}', [MarkdownController::class, 'getById']);
$group->get('', [MarkdownController::class, 'getAll']);
});
// Markdown 相关路由(需要认证)
$app->group('/api/markdown', function (RouteCollectorProxy $group) {
$group->post('/updateMarkdown', [MarkdownController::class, 'update']);
$group->delete('/{id}', [MarkdownController::class, 'delete']);
})->add(new AuthMiddleware());
// 分组相关路由(无需认证)
$app->group('/api/groupings', function (RouteCollectorProxy $group) {
$group->get('', [GroupingController::class, 'getAll']);
});
// 分组相关路由(需要认证)
$app->group('/api/groupings', function (RouteCollectorProxy $group) {
$group->post('', [GroupingController::class, 'create']);
$group->put('/{id}', [GroupingController::class, 'update']);
$group->delete('/{id}', [GroupingController::class, 'delete']);
})->add(new AuthMiddleware());