レンダリング
インターフェイスの分析
上記の結果は、主に書籍の詳細ページのようなエントリポイントで、図に見ることができます。
書籍の詳細ページには、次の機能と親指に関連しているがあります。
- 状態親指を取得します。
- 親指アップ
- 親指をキャンセル
だから、理論的には親指関連のインターフェイスを持つプロジェクトは、以上の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 表的数据 destroy
とbook 表的数据 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
})
})
}
上記は、この紹介です。
世間の注目のスキャンコード番号が、光にプルアップ。