diff --git a/doc/api.md b/doc/api.md index 3ea47fc..4d55aeb 100644 --- a/doc/api.md +++ b/doc/api.md @@ -402,6 +402,7 @@ | -------- | -------------------------------------- | | nickname | 昵称 | | avatar | 头像 | +| mobile | 手机号 | | sex | 性别 | | country | 国家 | | province | 省份 | diff --git a/src/api/controllers/game_user.controller.ts b/src/api/controllers/game_user.controller.ts index b52355c..06421ef 100644 --- a/src/api/controllers/game_user.controller.ts +++ b/src/api/controllers/game_user.controller.ts @@ -3,6 +3,7 @@ import { role, router } from '../../decorators/router' import { GameUser } from '../../models/GameUser' import { ZError } from '../../common/ZError' import { getRandom } from '../../utils/number.util' +import { UserReward } from '../../models/UserReward' class GameUserController extends BaseController { // TODO:: 增加返回未使用的券 @@ -21,6 +22,7 @@ class GameUserController extends BaseController { return {token} } + //TODO:: 根据真实的配表获取数据 @role('anon') @router('post /api/:accountid/stats') async userStatic(req: any) { @@ -43,4 +45,11 @@ class GameUserController extends BaseController { return data } + @role('anon') + @router('post /api/:accountid/tickets') + async userTickets(req: any) { + const { accountid } = req.params + return await UserReward.ticketList( accountid ) + } + } diff --git a/src/models/GameUser.ts b/src/models/GameUser.ts index d5e2961..14e3f29 100644 --- a/src/models/GameUser.ts +++ b/src/models/GameUser.ts @@ -18,6 +18,14 @@ class GameUserClass extends BaseModule { @prop() public avatar: string + /** + * 手机号 + * @type {string} + */ + @prop() + public mobile: string + + @prop({default: 0}) public sex?: string; @prop({default: 'CN'}) diff --git a/src/models/UserReward.ts b/src/models/UserReward.ts new file mode 100644 index 0000000..83bcc75 --- /dev/null +++ b/src/models/UserReward.ts @@ -0,0 +1,107 @@ +import { dbconn } from '../decorators/dbconn' +import { + getModelForClass, + index, + modelOptions, pre, + prop +} from '@typegoose/typegoose' +import { BaseModule } from './Base' +import { customAlphabet, } from 'nanoid' +import { Shop } from './shop/Shop' +import { Coupon } from './shop/Coupon' +import { getCouponUrl } from '../services/File' + +const nanoid = customAlphabet('2345678abcdefghjkmnpqrstwxy', 10) + +@dbconn() +@index({ accountId: 1}, { unique: false }) +@index({ accountId: 1, shop: 1}, { unique: false }) +@index({sid: 1}, {unique: true}) +@modelOptions({ schemaOptions: { collection: 'game_user_reward', timestamps: true } }) +@pre('save', async function() { + if (!this.sid) { + let sid = '' + while (!sid) { + sid = nanoid() + const records = await UserReward.find({sid}, {_id: 1}).limit(1); + (records.length > 0) && (sid = '') + } + this.sid = sid + } +}) +class UserRewardClass extends BaseModule { + @prop() + public sid: string + @prop() + public accountId: string + + @prop() + public shop: string + /** + * 挑战id + * @type {string} + */ + @prop() + public examId: string + + /** + * 活动id + * @type {string} + */ + @prop() + public activityId: string + + @prop() + public sessionId: string + /** + * 券的id + * @type {string} + */ + @prop() + public coupon: string + + /** + * 状态 + * 0: 未使用 + * 1: 已使用 + * 9: 已过期 + * @type {number} + */ + @prop() + public status: number + + public static async ticketList(accountId: string, shopId?: string) { + let params:any = { accountId } + if (shopId) { + params.shop = shopId + } + let records = await UserReward.find(params) + let results: any = [] + let shopMap: Map = new Map() + let couponMap : Map = new Map() + for (let record of records) { + let sid = record.shop + if (!shopMap.has(record.shop)) { + let shop = await Shop.fetchByID(record.shop) + shopMap.set(record.shop, shop.showName) + sid = shop.id + } + if (!couponMap.has(record.coupon)) { + let coupon = await Coupon.findById(record.coupon) + couponMap.set(coupon.id, coupon) + } + results.push({ + id: record.sid, + shop: record.shop, + shopName: shopMap.get(record.shop), + coupon: record.coupon, + couponName: couponMap.get(record.coupon), + couponUrl: getCouponUrl(sid, record.coupon), + status: record.status + }) + } + } + +} + +export const UserReward = getModelForClass(UserRewardClass, {existingConnection: UserRewardClass.db}) diff --git a/src/services/File.ts b/src/services/File.ts index d7460a3..1bbf759 100644 --- a/src/services/File.ts +++ b/src/services/File.ts @@ -81,3 +81,8 @@ export function generateCouponImg(shop: string, couponId: string, content: strin }} }) } + +export function getCouponUrl(shop: string, couponId: string) { + let subPath = `/coupon/${shop}/` + return `${config.file.show_url}${subPath}/${couponId}.png` +}