def member_invite_send(request, teamName): team = get_object_or_404_custom(Team, name=teamName) memberNickname = get_value_or_error(request.data, "memberNickname") invitingMessage = get_object_or_None(request.data, "invitingMessage") member = get_object_or_404_custom(CustomProfile, nickname=memberNickname).user if not (team.representative == request.user or request.user.is_staff): return Response(f"당신은 팀 {teamName}'의 대표가 아닙니다. 초대 요청을 보낼 수 없습니다.", status=status.HTTP_401_UNAUTHORIZED) if memberNickname == request.user.customProfile.nickname: return Response("스스로를 초대할 수 없습니다.", status=status.HTTP_403_FORBIDDEN) elif member in team.members.all(): return Response( f"멤버 {memberNickname}는 이미 팀 {teamName}의 멤버입니다. 초대할 수 없습니다.", status=status.HTTP_403_FORBIDDEN) elif get_object_or_None(TeamInvite, team=team, invitee=member): return Response( f"당신은 {memberNickname}을 to team {teamName}에 이미 초대했습니다. ", status=status.HTTP_403_FORBIDDEN) if team.members.all().count() + TeamInvite.objects.filter( team=team).count() > 10: return Response("팀원은 최대 10명입니다.", status=status.HTTP_400_BAD_REQUEST) TeamInvite.objects.create( team=team, invitee=member, ) return Response(status=status.HTTP_200_OK)
def change_representative(request, teamName): team = get_object_or_404_custom(Team, name=teamName) memberNickname = get_value_or_error(request.data, "memberNickname") if team.representative == request.user or request.user.is_staff: member = get_object_or_404_custom(CustomProfile, nickname=memberNickname).user team.representative = member team.save() return Response(status=status.HTTP_200_OK) else: return Response(status=status.HTTP_401_UNAUTHORIZED)
def member_invite_cancel(request, teamName): team = get_object_or_404_custom(Team, name=teamName) memberNickname = get_value_or_error(request.data, "memberNickname") member = get_object_or_404_custom(CustomProfile, nickname=memberNickname).user teamInvite = get_object_or_404_custom(TeamInvite, team=team, invitee=member) if team.representative == request.user or request.user.is_staff: teamInvite.delete() return Response(status=status.HTTP_200_OK) else: return Response( f"당신은 팀 {teamName}'의 대표도 관리자도 아닙니다. 멤버 초대 요청을 취소할 수 없습니다.", status=status.HTTP_401_UNAUTHORIZED)
def member_invite_accept(request, teamName): team = get_object_or_404_custom(Team, name=teamName) teamInvite = get_object_or_404_custom(TeamInvite, team=team, invitee=request.user) if not (teamInvite.invitee == request.user or request.user.is_staff): return Response(f"당신은 팀 {teamName}'의 초대를 받지 않았습니다.", status=status.HTTP_401_UNAUTHORIZED) isAccepted = get_object_or_404_custom(request.data, "isAccepted") if isAccepted: team.members.add(teamInvite.invitee) teamInvite.delete() return Response(status=status.HTTP_200_OK)
def get(self, request, pk): lecturePackage = get_object_or_404_custom(LecturePackage, pk=pk) lecturePackageComments = LecturePackageComment.objects.filter( lecturePackage=lecturePackage) serializer = LecturePackageCommentSerializer( lecturePackageComments, many=True, context={'user': request.user}) return Response(serializer.data)
def delete(self, request, teamName): team = get_object_or_404_custom(Team, name=teamName) if team.representative == request.user or request.user.is_staff: team.delete() return Response(status=status.HTTP_200_OK) return Response(status=status.HTTP_401_UNAUTHORIZED)
def DeleteContestFileWithPK(request, pk): if not request.user.is_staff: Response(status=status.HTTP_403_FORBIDDEN) contestFile = get_object_or_404_custom(ContestFile, pk=pk) contestFile.delete() return Response(status=status.HTTP_200_OK)
def post(self, request, pk): lecturePackage = get_object_or_404_custom(LecturePackage, pk=pk) serializer = EduVideoLectureSerializer(data=request.data, context={"user": request.user}) if serializer.is_valid(): serializer.save(writer=request.user, lecturePackage_id=pk) return Response(data=serializer.data, status=status.HTTP_200_OK)
def get(self, request, pk): eduVideoLecture = get_object_or_404_custom(EduVideoLecture, pk=pk) eduVideoLectureComments = EduVideoLectureComment.objects.filter( eduVideoLecture=eduVideoLecture) serializer = EduVideoLectureCommentSerializer( eduVideoLectureComments, many=True, context={'user': request.user}) return Response(serializer.data)
def ContestCodeNoteLike(request, pk): contestCodenote = get_object_or_404_custom(ContestCodeNote, pk=pk) if contestCodenote.likes.filter(id=request.user.id).exists(): contestCodenote.likes.remove(request.user) return Response(status=status.HTTP_200_OK) else: contestCodenote.likes.add(request.user) return Response(status=status.HTTP_202_ACCEPTED)
def VelogCommentLike(request, pk): velogComment = get_object_or_404_custom(VelogComment, pk=pk) if velogComment.likes.filter(id=request.user.id).exists(): velogComment.likes.remove(request.user) return Response(status=status.HTTP_200_OK) else: velogComment.likes.add(request.user) return Response(status=status.HTTP_202_ACCEPTED)
def get_commentToQuestion(self, request, pk): commentToQuestion = get_object_or_404_custom(CommentToQuestion, pk=pk) if (not commentToQuestion.questionToManager.isPrivate) or \ commentToQuestion.isPrivileged(request): return commentToQuestion else: raise DDCustomException('당신은 이 commentToQuestion에 접근할 권한이 없습니다.', status_code=status.HTTP_401_UNAUTHORIZED)
def ContestScrap(request, pk): contest = get_object_or_404_custom(Contest, pk=pk) if contest not in request.user.customProfile.contestScraps.all(): request.user.customProfile.contestScraps.add(contest) return Response(status=status.HTTP_202_ACCEPTED) else: request.user.customProfile.contestScraps.remove(contest) return Response(status=status.HTTP_200_OK)
def team_invite_from_team(request, teamName): team = get_object_or_404_custom(Team, name=teamName) if not request.user in team.members.all(): return Response(data="팀 멤버만 볼 수 있습니다.", status=status.HTTP_401_UNAUTHORIZED) teamInvites = TeamInvite.objects.filter(team=team) serializer = TeamInviteSerializer(teamInvites, many=True) return Response(data=serializer.data, status=status.HTTP_200_OK)
def get(self, request, pk): lecturePackage = get_object_or_404_custom(LecturePackage, pk=pk) videoLectures = EduVideoLecture.objects.filter( lecturePackage=lecturePackage) serializer = EduVideoLecturesSerializer(videoLectures, many=True, context={"user": request.user}) return Response(serializer.data)
def VelogScrap(request, pk): velog = get_object_or_404_custom(Velog, pk=pk) if velog.scrapProfiles.filter(id=request.user.customProfile.id).exists(): request.user.customProfile.velogScraps.remove(velog) return Response(status=status.HTTP_200_OK) else: request.user.customProfile.velogScraps.add(velog) return Response(status=status.HTTP_202_ACCEPTED)
def get(self, request, pk): contest = get_object_or_404_custom(Contest, pk=pk) contestFiles = ContestFile.objects.filter(contest=contest) serializer = ContestFileSerializer(contestFiles, context={'user': request.user}, many=True) return Response(serializer.data)
def ContestCodenoteScrap(request, pk): contestCodenote = get_object_or_404_custom(ContestCodeNote, pk=pk) if contestCodenote.scrapProfiles.filter( id=request.user.customProfile.id).exists(): request.user.customProfile.codeNoteScraps.remove(contestCodenote) return Response(status=status.HTTP_200_OK) else: request.user.customProfile.codeNoteScraps.add(contestCodenote) return Response(status=status.HTTP_202_ACCEPTED)
def get_questionToManager(self, request, pk): questionToManager = get_object_or_404_custom(QuestionToManager, pk=pk) if (not questionToManager.isPrivate) \ or (request.user == questionToManager.writer) \ or request.user.is_staff: return questionToManager else: raise DDCustomException('당신은 이 questionToManager에 접근할 권한이 없습니다.', status_code=status.HTTP_401_UNAUTHORIZED)
def put(self, request, pk): notice = get_object_or_404_custom(Notice, pk=pk) serializer = NoticeSerializer(notice, data=request.data, partial=True, context={"user": request.user}) if serializer.is_valid(): # validate 로직 추가 serializer.save() return Response(serializer.data) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def ContestParticipantAnswerLike(request, pk): contestParticipantAnswer = get_object_or_404_custom( ContestParticipantAnswer, pk=pk) if contestParticipantAnswer not in request.user.contestAnswerLikes.all(): request.user.contestAnswerLikes.add(contestParticipantAnswer) return Response(status=status.HTTP_200_OK) else: request.user.contestAnswerLikes.remove(contestParticipantAnswer) return Response(status=status.HTTP_200_OK)
def post(self, request, pk): questionToManager = get_object_or_404_custom(QuestionToManager, pk=pk) if questionToManager.writer != request.user and \ not request.user.is_staff: return Response(status=status.HTTP_401_UNAUTHORIZED) commentToQuestion_id = request.data.get('commentToQuestion_id') if commentToQuestion_id: parent_commentToQuestion = get_object_or_404_custom(CommentToQuestion, pk=commentToQuestion_id) else: parent_commentToQuestion = None serializer = CommentToQuestionSerializerForPost(data=request.data) if serializer.is_valid(): commentToQuestion = serializer.save(writer=request.user, questionToManager=questionToManager, commentToQuestion=parent_commentToQuestion) returnSerializer = CommentToQuestionSerializer(commentToQuestion, context={"user": request.user}) return Response(returnSerializer.data) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def post(self, request, pk): # 프론트엔드에서 안 담아주면 none 으로 처리됨. parent_velogComment_id = request.data.get('velogComment_id') parent_velogComment = None if parent_velogComment_id: parent_velogComment = get_object_or_404_custom( VelogComment, pk=parent_velogComment_id) velog = get_object_or_404_custom(Velog, pk=pk) serializer = VelogCommentSerializerForPost(data=request.data) if serializer.is_valid(): velogComment = serializer.save(writer=request.user, velog=velog, velogComment=parent_velogComment) returnSerializer = VelogCommentSerializer( velogComment, context={"user": request.user}) return Response(returnSerializer.data) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def ContestCodeNoteCreateWithContestPk(request, pk): contest = get_object_or_404_custom(Contest, pk=pk) serializer = ContestCodeNoteSerializer(data=request.data) if serializer.is_valid(): contestCodeNote = serializer.save(writer=request.user, contest=contest) returnSerializer = ContestCodeNoteSerializer( contestCodeNote, context={'user': request.user}) return Response(returnSerializer.data) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def delete_user_pk(request, pk): user = get_object_or_404_custom(User, pk=pk) teams = Team.objects.filter(representative=user) for team in teams: if team.members.exclude(id=user.id): team.representative = team.members.exclude(id=request.user.id)[0] team.save() else: team.delete() user.delete() Response(status=status.HTTP_200_OK)
def put(self, request, pk): videoLecture = get_object_or_404_custom(EduVideoLecture, pk=pk) serializer = EduVideoLectureSerializer(videoLecture, data=request.data, partial=True) if serializer.is_valid(): # validate 로직 추가 videoLecture = serializer.save() return Response(EduVideoLectureSerializer(videoLecture).data) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def post(self, request, pk): lecturePackage = get_object_or_404_custom(LecturePackage, pk=pk) serializer = LecturePackageCommentSerializerForPostPUT( data=request.data, context={'user': request.user}) if serializer.is_valid(): comment = serializer.save(writer=request.user, lecturePackage=lecturePackage) return Response(LecturePackageCommentSerializer(comment).data) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def get(self, request, pk): questionToManager = get_object_or_404_custom(QuestionToManager, pk=pk) commentToQuestion = CommentToQuestion.objects.filter(questionToManager=questionToManager) if (not questionToManager.isPrivate) or \ request.user == questionToManager.writer or \ request.user.is_staff: serializer = CommentsToQuestionSerializer(commentToQuestion, many=True, context={"user": request.user}) return Response(serializer.data) else: return Response(status=status.HTTP_401_UNAUTHORIZED)
def put(self, request, teamName): team = get_object_or_404_custom(Team, name=teamName) if request.user != team.representative: return Response(status=status.HTTP_401_UNAUTHORIZED) defaultImage = get_object_or_404_custom(request.data, "defaultImage") if defaultImage: team.smallImage = "user_1/profile" team.image = "user_1/profile" team.save() return Response(status=status.HTTP_200_OK) image = get_object_or_None(request.data, "image") if image: team.smallImage = image team.image = image team.save() return Response(status=status.HTTP_200_OK) return Response(status=status.HTTP_400_BAD_REQUEST)
def member_delete(request, teamName): team = get_object_or_404_custom(Team, name=teamName) memberNickname = get_value_or_error(request.data, "memberNickname") member = get_object_or_404_custom(CustomProfile, nickname=memberNickname).user # 1. 관리자 2. 팀의 대표가 멥버를 강퇴 3. 팀 멤버가 자진 탈퇴 if request.user.is_staff or team.representative == request.user or member == request.user: if member == team.representative: if team.members.exclude(id=request.user.id): team.representative = list( team.members.exclude(id=request.user.id))[0] team.save() team.members.remove(member) else: team.delete() else: team.members.remove(member) return Response(status=status.HTTP_200_OK) else: return Response(status=status.HTTP_401_UNAUTHORIZED)