geqintan commited on
Commit
56d652f
·
1 Parent(s): 0fee08c
__pycache__/app.cpython-311.pyc CHANGED
Binary files a/__pycache__/app.cpython-311.pyc and b/__pycache__/app.cpython-311.pyc differ
 
ai_edu.db CHANGED
Binary files a/ai_edu.db and b/ai_edu.db differ
 
app.py CHANGED
@@ -40,6 +40,16 @@ def init_db():
40
  order_date TEXT NOT NULL
41
  )
42
  """)
 
 
 
 
 
 
 
 
 
 
43
  conn.commit()
44
 
45
  # 在应用启动时初始化数据库
@@ -77,6 +87,13 @@ class EnrollmentIndividualRequest(BaseModel):
77
  position: str
78
  email: str
79
 
 
 
 
 
 
 
 
80
  @api_router.post("/auth/register")
81
  async def register_user(request: RegisterRequest):
82
  user_id = str(uuid.uuid4())
@@ -214,6 +231,58 @@ async def get_individual_orders():
214
  detail=f"获取个人报名订单失败: {str(e)}"
215
  )
216
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
217
  @api_router.delete("/enrollment/individual/{enrollment_id}")
218
  async def delete_individual_enrollment(enrollment_id: str):
219
  try:
 
40
  order_date TEXT NOT NULL
41
  )
42
  """)
43
+ cursor.execute("""
44
+ CREATE TABLE IF NOT EXISTS courses (
45
+ course_id INTEGER PRIMARY KEY AUTOINCREMENT,
46
+ title TEXT NOT NULL,
47
+ description TEXT,
48
+ price REAL NOT NULL,
49
+ duration_hours INTEGER,
50
+ level TEXT
51
+ )
52
+ """)
53
  conn.commit()
54
 
55
  # 在应用启动时初始化数据库
 
87
  position: str
88
  email: str
89
 
90
+ class Course(BaseModel):
91
+ title: str
92
+ description: str | None = None
93
+ price: float
94
+ duration_hours: int | None = None
95
+ level: str | None = None
96
+
97
  @api_router.post("/auth/register")
98
  async def register_user(request: RegisterRequest):
99
  user_id = str(uuid.uuid4())
 
231
  detail=f"获取个人报名订单失败: {str(e)}"
232
  )
233
 
234
+ @api_router.post("/course/add")
235
+ async def add_course(course: Course):
236
+ try:
237
+ with sqlite3.connect(DATABASE_URL) as conn:
238
+ cursor = conn.cursor()
239
+ cursor.execute(
240
+ "INSERT INTO courses (title, description, price, duration_hours, level) VALUES (?, ?, ?, ?, ?)",
241
+ (course.title, course.description, course.price, course.duration_hours, course.level)
242
+ )
243
+ conn.commit()
244
+ course_id = cursor.lastrowid
245
+ return {
246
+ "code": 200,
247
+ "message": "课程添加成功",
248
+ "data": {
249
+ "course_id": course_id,
250
+ **course.dict()
251
+ }
252
+ }
253
+ except Exception as e:
254
+ raise HTTPException(
255
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
256
+ detail=f"添加课程失败: {str(e)}"
257
+ )
258
+
259
+ @api_router.get("/course/details/{course_id}")
260
+ async def get_course_details(course_id: int):
261
+ try:
262
+ with sqlite3.connect(DATABASE_URL) as conn:
263
+ conn.row_factory = sqlite3.Row
264
+ cursor = conn.cursor()
265
+ cursor.execute("SELECT * FROM courses WHERE course_id = ?", (course_id,))
266
+ course = cursor.fetchone()
267
+ if course:
268
+ return {
269
+ "code": 200,
270
+ "message": "获取课程详情成功",
271
+ "data": dict(course)
272
+ }
273
+ else:
274
+ raise HTTPException(
275
+ status_code=status.HTTP_404_NOT_FOUND,
276
+ detail="未找到该课程"
277
+ )
278
+ except HTTPException as e:
279
+ raise e
280
+ except Exception as e:
281
+ raise HTTPException(
282
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
283
+ detail=f"获取课程详情失败: {str(e)}"
284
+ )
285
+
286
  @api_router.delete("/enrollment/individual/{enrollment_id}")
287
  async def delete_individual_enrollment(enrollment_id: str):
288
  try:
memory-bank/activeContext.md CHANGED
@@ -6,6 +6,8 @@
6
  - 实现了用户注册 (`/api/auth/register`) 和登录 (`/api/auth/login`) 接口。
7
  - 配置了 CORS 中间件以处理跨域请求。
8
  - 优化了登录接口的错误响应,使其返回自定义的业务错误码和信息。
 
 
9
 
10
  ## 最近的更改
11
  - `app.py`:
@@ -19,9 +21,11 @@
19
  - 添加 `CORSMiddleware` 处理跨域请求。
20
 
21
  ## 下一步计划
22
- - **密码加密**: 引入密码哈希(如 `passlib`)来加密存储用户密码,提高安全性。
23
- - **会话管理/JWT**: 实现用户登录后的会话管理或 JWT 认证机制。
 
24
  - **更多业务接口**: 根据 AI-EDU H5 的需求,逐步实现其他后端 API。
 
25
 
26
  ## 活跃决策和考虑
27
  - 数据库选择:目前使用 SQLite 方便开发和演示,未来可考虑升级到 PostgreSQL 或 MySQL。
 
6
  - 实现了用户注册 (`/api/auth/register`) 和登录 (`/api/auth/login`) 接口。
7
  - 配置了 CORS 中间件以处理跨域请求。
8
  - 优化了登录接口的错误响应,使其返回自定义的业务错误码和信息。
9
+ - **新增了课程管理功能,包括课程表的创建和课程详情查询接口 (`/api/course/details/{course_id}`)。**
10
+ - **新增了课程添加接口 (`/api/course/add`) 用于测试和数据初始化。**
11
 
12
  ## 最近的更改
13
  - `app.py`:
 
21
  - 添加 `CORSMiddleware` 处理跨域请求。
22
 
23
  ## 下一步计划
24
+ - **安全性增强**:
25
+ - **密码哈希**: 引入密码哈希(如 `passlib`)来加密存储用户密码,提高安全性。
26
+ - **会话管理/JWT**: 实现用户登录后的会话管理或 JWT 认证机制。
27
  - **更多业务接口**: 根据 AI-EDU H5 的需求,逐步实现其他后端 API。
28
+ - **数据库抽象**: 考虑引入 ORM(如 SQLAlchemy)来更好地管理数据库操作。
29
 
30
  ## 活跃决策和考虑
31
  - 数据库选择:目前使用 SQLite 方便开发和演示,未来可考虑升级到 PostgreSQL 或 MySQL。
memory-bank/progress.md CHANGED
@@ -23,6 +23,12 @@
23
  - **更多业务接口**: 根据 AI-EDU H5 的具体需求,逐步添加其他 API 接口。
24
  - **数据库抽象**: 考虑引入 ORM(如 SQLAlchemy)来更好地管理数据库操作。
25
 
 
 
 
 
 
 
26
  ## 当前状态
27
  - 基本的用户认证功能已实现并可运行。
28
  - 数据库集成已完成。
 
23
  - **更多业务接口**: 根据 AI-EDU H5 的具体需求,逐步添加其他 API 接口。
24
  - **数据库抽象**: 考虑引入 ORM(如 SQLAlchemy)来更好地管理数据库操作。
25
 
26
+ ## 已完成的工作
27
+ - **课程管理接口**:
28
+ - 实现了 `courses` 表的创建。
29
+ - 实现了 `/api/course/add` 接口,用于添加课程。
30
+ - 实现了 `/api/course/details/{course_id}` 接口,用于获取课程详情。
31
+
32
  ## 当前状态
33
  - 基本的用户认证功能已实现并可运行。
34
  - 数据库集成已完成。
memory-bank/systemPatterns.md CHANGED
@@ -17,10 +17,12 @@
17
 
18
  ## 组件关系
19
  - `app.py`: 包含 FastAPI 应用实例、CORS 配置、数据库初始化逻辑、API 路由定义。
20
- - `api_router`: 负责定义 `/api/auth/register` `/api/auth/login` 接口。
21
  - `sqlite3`: 用于与 `ai_edu.db` 数据库文件进行交互。
22
  - `pydantic.BaseModel`: 用于定义请求体的模型(`RegisterRequest`, `LoginRequest`)。
23
 
24
  ## 关键实现路径
25
  - **用户注册**: 接收 `username` 和 `password` -> 生成 `user_id` (UUID) -> 插入 `users` 表 -> 返回成功响应或错误。
26
  - **用户登录**: 接收 `username` 和 `password` -> 查询 `users` 表验证凭据 -> 返回成功响应(包含 `user_id` 和 `username`)或错误。
 
 
 
17
 
18
  ## 组件关系
19
  - `app.py`: 包含 FastAPI 应用实例、CORS 配置、数据库初始化逻辑、API 路由定义。
20
+ - `api_router`: 负责定义 `/api/auth/register`, `/api/auth/login`, `/api/course/add`, `/api/course/details/{course_id}` 等接口。
21
  - `sqlite3`: 用于与 `ai_edu.db` 数据库文件进行交互。
22
  - `pydantic.BaseModel`: 用于定义请求体的模型(`RegisterRequest`, `LoginRequest`)。
23
 
24
  ## 关键实现路径
25
  - **用户注册**: 接收 `username` 和 `password` -> 生成 `user_id` (UUID) -> 插入 `users` 表 -> 返回成功响应或错误。
26
  - **用户登录**: 接收 `username` 和 `password` -> 查询 `users` 表验证凭据 -> 返回成功响应(包含 `user_id` 和 `username`)或错误。
27
+ - **课程添加**: 接收课程详情 (`title`, `description`, `price`, `duration_hours`, `level`) -> 插入 `courses` 表 -> 返回成功响应。
28
+ - **课程详情查询**: 接收 `course_id` -> 查询 `courses` 表 -> 返回课程详情或 404 错误。