391 lines
12 KiB
Markdown
391 lines
12 KiB
Markdown
# Hertz Studio Django 通知模块接口文档
|
||
|
||
- 基础路径: `/api/notice/`
|
||
- 统一响应: 使用 `HertzResponse`,结构如下(参考 `hertz_studio_django_utils/responses/HertzResponse.py`)
|
||
```json
|
||
{
|
||
"success": true,
|
||
"code": 200,
|
||
"message": "操作成功",
|
||
"data": {}
|
||
}
|
||
```
|
||
- 路由挂载: 项目主路由中已通过 `path('api/notice/', include('hertz_studio_django_notice.urls'))` 挂载(`hertz_server_django/urls.py:19`)。
|
||
- 认证说明: 所有接口均需要登录,需在请求头携带 `Authorization: Bearer <token>`(`hertz_studio_django_auth/utils/decorators/auth_decorators.py:1`)。
|
||
|
||
|
||
## 一、管理员通知接口
|
||
|
||
### (1)创建通知
|
||
- 方法: `POST`
|
||
- 路径: `/api/notice/admin/create/`
|
||
- 认证: 需要登录
|
||
- 请求体: `application/json`
|
||
- 字段: `title`, `content`, `notice_type`, `priority`, `is_top`, `publish_time`, `expire_time`, `attachment_url`
|
||
- 实现: `admin_create_notice`(`hertz_studio_django_notice/views/admin_views.py:39`)
|
||
- 请求示例:
|
||
```http
|
||
POST /api/notice/admin/create/
|
||
Authorization: Bearer <token>
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"title": "系统维护通知",
|
||
"content": "将于周六晚间进行系统维护。",
|
||
"notice_type": 1,
|
||
"priority": 3,
|
||
"is_top": true,
|
||
"publish_time": "2025-11-18 09:00:00",
|
||
"expire_time": "2025-11-20 23:59:59",
|
||
"attachment_url": null
|
||
}
|
||
```
|
||
- 返回示例:
|
||
```json
|
||
{"success": true, "code": 200, "message": "通知创建成功", "data": {"notice_id": 101}}
|
||
```
|
||
|
||
### (2)更新通知
|
||
- 方法: `PUT`
|
||
- 路径: `/api/notice/admin/update/{notice_id}/`
|
||
- 认证: 需要登录
|
||
- 请求体: `application/json`
|
||
- 字段: `title`, `content`, `notice_type`, `priority`, `is_top`, `publish_time`, `expire_time`, `attachment_url`, `status`
|
||
- 实现: `admin_update_notice`(`hertz_studio_django_notice/views/admin_views.py:94`)
|
||
- 请求示例:
|
||
```http
|
||
PUT /api/notice/admin/update/101/
|
||
Authorization: Bearer <token>
|
||
Content-Type: application/json
|
||
|
||
{"priority": 4, "is_top": false}
|
||
```
|
||
- 返回示例:
|
||
```json
|
||
{"success": true, "code": 200, "message": "通知更新成功"}
|
||
```
|
||
|
||
### (3)删除通知
|
||
- 方法: `DELETE`
|
||
- 路径: `/api/notice/admin/delete/{notice_id}/`
|
||
- 认证: 需要登录
|
||
- 实现: `admin_delete_notice`(`hertz_studio_django_notice/views/admin_views.py:146`)
|
||
- 请求示例:
|
||
```bash
|
||
curl -X DELETE "http://localhost:8000/api/notice/admin/delete/101/" \
|
||
-H "Authorization: Bearer <token>"
|
||
```
|
||
- 返回示例:
|
||
```json
|
||
{"success": true, "code": 200, "message": "通知删除成功"}
|
||
```
|
||
|
||
### (4)获取通知列表
|
||
- 方法: `GET`
|
||
- 路径: `/api/notice/admin/list/`
|
||
- 认证: 需要登录
|
||
- 查询参数:
|
||
- `page`, `page_size`
|
||
- `notice_type`, `status`, `priority`, `is_top`, `keyword`
|
||
- `start_date`, `end_date`(按发布时间范围筛选)
|
||
- 实现: `admin_get_notice_list`(`hertz_studio_django_notice/views/admin_views.py:184`)
|
||
- 请求示例:
|
||
```bash
|
||
curl "http://localhost:8000/api/notice/admin/list/?page=1&page_size=10&status=1&is_top=true" \
|
||
-H "Authorization: Bearer <token>"
|
||
```
|
||
- 返回示例(节选):
|
||
```json
|
||
{
|
||
"success": true,
|
||
"code": 200,
|
||
"message": "获取通知列表成功",
|
||
"data": {
|
||
"notices": [
|
||
{
|
||
"notice_id": 101,
|
||
"title": "系统维护通知",
|
||
"notice_type": 1,
|
||
"notice_type_display": "系统通知",
|
||
"priority": 3,
|
||
"priority_display": "高",
|
||
"status": 1,
|
||
"status_display": "已发布",
|
||
"is_top": true,
|
||
"publish_time": "2025-11-18T09:00:00Z",
|
||
"expire_time": "2025-11-20T23:59:59Z",
|
||
"publisher_name": "管理员",
|
||
"view_count": 12,
|
||
"is_expired": false,
|
||
"read_count": 30,
|
||
"unread_count": 5,
|
||
"created_at": "2025-11-17T10:00:00Z",
|
||
"updated_at": "2025-11-17T10:00:00Z"
|
||
}
|
||
],
|
||
"pagination": {"current_page": 1, "page_size": 10, "total_pages": 1, "total_count": 1, "has_next": false, "has_previous": false}
|
||
}
|
||
}
|
||
```
|
||
|
||
### (5)获取通知详情
|
||
- 方法: `GET`
|
||
- 路径: `/api/notice/admin/detail/{notice_id}/`
|
||
- 认证: 需要登录
|
||
- 实现: `admin_get_notice_detail`(`hertz_studio_django_notice/views/admin_views.py:273`)
|
||
- 请求示例:
|
||
```bash
|
||
curl "http://localhost:8000/api/notice/admin/detail/101/" -H "Authorization: Bearer <token>"
|
||
```
|
||
- 返回示例(节选):
|
||
```json
|
||
{
|
||
"success": true,
|
||
"code": 200,
|
||
"message": "获取通知详情成功",
|
||
"data": {
|
||
"notice_id": 101,
|
||
"title": "系统维护通知",
|
||
"content": "将于周六晚间进行系统维护。",
|
||
"notice_type": 1,
|
||
"notice_type_display": "系统通知",
|
||
"priority": 3,
|
||
"priority_display": "高",
|
||
"status": 1,
|
||
"status_display": "已发布",
|
||
"is_top": true,
|
||
"publish_time": "2025-11-18T09:00:00Z",
|
||
"expire_time": "2025-11-20T23:59:59Z",
|
||
"attachment_url": null,
|
||
"publisher_name": "管理员",
|
||
"publisher_username": "admin",
|
||
"view_count": 12,
|
||
"is_expired": false,
|
||
"read_count": 30,
|
||
"unread_count": 5,
|
||
"created_at": "2025-11-17T10:00:00Z",
|
||
"updated_at": "2025-11-17T10:00:00Z"
|
||
}
|
||
}
|
||
```
|
||
|
||
### (6)发布通知
|
||
- 方法: `POST`
|
||
- 路径: `/api/notice/admin/publish/{notice_id}/`
|
||
- 认证: 需要登录
|
||
- 实现: `admin_publish_notice`(`hertz_studio_django_notice/views/admin_views.py:317`)
|
||
- 请求示例:
|
||
```bash
|
||
curl -X POST "http://localhost:8000/api/notice/admin/publish/101/" -H "Authorization: Bearer <token>"
|
||
```
|
||
- 返回示例:
|
||
```json
|
||
{"success": true, "code": 200, "message": "通知发布成功"}
|
||
```
|
||
|
||
### (7)撤回通知
|
||
- 方法: `POST`
|
||
- 路径: `/api/notice/admin/withdraw/{notice_id}/`
|
||
- 认证: 需要登录
|
||
- 实现: `admin_withdraw_notice`(`hertz_studio_django_notice/views/admin_views.py:374`)
|
||
- 请求示例:
|
||
```bash
|
||
curl -X POST "http://localhost:8000/api/notice/admin/withdraw/101/" -H "Authorization: Bearer <token>"
|
||
```
|
||
- 返回示例:
|
||
```json
|
||
{"success": true, "code": 200, "message": "通知撤回成功"}
|
||
```
|
||
|
||
|
||
## 二、用户通知接口
|
||
|
||
### (1)获取通知列表
|
||
- 方法: `GET`
|
||
- 路径: `/api/notice/user/list/`
|
||
- 认证: 需要登录
|
||
- 查询参数:
|
||
- `page`, `page_size`
|
||
- `notice_type`, `is_read`, `is_starred`, `priority`, `keyword`
|
||
- `show_expired`: `true/false`,默认不显示过期通知
|
||
- 实现: `user_get_notice_list`(`hertz_studio_django_notice/views/user_views.py:28`)
|
||
- 请求示例:
|
||
```bash
|
||
curl "http://localhost:8000/api/notice/user/list/?page=1&page_size=10&is_read=false&is_starred=true" \
|
||
-H "Authorization: Bearer <token>"
|
||
```
|
||
- 返回示例(节选):
|
||
```json
|
||
{
|
||
"success": true,
|
||
"code": 200,
|
||
"message": "获取通知列表成功",
|
||
"data": {
|
||
"notices": [
|
||
{
|
||
"title": "系统维护通知",
|
||
"notice_type_display": "系统通知",
|
||
"priority_display": "高",
|
||
"is_top": true,
|
||
"publish_time": "2025-11-18T09:00:00Z",
|
||
"is_read": false,
|
||
"read_time": null,
|
||
"is_starred": true,
|
||
"starred_time": "2025-11-17T12:00:00Z",
|
||
"is_expired": false,
|
||
"created_at": "2025-11-17T10:00:00Z"
|
||
}
|
||
],
|
||
"pagination": {
|
||
"current_page": 1,
|
||
"page_size": 10,
|
||
"total_pages": 1,
|
||
"total_count": 1,
|
||
"has_next": false,
|
||
"has_previous": false
|
||
},
|
||
"statistics": {"total_count": 10, "unread_count": 2, "starred_count": 3}
|
||
}
|
||
}
|
||
```
|
||
|
||
### (2)获取通知详情
|
||
- 方法: `GET`
|
||
- 路径: `/api/notice/user/detail/{notice_id}/`
|
||
- 认证: 需要登录
|
||
- 行为: 自动标记为已读并增加查看次数
|
||
- 实现: `user_get_notice_detail`(`hertz_studio_django_notice/views/user_views.py:147`)
|
||
- 请求示例:
|
||
```bash
|
||
curl "http://localhost:8000/api/notice/user/detail/101/" -H "Authorization: Bearer <token>"
|
||
```
|
||
- 返回示例(节选):
|
||
```json
|
||
{
|
||
"success": true,
|
||
"code": 200,
|
||
"message": "获取通知详情成功",
|
||
"data": {
|
||
"title": "系统维护通知",
|
||
"content": "将于周六晚间进行系统维护。",
|
||
"notice_type_display": "系统通知",
|
||
"priority_display": "高",
|
||
"attachment_url": null,
|
||
"publish_time": "2025-11-18T09:00:00Z",
|
||
"expire_time": "2025-11-20T23:59:59Z",
|
||
"is_top": true,
|
||
"is_expired": false,
|
||
"publisher_name": "管理员",
|
||
"is_read": true,
|
||
"read_time": "2025-11-17T12:05:00Z",
|
||
"is_starred": true,
|
||
"starred_time": "2025-11-17T12:00:00Z"
|
||
}
|
||
}
|
||
```
|
||
|
||
### (3)标记通知已读
|
||
- 方法: `POST`
|
||
- 路径: `/api/notice/user/mark-read/`
|
||
- 认证: 需要登录
|
||
- 请求体: `application/json`
|
||
- 字段: `notice_id`
|
||
- 实现: `user_mark_notice_read`(`hertz_studio_django_notice/views/user_views.py:214`)
|
||
- 请求示例:
|
||
```http
|
||
POST /api/notice/user/mark-read/
|
||
Authorization: Bearer <token>
|
||
Content-Type: application/json
|
||
|
||
{"notice_id": 101}
|
||
```
|
||
- 返回示例:
|
||
```json
|
||
{"success": true, "code": 200, "message": "标记已读成功"}
|
||
```
|
||
|
||
### (4)批量标记已读
|
||
- 方法: `POST`
|
||
- 路径: `/api/notice/user/batch-mark-read/`
|
||
- 认证: 需要登录
|
||
- 请求体: `application/json`
|
||
- 字段: `notice_ids: number[]`
|
||
- 实现: `user_batch_mark_read`(`hertz_studio_django_notice/views/user_views.py:260`)
|
||
- 请求示例:
|
||
```http
|
||
POST /api/notice/user/batch-mark-read/
|
||
Authorization: Bearer <token>
|
||
Content-Type: application/json
|
||
|
||
{"notice_ids": [101, 102, 103]}
|
||
```
|
||
- 返回示例:
|
||
```json
|
||
{"success": true, "code": 200, "message": "批量标记已读成功"}
|
||
```
|
||
|
||
### (5)标记全部已读
|
||
- 方法: `POST`
|
||
- 路径: `/api/notice/user/mark-all-read/`
|
||
- 认证: 需要登录
|
||
- 实现: `user_mark_all_read`(`hertz_studio_django_notice/views/user_views.py:317`)
|
||
- 请求示例:
|
||
```bash
|
||
curl -X POST "http://localhost:8000/api/notice/user/mark-all-read/" -H "Authorization: Bearer <token>"
|
||
```
|
||
- 返回示例:
|
||
```json
|
||
{"success": true, "code": 200, "message": "标记全部已读成功,共标记3条通知", "data": {"updated_count": 3}}
|
||
```
|
||
|
||
### (6)切换收藏状态
|
||
- 方法: `POST`
|
||
- 路径: `/api/notice/user/toggle-star/`
|
||
- 认证: 需要登录
|
||
- 请求体: `application/json`
|
||
- 字段: `notice_id`, `is_starred`
|
||
- 实现: `user_toggle_notice_star`(`hertz_studio_django_notice/views/user_views.py:401`)
|
||
- 请求示例:
|
||
```http
|
||
POST /api/notice/user/toggle-star/
|
||
Authorization: Bearer <token>
|
||
Content-Type: application/json
|
||
|
||
{"notice_id": 101, "is_starred": true}
|
||
```
|
||
- 返回示例:
|
||
```json
|
||
{"success": true, "code": 200, "message": "收藏成功"}
|
||
```
|
||
|
||
### (7)获取通知统计信息
|
||
- 方法: `GET`
|
||
- 路径: `/api/notice/user/statistics/`
|
||
- 认证: 需要登录
|
||
- 实现: `user_get_notice_statistics`(`hertz_studio_django_notice/views/user_views.py:417`)
|
||
- 请求示例:
|
||
```bash
|
||
curl "http://localhost:8000/api/notice/user/statistics/" -H "Authorization: Bearer <token>"
|
||
```
|
||
- 返回示例:
|
||
```json
|
||
{
|
||
"success": true,
|
||
"code": 200,
|
||
"message": "获取统计信息成功",
|
||
"data": {
|
||
"total_count": 10,
|
||
"unread_count": 2,
|
||
"read_count": 8,
|
||
"starred_count": 3,
|
||
"type_statistics": {"系统通知": 6, "公告通知": 3, "活动通知": 1, "维护通知": 0},
|
||
"priority_statistics": {"低": 2, "中": 4, "高": 3, "紧急": 1}
|
||
}
|
||
}
|
||
```
|
||
|
||
|
||
## 三、备注
|
||
- 列表与详情序列包含显示用枚举字段(如 `notice_type_display`, `priority_display`, `status_display`)。
|
||
- 用户视图中 `user_get_notice_detail` 会自动将未读标记为已读并累加 `view_count`。
|
||
- 管理员发布接口会为所有启用用户创建 `HertzUserNotice` 状态记录。 |