Files
boss_dp/server/api/contacts.py
2026-02-26 01:27:35 +08:00

105 lines
3.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf-8 -*-
"""
联系记录 API需要登录
- GET /api/contacts -> 查询联系记录(支持分页、搜索)
- GET /api/contacts/query -> 按电话号码或微信号查询(数据展示)
- POST /api/contacts -> 创建联系记录
- GET /api/contacts/{id} -> 查询单条记录
- PUT /api/contacts/{id} -> 更新记录
- DELETE /api/contacts/{id} -> 删除记录
"""
from django.db.models import Q
from rest_framework import status
from rest_framework.decorators import api_view
from server.core.response import api_success, api_error
from server.models import ContactRecord
from server.serializers import ContactRecordSerializer
@api_view(["GET", "POST"])
def contact_list(request):
if request.method == "GET":
search = request.query_params.get("search", "")
page = int(request.query_params.get("page", 1))
page_size = int(request.query_params.get("page_size", 10))
reply_status = request.query_params.get("reply_status")
wechat = request.query_params.get("wechat_exchanged")
qs = ContactRecord.objects.all()
if search:
qs = qs.filter(
Q(name__icontains=search) |
Q(position__icontains=search) |
Q(contact__icontains=search)
)
if reply_status:
qs = qs.filter(reply_status=reply_status)
if wechat is not None:
qs = qs.filter(wechat_exchanged=wechat.lower() in ("true", "1"))
total = qs.count()
start = (page - 1) * page_size
end = start + page_size
records = qs[start:end]
return api_success({
"total": total,
"page": page,
"page_size": page_size,
"results": ContactRecordSerializer(records, many=True).data,
})
ser = ContactRecordSerializer(data=request.data)
ser.is_valid(raise_exception=True)
ser.save()
return api_success(ser.data, http_status=status.HTTP_201_CREATED)
@api_view(["GET"])
def contact_query(request):
"""
按电话号码或微信号查询联系记录(数据展示接口)。
传入 contact 参数(电话号码或微信号),返回匹配到的所有记录。
"""
contact = (request.query_params.get("contact") or "").strip()
if not contact:
return api_error(status.HTTP_400_BAD_REQUEST, "请提供 contact 参数(电话号码或微信号)")
page = int(request.query_params.get("page", 1))
page_size = int(request.query_params.get("page_size", 20))
qs = ContactRecord.objects.filter(contact__icontains=contact).order_by("-created_at")
total = qs.count()
start = (page - 1) * page_size
end = start + page_size
records = qs[start:end]
return api_success({
"total": total,
"page": page,
"page_size": page_size,
"contact_keyword": contact,
"results": ContactRecordSerializer(records, many=True).data,
})
@api_view(["GET", "PUT", "DELETE"])
def contact_detail(request, pk):
try:
obj = ContactRecord.objects.get(pk=pk)
except ContactRecord.DoesNotExist:
return api_error(status.HTTP_404_NOT_FOUND, "联系记录不存在")
if request.method == "GET":
return api_success(ContactRecordSerializer(obj).data)
if request.method == "PUT":
ser = ContactRecordSerializer(obj, data=request.data, partial=True)
ser.is_valid(raise_exception=True)
ser.save()
return api_success(ser.data)
obj.delete()
return api_success(msg="联系记录已删除")