243일차 - 커뮤니티 앱개발 (11) : 게시글 & 댓글 수정, 삭제

2021. 8. 29. 22:23Diary/201~300

1. Kotlin : BoardUpdateActivity

class BoardUpdateActivity : AppCompatActivity() {

    // 값 전달 변수
    var share_access_token:String? = null
    var share_username:String? = null
    var share_nickname:String? = null
    var share_password:String? = null
    var share_profile:String? = null
    var share_user_type:String? = null
    var share_message:String? = null

    // 게시글 변수
    var share_board_id:String? = null
    var share_board_title:String? = null
    var share_board_content:String? = null

    // 댓글 변수
    var share_comment_id:String? = null
    var share_comment_content:String? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_board_update)

        val board_update_progress_layout = findViewById<LinearLayout>(R.id.board_update_progress_layout)
        board_update_progress_layout.bringToFront()

        // 값 가져오기
        share_access_token = intent.getStringExtra("access_token").toString()
        share_username = intent.getStringExtra("username").toString()
        share_board_id = intent.getStringExtra("board_id").toString()
        share_board_title = intent.getStringExtra("board_title").toString()
        share_board_content = intent.getStringExtra("board_content").toString()
        share_comment_id = intent.getStringExtra("comment_id").toString()
        share_comment_content = intent.getStringExtra("comment_content").toString()

        Log.d("TEST", "share_access_token : $share_access_token")
        Log.d("TEST", "share_username : $share_username")
        Log.d("TEST", "share_board_id : $share_board_id")
        Log.d("TEST", "share_comment_id : $share_comment_id")
        Log.d("TEST", "share_board_title : $share_board_title")
        Log.d("TEST", "share_board_content : $share_board_content")
        Log.d("TEST", "share_comment_content : $share_comment_content")

        // 전체 레이아웃 클릭 시, 포커스 해제
        board_update_all_layout.setOnClickListener {
            // 키보드 내리기
            val mInputMethodManager = this.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
            mInputMethodManager.hideSoftInputFromWindow(currentFocus?.windowToken, 0)
            // 포커스 해제
            board_update_title_input.clearFocus()
            board_update_content_input.clearFocus()
            comment_update_content_input.clearFocus()
        }
        board_update_main_layout.setOnClickListener {
            // 키보드 내리기
            val mInputMethodManager = this.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
            mInputMethodManager.hideSoftInputFromWindow(currentFocus?.windowToken, 0)
            // 포커스 해제
            board_update_title_input.clearFocus()
            board_update_content_input.clearFocus()
            comment_update_content_input.clearFocus()
        }

        val conn = Connect().connect(share_access_token)
        val mypage_api: MypageInterface = conn.create(MypageInterface::class.java)
        val board_api: BoardInterface = conn.create(BoardInterface::class.java)

        if(share_board_id != "null" && share_board_title != "null" && share_board_content != "null") {
            board_update_layout.visibility = View.VISIBLE
            board_update_title_input.setText(share_board_title)
            board_update_content_input.setText(share_board_content)
        } else {
            board_update_layout.visibility = View.GONE
        }
        if(share_comment_id != "null" && share_comment_content != "null") {
            comment_update_layout.visibility = View.VISIBLE
            comment_update_content_input.setText(share_comment_content)
        } else {
            comment_update_layout.visibility = View.GONE
        }

        // API 통신 : 유저 정보 가져오기
        mypage_api.getUserData(share_username!!).enqueue(object: Callback<GetUserData> {
            override fun onResponse(call: Call<GetUserData>, response: Response<GetUserData>) {
                val body = response.body()
                if(body != null) {
                    share_access_token = body.data.access_token
                    share_username = body.data.user_info[0].username
                    share_nickname = body.data.user_info[0].nickname
                    share_password = body.data.user_info[0].password
                    share_profile = body.data.user_info[0].profile
                    share_user_type = body.data.user_info[0].user_type
                    share_message = body.data.user_info[0].message
                }
                Log.d("TEST", "getUserData 통신성공 바디 -> $body")
            }

            override fun onFailure(call: Call<GetUserData>, t: Throwable) {
                Log.d("TEST", "getUserData 통신실패 에러 -> " + t.message)
            }
        })

        board_update_close_btn.setOnClickListener {
            var kkk_hash:HashMap<String, String> = HashMap()
            kkk_hash["access_token"] = share_access_token!!
            kkk_hash["username"] = share_username!!
            kkk_hash["nickname"] = share_nickname!!
            kkk_hash["password"] = share_password!!
            kkk_hash["profile"] = share_profile!!
            kkk_hash["user_type"] = share_user_type!!
            kkk_hash["message"] = share_message!!
            kkk_hash["move_status"] = "1"
            MoveActivity().chain_move(this, kkk_hash)
        }

        // 글 수정
        board_update_submit_btn.setOnClickListener {
            board_update_progress_layout.visibility = View.VISIBLE
            var board_parm:HashMap<String, String> = HashMap()
            board_parm["board_title"] = board_update_title_input.text.toString()
            board_parm["board_content"] = board_update_content_input.text.toString()
            // API 통신 : 글 수정
            board_api.updateBoard(share_board_id!!, board_parm).enqueue(object: Callback<UpdateBoardData> {
                override fun onResponse(call: Call<UpdateBoardData>, response: Response<UpdateBoardData>) {
                    board_update_progress_layout.visibility = View.GONE
                    val body = response.body()
                    if(body != null) {
                        var ggg_hash:HashMap<String, String> = HashMap()
                        ggg_hash["access_token"] = share_access_token!!
                        ggg_hash["username"] = share_username!!
                        ggg_hash["nickname"] = share_nickname!!
                        ggg_hash["password"] = share_password!!
                        ggg_hash["profile"] = share_profile!!
                        ggg_hash["user_type"] = share_user_type!!
                        ggg_hash["message"] = share_message!!
                        ggg_hash["move_status"] = "1"
                        MoveActivity().chain_move(this@BoardUpdateActivity, ggg_hash)
                    }
                    Log.d("TEST", "getUserData 통신성공 바디 -> $body")
                }

                override fun onFailure(call: Call<UpdateBoardData>, t: Throwable) {
                    board_update_progress_layout.visibility = View.GONE
                    Log.d("TEST", "getUserData 통신실패 에러 -> " + t.message)
                }
            })
        }

        // 댓글 수정
        comment_update_submit_btn.setOnClickListener {
            board_update_progress_layout.visibility = View.VISIBLE
            var comment_parm:HashMap<String, String> = HashMap()
            comment_parm["comment_content"] = comment_update_content_input.text.toString()
            // API 통신 : 댓글 수정
            board_api.updateComment(share_comment_id!!, comment_parm).enqueue(object: Callback<UpdateCommentData> {
                override fun onResponse(call: Call<UpdateCommentData>, response: Response<UpdateCommentData>) {
                    board_update_progress_layout.visibility = View.GONE
                    val body = response.body()
                    if(body != null) {
                        var rrr_hash:HashMap<String, String> = HashMap()
                        rrr_hash["access_token"] = share_access_token!!
                        rrr_hash["username"] = share_username!!
                        rrr_hash["nickname"] = share_nickname!!
                        rrr_hash["password"] = share_password!!
                        rrr_hash["profile"] = share_profile!!
                        rrr_hash["user_type"] = share_user_type!!
                        rrr_hash["message"] = share_message!!
                        rrr_hash["move_status"] = "1"
                        MoveActivity().chain_move(this@BoardUpdateActivity, rrr_hash)
                    }
                    Log.d("TEST", "getUserData 통신성공 바디 -> $body")
                }

                override fun onFailure(call: Call<UpdateCommentData>, t: Throwable) {
                    board_update_progress_layout.visibility = View.GONE
                    Log.d("TEST", "getUserData 통신실패 에러 -> " + t.message)
                }
            })
        }

    }

    override fun onBackPressed() {
//        super.onBackPressed()
        Log.d("TEST", "MypageProfileUpdateActivity - onBackPressed")
        var zzz_hash:HashMap<String, String> = HashMap()
        zzz_hash["access_token"] = share_access_token!!
        zzz_hash["username"] = share_username!!
        zzz_hash["nickname"] = share_nickname!!
        zzz_hash["password"] = share_password!!
        zzz_hash["profile"] = share_profile!!
        zzz_hash["user_type"] = share_user_type!!
        zzz_hash["message"] = share_message!!
        zzz_hash["move_status"] = "1"
        MoveActivity().chain_move(this, zzz_hash)
    }

    override fun onPause() {
        super.onPause()
        Log.d("TEST", "MypageProfileUpdateActivity - onPause")
    }

    override fun onResume() {
        super.onResume()
        Log.d("TEST", "MypageProfileUpdateActivity - onResume")
    }

    override fun onStop() {
        super.onStop()
        Log.d("TEST", "MypageProfileUpdateActivity - onStop")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.d("TEST", "MypageProfileUpdateActivity - onDestroy")
    }
}

 

2. Django : BoardUpdate, CommentUpdate

class BoardUpdate(generics.RetrieveUpdateAPIView):
    queryset = BoardModel.objects.all()
    serializer_class = BoardSerializer
    ordering = ['id']
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['board_title', 'board_content', 'board_type']
    lookup_field = 'id'

    def get(self, request, *args, **kwargs):
        pass

    def put(self, request, *args, **kwargs):
        if validation(request.headers):
            partial = kwargs.pop('partial', False)
            instance = self.get_object()
            serializer = self.get_serializer(instance, data=request.data, partial=partial)
            serializer.is_valid(raise_exception=True)
            self.perform_update(serializer)

            if getattr(instance, '_prefetched_objects_cache', None):
                instance._prefetched_objects_cache = {}

            return JsonResponse(json_success("S0002", serializer.data), status=status.HTTP_200_OK)
        else:
            return JsonResponse(json_error("E0007"), status=status.HTTP_400_BAD_REQUEST)


class CommentUpdate(generics.RetrieveUpdateAPIView):
    queryset = CommentModel.objects.all()
    serializer_class = CommentSerializer
    ordering = ['id']
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['comment_title', 'comment_content', 'comment_username']
    lookup_field = 'id'

    def get(self, request, *args, **kwargs):
        pass

    def put(self, request, *args, **kwargs):
        if validation(request.headers):
            partial = kwargs.pop('partial', False)
            instance = self.get_object()
            serializer = self.get_serializer(instance, data=request.data, partial=partial)
            serializer.is_valid(raise_exception=True)
            self.perform_update(serializer)

            if getattr(instance, '_prefetched_objects_cache', None):
                instance._prefetched_objects_cache = {}

            return JsonResponse(json_success("S0002", serializer.data), status=status.HTTP_200_OK)
        else:
            return JsonResponse(json_error("E0007"), status=status.HTTP_400_BAD_REQUEST)