def post(self, request, need, team): """同意加入申请并将创始人加入自己团队(对方需发送过合作申请)""" if request.user != need.team.owner: abort(403, '只有队长能操作') if need.cooperation_requests.filter(sender=team).exists(): # 在事务中建立关系,并删除对应的申请合作 with transaction.atomic(): need.cooperation_requests.filter(sender=team).delete() if need.team.members.filter(user=team.owner).exists(): abort(200) # 保存需求的加入团队Id if len(need.members) > 0: need.members = need.members + "|" + str(team.id) else: need.members = str(team.id) need.save() need.team.members.create(user=team.owner) action.join_team(team.owner, need.team) request.user.score += get_score_stage(1) request.user.score_records.create(score=get_score_stage(1), type="能力", description="与其他团队合作") team.score += get_score_stage(1) team.score_records.create(score=get_score_stage(1), type="能力", description="与其他团队合作") request.user.save() team.save() abort(200) abort(403, '对方未发送过申请合作')
def post(self, request, user): # 积分 user.score += get_score_stage(1) user.score_records.create(score=get_score_stage(1), type="受欢迎度", description="他人点赞") user.save() return super().post(request, user)
def delete(self, request, user): # 积分 user.score -= get_score_stage(1) user.score_records.create(score=-get_score_stage(1), type="受欢迎度", description="他人取消点赞") user.save() return super().delete(request, user)
def delete(self, request, entity): """对某个对象取消点赞""" # 积分 request.user.score -= get_score_stage(1) request.user.score_records.create(score=-get_score_stage(1), type="活跃度", description="取消给他人点赞") request.user.save() entity.likers.filter(liker=request.user).delete() abort(200)
def post(self, request, activity): """令当前用户关注activity""" if request.user.followed_activities.filter(followed=activity).exists(): abort(403, '已经关注过该活动') request.user.followed_activities.create(followed=activity) request.user.score += get_score_stage(1) request.user.score_records.create(score=get_score_stage(1), type="活跃度", description="增加一个关注") request.user.save() abort(200)
def post(self, request, need): """令当前用户关注need""" if request.user.followed_needs.filter(followed=need).exists(): abort(403, '已经关注过该需求') request.user.followed_needs.create(followed=need) request.user.score += get_score_stage(1) request.user.score_records.create(score=get_score_stage(1), type="活跃度", description="增加一个关注") request.user.save() abort(200)
def delete(self, request, need): """令当前用户取消关注need""" qs = request.user.followed_needs.filter(followed=need) if qs.exists(): # 积分 request.user.score -= get_score_stage(1) request.user.score_records.create(score=-get_score_stage(1), type="活跃度", description="取消关注") qs.delete() abort(200) abort(403, '未关注过该需求')
def delete(self, request, activity): """令当前用户取消关注activity""" qs = request.user.followed_activities.filter(followed=activity) if qs.exists(): # 积分 request.user.score -= get_score_stage(1) request.user.score_records.create(score=-get_score_stage(1), type="活跃度", description="取消关注") qs.delete() abort(200) abort(403, '未关注过该活动')
def delete(self, request, competition): """令当前用户取消关注competition""" qs = request.user.followed_competitions.filter(followed=competition) if qs.exists(): # 积分 request.user.score -= get_score_stage(1) request.user.score_records.create(score=-get_score_stage(1), type="活跃度", description="取消关注") qs.delete() abort(200) abort(403, '未关注过该竞赛')
def post(self, request, competition): """令当前用户关注competition""" if request.user.followed_competitions.filter( followed=competition).exists(): abort(403, '已经关注过该竞赛') request.user.followed_competitions.create(followed=competition) request.user.score += get_score_stage(1) request.user.score_records.create(score=get_score_stage(1), type="活跃度", description="增加一个关注") request.user.save() abort(200)
def post(self, request, **kwargs): """新建团队,同时调用融云接口为该团队创建一个对应的群聊 :param kwargs: name: 团队名称 description: 团队描述 url: 团队链接 province: city: county: fields: 团队领域,格式:'field1|field2' tags: 标签,格式:'tag1|tag2|tag3|...' :return: team_id: 团队id """ name = kwargs.pop('name') fields = kwargs.pop('fields', None) tags = kwargs.pop('tags', None) # 昵称唯一性验证 if Team.enabled.filter(name=name).count() != 0: abort(403, '团队名已被注册') # 昵称非法词验证 if check_bad_words(name): abort(403, '团队名含非法词汇') team = Team(owner=request.user, name=name) team.save() for k in kwargs: setattr(team, k, kwargs[k]) fields = fields.split('|')[:2] if fields is not None else ('', '') team.field1, team.field2 = fields[0].strip(), fields[1].strip() if tags: tags = tags.split('|')[:5] with transaction.atomic(): team.tags.all().delete() order = 0 for tag in tags: tag = tag.strip() if tag: team.tags.create(name=tag, order=order) order += 1 team.save() action.create_team(request.user, team) request.user.score += get_score_stage(2) request.user.score_records.create( score=get_score_stage(2), type="能力", description="成功创建一个团队") request.user.save() return JsonResponse({'team_id': team.id})
def post(self, request, content): """用户意见反馈 :param content: 反馈内容 :return: 200 """ if request.user.feedback.count() == 0: request.user.score += get_score_stage(2) request.user.score_records.create( score=get_score_stage(2), type="活跃度", description="增加一条反馈") request.user.save() request.user.feedback.create(content=content) abort(200)
def post(self, request, **kwargs): """eid实名认证 :param kwargs: real_name: 真实姓名 id_number: 身份证号码 eid_issuer: eid相关信息 eid_issuer_sn: eid相关信息 eid_sn: eid: eid相关信息 data_to_sign: 待签原文的base64字符串 eid_sign: eid卡对签名原文的签名结果 eid_sign_algorithm: eid卡进行签名的类型 """ id_keys = ('real_name', 'id_number', 'eid_issuer', 'eid_issuer_sn', 'eid_sn') # 调用eid接口验证用户信息 data = { 'eidIssuer': kwargs['eid_issuer'], 'eidIssuerSn': kwargs['eid_issuer_sn'], 'eidSn': kwargs['eid_sn'], 'idNum': kwargs['id_number'], 'name': kwargs['real_name'], 'dataToSign': kwargs['data_to_sign'], 'eidSign': kwargs['eid_sign'], 'eidSignAlgorithm': kwargs['eid_sign_algorithm'], } res = eid_verify(data) if res != 1: abort(res, 'eid信息与身份证信息不符') # 验证成功后,若用户当前的状态时待审核或者审核未通过,则将用户相关信息保存到数据库 if request.user.is_verified in [0, 3]: for k in id_keys: if k in kwargs: setattr(request.user, k, kwargs[k]) # 积分相关 if not request.user.id_card: request.user.score += get_score_stage(5) request.user.score_records.create(score=get_score_stage(5), type="初始数据", description="首次Eid认证") # 将实名认证状态码改为4表示EID认证通过 request.user.is_verified = 4 request.user.save() abort(200)
def post(self, request, team): """令当前用户关注team""" if request.user.followed_teams.filter(followed=team).exists(): abort(403, '已经关注过该团队') request.user.followed_teams.create(followed=team) request.user.score += get_score_stage(1) request.user.score_records.create(score=get_score_stage(1), type="活跃度", description="增加一个关注") team.score += get_score_stage(1) team.score_records.create(score=get_score_stage(1), type="受欢迎度", description="增加一个关注") request.user.save() team.save() abort(200)
def post(self, request, user): """令当前用户关注user""" if request.user.followed_users.filter(followed=user).exists(): abort(403, '已经关注过') request.user.followed_users.create(followed=user) # 积分 request.user.score += get_score_stage(1) request.user.score_records.create(score=get_score_stage(1), type="活跃度", description="增加关注") user.score += get_score_stage(1) user.score_records.create(score=get_score_stage(1), type="受欢迎度", description="被关注") request.user.save() user.save() abort(200)
def post(self, request, type, **kwargs): """增加一条经历""" if check_bad_words(kwargs['description']): abort(400, '含有非法词汇') request.user.experiences.create(type=type, description=kwargs['description'], unit=kwargs['unit'], profession=kwargs['profession'], degree=kwargs['degree'], time_in=kwargs['time_in'], time_out=kwargs['time_out']) request.user.score += get_score_stage(3) request.user.score_records.create(score=get_score_stage(3), type="活跃度", description="增加一条经历") request.user.save() abort(200)
def __add_invited_users(self, user, codes): for c in codes: u = User.enabled.filter(invitation_code=c) if not u: abort(404, '推荐码错误') user.invited.add(u) u.score_records.create(score=get_score_stage(4), type="活跃度", description="邀请码被使用")
def post(self, request, need): """将需求标记成已满足""" if request.user != need.team.owner: abort(403, '只有队长可以操作') need.status = 1 need.save() request.user.score += get_score_stage(1) request.user.score_records.create(score=get_score_stage(1), type="能力", description="将团队需求标记为已满足") need.team.score += get_score_stage(1) need.team.score_records.create(score=get_score_stage(1), type="能力", description="将团队需求标记为已满足") request.user.save() need.team.save() abort(200)
def post(self, request): """上传用户头像""" icon = request.FILES.get('image') if not icon: abort(400, '头像上传失败') filename = save_uploaded_image(icon) if filename: if not request.user.icon: request.user.score += get_score_stage(3) request.user.score_records.create(score=get_score_stage(3), type="初始数据", description="首次上传头像") request.user.icon = filename request.user.save() return JsonResponse({'icon_url': request.user.icon}) abort(500, '头像保存失败')
def delete(self, request, team): """令当前用户取消关注team""" qs = request.user.followed_teams.filter(followed=team) if qs.exists(): # 积分 request.user.score -= get_score_stage(1) request.user.score_records.create(score=-get_score_stage(1), type="活跃度", description="取消关注") team.score -= get_score_stage(1) team.score_records.create(score=-get_score_stage(1), type="受欢迎度", description="取消关注") request.user.save() team.save() qs.delete() abort(200) abort(403, '未关注过该团队')
def delete(self, request, user): """令当前用户取消关注user""" qs = request.user.followed_users.filter(followed=user) if qs.exists(): # 积分 request.user.score -= get_score_stage(1) request.user.score_records.create(score=-get_score_stage(1), type="活跃度", description="取消关注") user.score -= get_score_stage(1) user.score_records.create(score=-get_score_stage(1), type="受欢迎度", description="被关注取消") request.user.save() user.save() qs.delete() abort(200) abort(403, '未关注过该用户')
def create_undertake_need(self, request, team, **kwargs): if check_bad_words(kwargs["title"]) or check_bad_words( kwargs["description"]): abort(400, '含有非法词汇') team_needs = TeamNeed.objects.filter(team=team, type=2) if team_needs.count() == 0: team.score += get_score_stage(2) team.score_records.create(score=get_score_stage(2), type="初始数据", description="首次发布团队需求") team.save() n = team.needs.create(type=2) for k in kwargs: setattr(n, k, kwargs[k]) n.save() # 发布动态 action.send_member_need(team, n) # 增加积分 request.user.score += get_score_stage(1) request.user.score_records.create(score=get_score_stage(1), type="能力", description="发布一个团队需求") team.score += get_score_stage(1) team.score_records.create(score=get_score_stage(1), type="活跃度", description="发布一个团队需求") request.user.save() team.save() abort(200)
def post(self, request, team, **kwargs): """发布外包任务 :param: executor_id: 执行者ID :param: title: 标题 :param: content: 内容 :param: expend: 预计费用 :param;deadline: 截止时间 """ if check_bad_words(kwargs["title"]) or check_bad_words( kwargs["content"]): abort(400, '含有非法词汇') if request.user != team.owner: abort(403, '只有队长可以操作') executor_id = kwargs.pop('executor_id') executor = None try: executor = Team.enabled.get(id=executor_id) except ObjectDoesNotExist: abort(401, '执行者不存在') if not team.members.filter(user=executor.owner).exists(): abort(403, '执行者非团队成员') t = team.outsource_external_tasks.create(status=0, executor=executor, deadline=kwargs['deadline']) for k in kwargs: setattr(t, k, kwargs[k]) t.save() request.user.score += get_score_stage(1) request.user.score_records.create(score=get_score_stage(1), type="能力", description="发布一个外部任务") team.score += get_score_stage(1) team.score_records.create(score=get_score_stage(1), type="能力", description="发布一个外部任务") request.user.save() team.save() abort(200)
def post(self, request): """上传其他证件照片""" checkIdVerified(request.user) if request.user.is_role_verified: abort(403, '已经通过认证') other_card = request.FILES.get('image') if not other_card: abort(400, '图片上传失败') filename = save_uploaded_image(other_card, is_private=True) if filename: if not request.user.other_card: request.user.score += get_score_stage(5) request.user.score_records.create(score=get_score_stage(5), type="初始数据", description="首次身份认证") request.user.other_card = filename request.user.save() abort(200) abort(500, '图片保存失败')
def post(self, request, entity): """对某个对象点赞""" if not entity.likers.filter(liker=request.user).exists(): entity.likers.create(liker=request.user) # 积分 request.user.score += get_score_stage(1) request.user.score_records.create(score=get_score_stage(1), type="活跃度", description="给他人点赞") # 特征模型 if isinstance(entity, User): record_like_user(request.user, entity) elif isinstance(entity, UserAction): record_like_user(request.user, entity.entity) elif isinstance(entity, Team): record_like_team(request.user, entity) elif isinstance(entity, TeamAction): record_like_user(request.user, entity.entity) else: pass request.user.save() abort(200)
def post(self, request, need, user): """将目标用户添加为自己的团队成员(对方需发送过人员需求下的加入团队申请)""" if request.user != need.team.owner: abort(403, '只有队长可以操作') if not need.member_requests.filter(sender=user): abort(403, '对方未发送申请') # 若对方已是团队成员则不做处理 if need.team.members.filter(user=user).exists(): abort(200) # 在事务中建立关系,并删除对应的加团队申请 with transaction.atomic(): need.member_requests.filter(sender=user).delete() # 保存需求的加入成员Id if len(need.members) > 0: need.members = need.members + "|" + str(user.id) else: need.members = str(user.id) need.save() need.team.members.create(user=user) action.join_team(user, need.team) # 积分 request.user.score += get_score_stage(1) request.user.score_records.create(score=get_score_stage(1), type="能力", description="加入团队成功") need.team.score += get_score_stage(1) need.team.score_records.create(score=get_score_stage(1), type="能力", description="成功招募一个成员") request.user.save() need.team.save() abort(200)
def post(self, request): """上传身份证照片""" # 等待审核或者已通过审核不能上传照片 if request.user.is_verified in [1, 2]: abort(403, '等待审核或已实名认证') if request.user.is_verified == 4: abort(403, '已通过eid认证') id_card = request.FILES.get('image') if not id_card: abort(400, '图片上传失败') filename = save_uploaded_image(id_card, is_private=True) if filename: if not request.user.id_card: request.user.score += get_score_stage(5) request.user.score_records.create(score=get_score_stage(5), type="初始数据", description="首次实名认证") request.user.id_card = filename request.user.save() abort(200) abort(500, '图片保存失败')
def post(self, request, team, name, description, tags): """发布成果 :param description: 成果描述 :return: achievement_id: 成果id """ if request.user != team.owner: abort(403, '只有队长可以操作') if check_bad_words(description): abort(400, '含有非法词汇') achievement_num = team.achievements.count() if achievement_num == 0: team.score += get_score_stage(2) team.score_records.create(score=get_score_stage(2), type="初始数据", description="首次发布团队成果") achievement = Achievement(team=team, name=name, description=description, user=request.user, tags=tags) picture = request.FILES.get('image') if picture: filename = save_uploaded_image(picture) if filename: achievement.picture = filename else: abort(400, '图片上传失败') achievement.save() request.user.score += get_score_stage(1) request.user.score_records.create(score=get_score_stage(1), type="能力", description="发布一个团队成果") request.user.save() team.score += get_score_stage(1) team.score_records.create(score=get_score_stage(1), type="活跃度", description="发布一个团队成果") team.save() return JsonResponse({'achievement_id': achievement.id, 'code': 0})
def post(self, request, task, expend_actual=None, pay_time=None, status=None): """ 修改外部任务的状态(默认为None, 后台确认任务是按时还是超时完成) :param expend_actual: 实际支付金额(确认支付时传) :param pay_time: 支付时间(确认支付时传) :param status: 任务状态 - ('等待接受', 0), ('再派任务', 1), ('等待完成', 2), ('等待验收', 3), ('再次提交', 4), ('等待支付', 6), ('再次支付', 7), ('等待确认', 8), ('按时结束', 9),('超时结束', 10) """ if request.user != task.team.owner \ and request.user != task.executor.owner: abort(403, '非法操作') if status is None: if request.user != task.executor.owner or task.status != 8: abort(403, '非法操作') task.finish_time = timezone.now() if task.finish_time.date() > task.deadline: task.status = 10 else: task.status = 9 # 积分 task.executor.score += get_score_stage(1) task.executor.score_records.create(score=get_score_stage(1), type="能力", description="完成一个外部任务") task.team.score += get_score_stage(1) task.team.score_records.create(score=get_score_stage(1), type="能力", description="队友完成一个外部任务") task.executor.save() task.team.save() task.save() # 发动态 action.finish_external_task(task.executor, task) abort(200) elif status == 0: if request.user != task.team.owner or task.status != 1: abort(403, '非法操作') else: # 如果任务状态为再派任务-->等待接受,则分派次数+1 task.assign_num += 1 elif status == 1: if request.user != task.executor.owner or task.status != 0: abort(403, '非法操作') elif status == 2: if request.user != task.executor.owner or task.status != 0: abort(403, '非法操作') elif status == 3: if request.user != task.executor.owner \ or (task.status not in [2, 4]): abort(403, '非法操作') elif task.status == 4: # 如果任务状态为再次提交-->等待验收,则提交次数+1 task.submit_num += 1 elif status == 4: if request.user != task.team.owner or task.status != 3: abort(403, '非法操作') elif status == 6: if request.user != task.team.owner or task.status != 3: abort(403, '非法操作') elif status == 7: if request.user != task.executor.owner or task.status != 8: abort(403, '非法操作') elif status == 8: if request.user != task.team.owner or (task.status not in [6, 7]): abort(403, '非法操作') elif task.status == 7: # 如果任务状态为再次支付-->等待确认,则支付次数+1 task.pay_num += 1 # 获取任务的支付信息 if expend_actual is None or pay_time is None: abort(404, '参数不全') else: task.expend_actual = expend_actual task.pay_time = pay_time else: abort(400, '状态参数错误') task.status = status task.save() abort(200)
def post(self, request, task, status=None): """ 修改内部任务的状态(默认为None, 后台确认任务是按时还是超时完成) :param status: 要修改的任务状态 - ('等待接受', 0), ('再派任务', 1), ('等待完成', 2), ('等待验收', 3), ('再次提交', 4), ('按时结束', 5), ('超时结束', 6), ('终止', 7) """ if request.user != task.team.owner and request.user != task.executor: abort(403, '非法操作') # 任务已经终止,不允许操作 if task.status == 7: abort(403, '任务已结束') if status is None: if request.user != task.team.owner or task.status != 3: abort(403, '非法操作') task.finish_time = timezone.now() if task.finish_time.date() > task.deadline: task.status = 6 else: task.status = 5 # 积分 task.executor.score += get_score_stage(1) task.executor.score_records.create(score=get_score_stage(1), type="能力", description="完成一个内部任务") task.team.score += get_score_stage(1) task.team.score_records.create(score=get_score_stage(1), type="能力", description="队友完成一个内部任务") task.executor.save() task.team.save() task.save() abort(200) elif status == 0: if request.user != task.team.owner or task.status != 1: abort(403, '非法操作') else: # 如果任务状态为再派任务-->等待接受,则分派次数+1 task.assign_num += 1 elif status == 1: if request.user != task.executor or task.status != 0: abort(403, '非法操作') elif status == 2: if request.user != task.executor or task.status != 0: abort(403, '非法操作') elif status == 3: if request.user != task.executor or (task.status not in [2, 4]): abort(403, '非法操作') elif task.status == 4: # 如果任务状态为再次提交-->等待验收,则提交次数+1 task.submit_num += 1 elif status == 4: if request.user != task.team.owner or task.status != 3: abort(403, '非法操作') elif status == 7: if request.user != task.team.owner or task.status != 1: abort(403, '非法操作') else: abort(400, '状态参数错误') task.status = status task.save() abort(200)