增加点赞和收藏相关api
This commit is contained in:
parent
fb82166f64
commit
d84a3c183d
112
src/controllers/gameext.controller.ts
Normal file
112
src/controllers/gameext.controller.ts
Normal file
@ -0,0 +1,112 @@
|
||||
import BaseController from '../common/base.controller'
|
||||
import { role, router } from '../decorators/router'
|
||||
import { ZanInfo } from '../models/ZanInfo'
|
||||
import { ZError } from '../common/ZError'
|
||||
import { AccountCollect } from '../models/AccountCollect'
|
||||
|
||||
class GameExtController extends BaseController {
|
||||
/**
|
||||
* 获取游戏点赞信息
|
||||
*/
|
||||
@role('anon')
|
||||
@router('post /api/svr/zan/info')
|
||||
async reqZanInfosList(req: any) {
|
||||
let { accountId, games, type } = req.params
|
||||
type = type || 'game'
|
||||
let records = await ZanInfo.find({ recordId: { $in: games }, type })
|
||||
let results: any = {}
|
||||
for (let record of records) {
|
||||
let data = record.toJson()
|
||||
let did = 0
|
||||
if (accountId) {
|
||||
did = data.accounts.findIndex(o => o === accountId) > -1 ? 1 : 0
|
||||
}
|
||||
results[record.recordId] = { count: record.count, did }
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
/**
|
||||
* 为一个游戏点赞或取消点赞
|
||||
*/
|
||||
@role('anon')
|
||||
@router('post /api/svr/zan/update')
|
||||
async updateGameZan(req: any) {
|
||||
let { accountId, game, type, act } = req.params
|
||||
type = type || 'game'
|
||||
if (!accountId) {
|
||||
throw new ZError(11, 'accountId needed')
|
||||
}
|
||||
if (!game) {
|
||||
throw new ZError(12, 'gameId needed')
|
||||
}
|
||||
let record = await ZanInfo.insertOrUpdate({ recordId: game, type }, {})
|
||||
const index = record.accounts.indexOf(accountId)
|
||||
if (act) {
|
||||
if (index > -1) {
|
||||
throw new ZError(13, 'already had')
|
||||
}
|
||||
record.count += 1
|
||||
record.accounts.push(accountId)
|
||||
await record.save()
|
||||
} else {
|
||||
if (index === -1) {
|
||||
throw new ZError(13, 'not had')
|
||||
}
|
||||
record.count -= 1
|
||||
record.accounts.splice(index, 1)
|
||||
await record.save()
|
||||
}
|
||||
return { count: record.count }
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取某玩家收藏信息
|
||||
*/
|
||||
@role('anon')
|
||||
@router('post /api/svr/collect/list')
|
||||
async collectList(req: any) {
|
||||
let { accountId, type } = req.params
|
||||
type = type || 'game'
|
||||
let record = await AccountCollect.insertOrUpdate({ accountId }, {})
|
||||
let results = []
|
||||
for (let _d of record.games) {
|
||||
if (_d.type === type) {
|
||||
results.push(_d.recordId)
|
||||
}
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
/**
|
||||
* 收藏或取消收藏
|
||||
*/
|
||||
@role('anon')
|
||||
@router('post /api/svr/collect/update')
|
||||
async updateCollect(req: any) {
|
||||
let { accountId, game, type, act } = req.params
|
||||
type = type || 'game'
|
||||
if (!accountId) {
|
||||
throw new ZError(11, 'accountId needed')
|
||||
}
|
||||
if (!game) {
|
||||
throw new ZError(12, 'gameId needed')
|
||||
}
|
||||
let record = await AccountCollect.insertOrUpdate({ accountId }, {})
|
||||
let index = record.games.findIndex(o => o.recordId === game && o.type === type)
|
||||
let exists = index > -1
|
||||
if (act) {
|
||||
if (exists) {
|
||||
throw new ZError(13, 'already add')
|
||||
}
|
||||
record.games.push({ recordId: game, type })
|
||||
} else {
|
||||
if (!exists) {
|
||||
throw new ZError(13, 'not add')
|
||||
}
|
||||
record.games.splice(index, 1)
|
||||
}
|
||||
await record.save()
|
||||
return {}
|
||||
}
|
||||
}
|
41
src/models/AccountCollect.ts
Normal file
41
src/models/AccountCollect.ts
Normal file
@ -0,0 +1,41 @@
|
||||
import { dbconn } from '../decorators/dbconn'
|
||||
import { getModelForClass, index, modelOptions, prop, ReturnModelType } from '@typegoose/typegoose'
|
||||
import { BaseModule } from './Base'
|
||||
import { customAlphabet } from 'nanoid'
|
||||
const nanoid = customAlphabet('2345678abcdefghjkmnpqrstwxy', 32)
|
||||
|
||||
const jsonExcludeKeys = ['updatedAt', '__v', '_id', 'createdAt', 'isBot', 'type']
|
||||
|
||||
class RecordInfo {
|
||||
@prop()
|
||||
public recordId: string
|
||||
@prop()
|
||||
public type: string
|
||||
}
|
||||
/**
|
||||
* 存储用户收藏信息
|
||||
*/
|
||||
@dbconn()
|
||||
@index({ accountId: 1 }, { unique: true })
|
||||
@modelOptions({
|
||||
schemaOptions: { collection: 'account_collect', timestamps: true },
|
||||
})
|
||||
class AccountCollectClass extends BaseModule {
|
||||
@prop()
|
||||
accountId: string
|
||||
@prop({ type: () => [RecordInfo], default: [] })
|
||||
games: RecordInfo[]
|
||||
|
||||
public toJson(): any {
|
||||
let result: any = {}
|
||||
// @ts-ignore
|
||||
for (let key in this._doc) {
|
||||
if (jsonExcludeKeys.indexOf(key) == -1) {
|
||||
result[key] = this[key]
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
export const AccountCollect = getModelForClass(AccountCollectClass, { existingConnection: AccountCollectClass.db })
|
40
src/models/ZanInfo.ts
Normal file
40
src/models/ZanInfo.ts
Normal file
@ -0,0 +1,40 @@
|
||||
import { dbconn } from '../decorators/dbconn'
|
||||
import { getModelForClass, index, modelOptions, prop } from '@typegoose/typegoose'
|
||||
import { BaseModule } from './Base'
|
||||
|
||||
const jsonExcludeKeys = ['updatedAt', '__v', '_id', 'createdAt', 'isBot', 'type']
|
||||
|
||||
/**
|
||||
* 存储游戏, 文章等的点赞信息
|
||||
*/
|
||||
@dbconn()
|
||||
@index({ recordId: 1, type: 1 }, { unique: true })
|
||||
@modelOptions({
|
||||
schemaOptions: { collection: 'zan_info', timestamps: true },
|
||||
})
|
||||
class ZanInfoClass extends BaseModule {
|
||||
@prop()
|
||||
recordId: string
|
||||
|
||||
@prop()
|
||||
type: string
|
||||
|
||||
@prop({ default: 0 })
|
||||
count: number
|
||||
|
||||
@prop({ type: () => [String], default: [] })
|
||||
accounts: string[]
|
||||
|
||||
public toJson(): any {
|
||||
let result: any = {}
|
||||
// @ts-ignore
|
||||
for (let key in this._doc) {
|
||||
if (jsonExcludeKeys.indexOf(key) == -1) {
|
||||
result[key] = this[key]
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
export const ZanInfo = getModelForClass(ZanInfoClass, { existingConnection: ZanInfoClass.db })
|
Loading…
x
Reference in New Issue
Block a user