import logging from django.utils.translation import gettext as _ from django.utils import timezone from rest_framework.response import Response from rest_framework.permissions import IsAdminUser from rest_framework.exceptions import NotFound from pingcap_sso.api.base import AdminEndpoint from pingcap_sso.api.permissions import MethodPermission from pingcap_sso.models import ( ContactUs, ContactUsEmergency, ContactUsCooperation, ContactUsCommunication ) logger = logging.getLogger(__name__) class EmergencyListEndpoint(AdminEndpoint): permission_classes = (IsAdminUser, MethodPermission) perms_map = { 'GET': ['pingcap_sso.view_contactusemergency'] } def get(self, request, *args, **kwargs): """audit_log: 查看了紧急事故处理列表""" qs = ContactUsEmergency.objects.all().order_by('-created_at') data = [{ 'id': c.id, 'created_by_user': c.created_by_user.username, 'company_name': c.created_by_user.company_name, 'job_title_text': c.created_by_user.job_title_text, 'phone': c.created_by_user.phone, 'email': c.created_by_user.email, 'emergency_type': c.emergency_type, 'emergency_type_display': c.get_emergency_type_display(), 'priority': c.priority, 'priority_display': c.get_priority_display(), 'created_at': timezone.localtime(c.created_at).strftime('%Y/%m/%d %H:%M'), 'status': c.status, 'status_display': c.get_status_display() } for c in qs] return Response({ 'detail': _('success'), 'data': data }) class EmergencyDetailEndpoint(AdminEndpoint): permission_classes = (IsAdminUser, MethodPermission) perms_map = { 'GET': ['pingcap_sso.view_contactusemergency'], 'PUT': ['pingcap_sso.change_contactusemergency'] } def get(self, request, id, *args, **kwargs): """audit_log: 查看了紧急事故处理详情""" try: c = ContactUsEmergency.objects.get(id=id) except Exception: raise NotFound return Response({ 'detail': _('success'), 'data': { 'id': c.id, 'created_by_user': c.created_by_user.username, 'company_name': c.created_by_user.company_name, 'job_title_text': c.created_by_user.job_title_text, 'phone': c.created_by_user.phone, 'email': c.created_by_user.email, 'emergency_type': c.emergency_type, 'emergency_type_display': c.get_emergency_type_display(), 'priority': c.priority, 'priority_display': c.get_priority_display(), 'tidb_version': c.tidb_version, 'summary': c.summary, 'background': c.background, 'appearance': c.appearance, 'problem': c.problem, 'affect': c.affect, 'status': c.status, 'status_display': c.get_status_display(), 'created_at': timezone.localtime( c.created_at).strftime('%Y/%m/%d %H:%M'), 'followed_by_user': c.followed_by_user.username if c.followed_by_user else None, 'followed_at': timezone.localtime( c.followed_at).strftime('%Y/%m/%d %H:%M') if c.followed_at else None, } }) def put(self, request, id, *args, **kwargs): """audit_log: 跟进了紧急事故处理""" try: c = ContactUsEmergency.objects.get(id=id) except Exception: raise NotFound c.followed_by_user = request.user c.followed_at = timezone.now() c.status = ContactUsEmergency.STATUS_PROCESSED c.save() return Response({'detail': _('success')}) class CommunitcationListEndpoint(AdminEndpoint): permission_classes = (IsAdminUser, MethodPermission) perms_map = { 'GET': ['pingcap_sso.view_contactuscommunication'], } def get(self, request, *args, **kwargs): """audit_log: 查看了技术专家交流列表""" qs = ContactUsCommunication.objects.all().order_by('-created_at') data = [{ 'id': c.id, 'created_by_user': c.created_by_user.username, 'company_name': c.created_by_user.company_name, 'job_title_text': c.created_by_user.job_title_text, 'phone': c.created_by_user.phone, 'email': c.created_by_user.email, 'created_at': timezone.localtime(c.created_at).strftime('%Y/%m/%d %H:%M'), 'status': c.status, 'status_display': c.get_status_display() } for c in qs] return Response({ 'detail': _('success'), 'data': data }) class CommunitcationDetailEndpoint(AdminEndpoint): permission_classes = (IsAdminUser, MethodPermission) perms_map = { 'GET': ['pingcap_sso.view_contactuscommunication'], 'PUT': ['pingcap_sso.change_contactuscommunication'] } def get(self, request, id, *args, **kwargs): """audit_log: 查看了技术专家交流详情""" try: c = ContactUsCommunication.objects.get(id=id) except Exception: raise NotFound return Response({ 'detail': _('success'), 'data': { 'id': c.id, 'created_by_user': c.created_by_user.username, 'company_name': c.created_by_user.company_name, 'job_title_text': c.created_by_user.job_title_text, 'phone': c.created_by_user.phone, 'email': c.created_by_user.email, 'tidb_node_num': c.tidb_node_num, 'tikv_node_num': c.tikv_node_num, 'tiflash_node_num': c.tiflash_node_num, 'occupation_rate_of_tidb': '{}%'.format(c.occupation_rate_of_tidb * 100), 'tidb_version': c.tidb_version, 'key_scene': c.key_scene, 'current_scenarios_and_architecture': c.current_scenarios_and_architecture, 'pain_points': c.pain_points, 'technical_debt': c.technical_debt, 'expect_benefits_from_tidb': c.expect_benefits_from_tidb, 'launch_or_poc_date': c.launch_or_poc_date.strftime( '%Y-%m-%d') if c.launch_or_poc_date else None, 'person_resource': c.person_resource, 'tidb_usage': c.tidb_usage, 'status': c.status, 'status_display': c.get_status_display(), 'created_at': timezone.localtime( c.created_at).strftime('%Y/%m/%d %H:%M'), 'followed_by_user': c.followed_by_user.username if c.followed_by_user else None, 'followed_at': timezone.localtime( c.followed_at).strftime('%Y/%m/%d %H:%M') if c.followed_at else None, } }) def put(self, request, id, *args, **kwargs): """audit_log: 跟进了技术专家交流""" try: c = ContactUsCommunication.objects.get(id=id) except Exception: raise NotFound c.followed_by_user = request.user c.followed_at = timezone.now() c.status = ContactUsCommunication.STATUS_PROCESSED c.save() return Response({'detail': _('success')}) class CooperationListEndpoint(AdminEndpoint): permission_classes = (IsAdminUser, MethodPermission) perms_map = { 'GET': ['pingcap_sso.view_contactuscooperation'], } def get(self, request, *args, **kwargs): """audit_log: 查看了社区生态合作列表""" qs = ContactUsCooperation.objects.all().order_by('-created_at') data = [{ 'id': c.id, 'created_by_user': c.created_by_user.username, 'company_name': c.created_by_user.company_name, 'job_title_text': c.created_by_user.job_title_text, 'phone': c.created_by_user.phone, 'email': c.created_by_user.email, 'cooperation_type': c.cooperation_type, 'cooperation_type_display': c.get_cooperation_type_display(), 'created_at': timezone.localtime(c.created_at).strftime('%Y/%m/%d %H:%M'), 'status': c.status, 'status_display': c.get_status_display() } for c in qs] return Response({ 'detail': _('success'), 'data': data }) class CooperationDetailEndpoint(AdminEndpoint): permission_classes = (IsAdminUser, MethodPermission) perms_map = { 'GET': ['pingcap_sso.view_contactuscooperation'], 'PUT': ['pingcap_sso.change_contactuscooperation'] } def get(self, request, id, *args, **kwargs): """audit_log: 查看了社区生态合作详情""" try: c = ContactUsCooperation.objects.get(id=id) except Exception: raise NotFound return Response({ 'detail': _('success'), 'data': { 'id': c.id, 'created_by_user': c.created_by_user.username, 'company_name': c.created_by_user.company_name, 'job_title_text': c.created_by_user.job_title_text, 'phone': c.created_by_user.phone, 'email': c.created_by_user.email, 'cooperation_type': c.cooperation_type, 'cooperation_type_display': c.get_cooperation_type_display(), 'detail': c.detail, 'status': c.status, 'status_display': c.get_status_display(), 'created_at': timezone.localtime( c.created_at).strftime('%Y/%m/%d %H:%M'), 'followed_by_user': c.followed_by_user.username if c.followed_by_user else None, 'followed_at': timezone.localtime( c.followed_at).strftime('%Y/%m/%d %H:%M') if c.followed_at else None, } }) def put(self, request, id, *args, **kwargs): """audit_log: 跟进了社区生态合作""" try: c = ContactUsCooperation.objects.get(id=id) except Exception: raise NotFound c.followed_by_user = request.user c.followed_at = timezone.now() c.status = ContactUsCooperation.STATUS_PROCESSED c.save() return Response({'detail': _('success')})