フルスタックアイテム|小さな本棚|サーバー-NodeJS + Koa2機能親指を実現

レンダリング

ここに画像を挿入説明

インターフェイスの分析

上記の結果は、主に書籍の詳細ページのようなエントリポイントで、図に見ることができます。
書籍の詳細ページには、次の機能と親指に関連しているがあります。

  • 状態親指を取得します。
  • 親指アップ
  • 親指をキャンセル

だから、理論的には親指関連のインターフェイスを持つプロジェクトは、以上の3です。

モデル設計親指

今インターフェイスの数をクリアし、次のステップは、対応するインターフェイスを設計することmodelによって、modelテーブルを生成するlikeデータ親指内に格納され、。

だから、どのようなデータは、親指が存在する必要がありますか?

この単純な分析の後、親指の情報を記録するだけで、次の情報を保存するために必要とされています。

  • 親指アップ id
  • 図書 id
  • ユーザー id
  • created_at
  • deleted_at
  • updated_at

以下のように最終的にはデータベーステーブルに生成されました:
ここに画像を挿入説明

状態親指を取得します。

本の詳細ページの書籍のような状態に応じて異なる点を表示する必要がありますiconアイコン。

親指の状態を取得する方法は?

ただ、したいlike現在の転送で見る用户id书籍id検索することができます。ユーザーの本は、データおよびその逆何を賞賛されていないという点を証明するデータがあります。

コードの具体的な実現:

// 获取书籍的喜欢状态
    static async userLikeIt(uid, bid) {
        const like = await Like.findOne({
            where: {
                bkid: bid,
                uid: uid
            }
        })
        return like ? true : false
    }

上記のコードの戻り値によって、それが返されるようなユーザのポイントかどうかを判断するtrueユーザが他のない親指、親指の書籍を有することを示します。

親指を達成

状態のようなポイントを取得した後、我々は上をクリックすることができます点赞 icon親指アップや親指が機能を解除達成します。

、実現のポイントのように電流を流す必要性用户 id书籍 idを通じて、データがあるかどうかをデータベースクエリ、データのセーブポイントテーブル内のデータに結果を賞賛しています。次のように成功親指を促し、返されるデータの形式は次のとおりです。

{"msg":"ok","error_code":0,"request":"POST /v1/like"}

賞賛のユーザーのポイントは、書籍の賞賛と結ば点の数であるため、余分な作業を行うためのステップもあります。
そのユーザの親指アップや嫌い、書籍の親指の本テーブルの数も対応して増加または減少です。

擬似コードは次のよう:

static async like(uid,bkid){
        const like = await Like.findOne({
            where: {
                uid: uid,
                bkid: bkid
            }
        })
       
        if (like) {
            throw new global.errs.NotFound("喜欢失败", NotFound.LIKE_FAIL)
        }
        return sequelize.transaction(async t => {
            await Like.create({
                uid,
                bkid
            }, {
                transaction: t
            })
            const book = await Book.detail(bkid)
            await book.increment('like_count', {
                by: 1,
                transaction: t
            })
        })
    }

使用してデータベースに上記のコード事务の機能を。具体的な事务説明は、この記事を参照してもよいjavaweb研究の概要(三〇から八) -トランザクション

この問題を回避するために、トランザクションを使用して、データの正確性に同じ時間ではなく、リードで動作させることが可能であるので、この本のようなポイントの数。

親指を達成キャンセル

機能の親指を取り消し、親指は実際に、インタフェースをインタフェースを使用して、適切な治療を行い、その後、キャンセル親指アップや親指を区別するカテゴリを追加することができます。ここでの私のポイントは、ザンビアのインターフェースをキャンセルするように設計されています。

機能を渡す必要が親指キャンセル用户 id书籍 idに従って、2つのidデータベースを照会します。照会データlike 表的数据 destroybook 表的数据 decrementすることができます。

擬似コードは以下のように:

 static async disLike(uid,bid){
        let like = await Like.findOne({
            uid: uid,
            bkid: bid
        })
        if (!like) {
            throw new global.errs.NotFound("不喜欢失败", NotFound.UN_LIKE_FAIL)
        }
        // Favor 表 favor 记录
        return sequelize.transaction(async t => {
            await like.destroy({
                force: true,
                transaction: t
            })
            const book = await Book.detail(bid)
            await book.decrement('like_count', {
                by: 1,
                transaction: t
            })
        })
    }

上記は、この紹介です。


世間の注目のスキャンコード番号が、光にプルアップ。

ここに画像を挿入説明

おすすめ

転載: www.cnblogs.com/gdragon/p/12003991.html