렌더링
인터페이스 분석
위의 결과는 주로 책의 세부 정보 페이지처럼 진입 점에서,도에서 볼 수 있습니다.
이 책의 세부 정보 페이지에는 다음과 같은 기능을 가지고 있으며, 엄지 손가락은 관련이 있습니다 :
- 상태 엄지 손가락을 가져 오기
- 엄지 손가락
- 엄지 손가락을 취소
그래서 이론적으로 엄지 손가락을 관련 인터페이스 프로젝트 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
두 개의에 따라 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
})
})
}
위이 소개합니다.
대중의 관심의 스캔 코드 번호는 빛을냅니다.