# -*- 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="联系记录已删除")