blockchain에서 글 수정 기능의 구현.

in #kr-dev6 years ago

데블은 구현하면서 생긴 하루하루의 개발일지를 글로 남기려고 합니다. 다소 일기와 생각의 흐름처럼 써내려가는 부분에는 양해를 해주시면 감사하겠습니다.


중간에 mongodb가 있고 일정 기간 별로 mongodb의 내용을 blockchain에 sync함. 단 sync의 기간은 글의 길이에 따라서 달라짐.

기존이 글을 쓰는 function은..

  app.post("/write", function(req, res) { 
      
    /* some server side logic */

      var user = req.body.user;
      var data = req.body.data;
      console.log("write event", user, data);
      //save this data to mongoDB//
      saveData(user, data);
      res.send("done");
  });

Express로 /write요청을 받아서, parameter를 parsing하여 user,와 user가 쓴 데이터를 db에 저장함. 사실 session id를 사용하기 때문에 user를 받을 필요는 없지만, 이는 session이라는 개념을 알기전에 개발한 api여서 일단은 user를 parameter로 받음.

이렇게 쓰여진 글에 수정 기능은 다음과 같이 제공할 수 있을 것 같음.

/edit 라는 post method를 제공하고, parameter로 글의 id값과 새로 수정한 data를 받음.
결과는 "success" or "fail" 로 return.

기존의 write는 아래와 같이 세부 함수를 부르고, saveData(user, data) 실패할 일이 없다는 가정으로 항상 "done"을 return함. done을 보내는 것이 기존의 naming규정에 맞지 않아서 success, fail로 앞으로는 통일을 하기로 함. By frontend engineer의 가이드.

기존의 saveData의 코드를 확인함.

//custom functions
function saveData(account, data){
    MongoClient.connect(url, function(err, db) {
        var dbo = db.db("heroku_dg3d93pq");
        var tod = Date.now();

        var myobj = { account : account, data : data, date : tod, voting : 0, payout : 0, steem : false };
        dbo.collection("board").insertOne(myobj, function(err, res){
                if (err) throw err;
                console.log("1 document inserted");
                db.close();   
        });
    }); 
}

제가 만든 것이지만 이름부터 마음에 들지 않음.....
saveData라니..

다행히도 insertOne을 하는 구조이고, DB에는 특별히 다른 값에 대해서 key설정이 되어 있지 않음.
글의 id를 받아서 updateOne을 하면 깔끔하게 기존 글을 수정할수 있음. 또한 글의 payout여부에 따라서 fail을 return할수도 있음.

따라서 기존의 saveData처럼 구현하는 것이 아니라 callback형식으로 구현해야 함.

우선 post method를 만듦.

  app.post("/edit", function(req, res) { 
    /* some server side logic */
      
      var postid = req.body.postid;
      var data = req.body.data;
      console.log("edit event", postid, data);
      //query Mongo DB
      editData(postid, data,(result) => {res.send(result)});
  });

딱히 마음에는 안들지만 관련함수도 saveData와 비슷하게 editData로 맞춤.
saveData와이 차이점은 editData뒷부분에 callback함수로 res.send가 추가됨.

이제 editData를 coding할 차례!.

function editData(postid, data, cb){
    //ToDo : payout data condition check
    MongoClient.connect(url, function(err, db) {
        var dbo = db.db("heroku_dg3d93pq");
        var myobj = { $set : {data : data}};
        var findquery = {_id : OBjectId(postid)};
        dbo.collection("board").updateOne(findquery, myobj, function(err, res){
            if (err) throw err;
            console.log("1 document modified");
            cb("success");
            db.close()
        });
    });
}

우선 간단하게 MVP로 구현하고 payout기간에 대한 것은 나중에 처리.

이제 unittest하고, 잠시후에 frontend engineer와 연동시험만 하면 끝!

Sort:  

이번생에 가능할지 모르겠지만, 아들낳으면 꼭 개발자시킬랍니다.

@dabble 님 dabble 코인 ? 개발 일기

eos 토큰 ? 코인 ? 인듯하고,
구체적으로는 아직 모르겠지만, 잼 있을 것 같군요.

dabble 코인이나 블록체인은 무엇하는 블록체인 인가요?

EOS 메인넷 기반 토큰 입니다. Social service입니다.!

좋은 정보 감사합니다.

블록체인이 조만간 도처에서 만개할 것 같은 느낌이 드네요.

성공적인 사업 되시기 기대합니다.

저도 관심을 가지고 찾아가 볼께요.

좋은 정보 감사합니다.

블록체인이 조만간 도처에서 만개할 것 같은 느낌이 드네요.

성공적인 사업 되시기 기대합니다.

저도 관심을 가지고 찾아가 볼께요.

좋은 정보 감사합니다.

블록체인이 조만간 도처에서 만개할 것 같은 느낌이 드네요.

성공적인 사업 되시기 기대합니다.

저도 관심을 가지고 찾아가 볼께요.

좋은 정보 감사합니다.

블록체인이 조만간 도처에서 만개할 것 같은 느낌이 드네요.

성공적인 사업 되시기 기대합니다.

저도 관심을 가지고 찾아가 볼께요.

session id를 check해서 다른 사용자가 수정을 못하게 막아야 함.
그런데 애초에 수정 버튼이 안보이게 해야 할텐데..

테디님 아이디 새로 따신거에요 ?

넵. 빙고!. 그들을 설득할 방법이 없어서 조용조용 숨어서 지내고 있습니다.

Coin Marketplace

STEEM 0.18
TRX 0.14
JST 0.030
BTC 58639.60
ETH 3167.30
USDT 1.00
SBD 2.43