Skip to content

Instantly share code, notes, and snippets.

@jcyh0120
Created October 1, 2018 13:26
Show Gist options
  • Save jcyh0120/b60e0968b00cd6f6b2148a5a1c3627c0 to your computer and use it in GitHub Desktop.
Save jcyh0120/b60e0968b00cd6f6b2148a5a1c3627c0 to your computer and use it in GitHub Desktop.
koa api 該怎麼做檢查啊
export const 創新角色 = async (ctx, next) => {
const { 玩家Id, 角色名稱, 職業, 伺服器 } = ctx.request.body;
if (!玩家Id || !角色名稱 || !職業 || !伺服器) {
return ctx.throw(422);
}
const 伺服器資料 = await ctx
.db("伺服器列表")
.where({ id: 伺服器.id })
.first();
if (
!伺服器資料 ||
!伺服器資料.serverUrl ||
typeof 伺服器資料.serverUrl === "string"
) {
ctx.throw(500);
}
const { serverUrl } = 伺服器資料;
const 新手禮包 = await http.get("https://xxx.xxx/new-role-gift");
if (
!新手禮包 ||
!新手禮包.新手武器 ||
!新手禮包.新手防具 ||
!新手禮包.新手藥品
) {
ctx.throw(500);
}
const { 新手武器, 新手防具, 新手藥品 } = 新手禮包;
const VIP禮包 = await http.get("https://xxx.xxx/vip-gift?id=" + 玩家Id);
if (!VIP禮包 || !VIP禮包.新手武器 || !VIP禮包.新手防具 || !VIP禮包.新手藥品) {
ctx.throw(500);
}
const { VIP武器, VIP防具, VIP藥品 } = VIP禮包;
let 武器, 防具, 藥品;
switch (職業) {
case "戰士":
//懶得檢查了
武器 = [新手武器.劍, VIP武器.劍];
防具 = [新手防具.盔甲, VIP防具.盔甲];
藥品 = [新手藥品.力量瓶, VIP藥品.力量瓶];
break;
case "弓箭手":
//懶得檢查了
武器 = [新手武器.弓, VIP武器.弓];
防具 = [新手防具.皮甲, VIP防具.皮甲];
藥品 = [新手藥品.加速劑, VIP藥品.加速劑];
break;
case "法師":
//懶得檢查了
武器 = [新手武器.杖, VIP武器.杖];
防具 = [新手防具.法袍, VIP防具.法袍];
藥品 = [新手藥品.魔力瓶, VIP藥品.魔力瓶];
break;
default:
break;
}
const 創建角色 = ctx
.db("角色庫")
.insert({
玩家Id,
角色名稱,
職業,
武器,
防具,
藥品
})
.returning("*");
if (!創建角色) {
ctx.throw(500);
}
const 連結伺服器 = await http.get(
serverUrl + "/connect-player?id" + 創建角色.id
);
if (連結伺服器.結果) {
ctx.body = { code: "OK" };
} else {
ctx.throw(xxx, "忙線中");
}
};
export const 創新角色 = async (ctx, next) => {
const { 玩家Id, 角色名稱, 職業, 伺服器 } = ctx.request.body;
const { serverUrl } = await ctx
.db("伺服器列表")
.where({ id: 伺服器.id })
.first();
const 新手禮包 = await http.get("https://xxx.xxx/new-role-gift");
const { 新手武器, 新手防具, 新手藥品 } = 新手禮包;
const VIP禮包 = await http.get("https://xxx.xxx/vip-gift?id=" + 玩家Id);
const { VIP武器, VIP防具, VIP藥品 } = VIP禮包;
let 武器, 防具, 藥品;
switch (職業) {
case "戰士":
武器 = [新手武器.劍, VIP武器.劍];
防具 = [新手防具.盔甲, VIP防具.盔甲];
藥品 = [新手藥品.力量瓶, VIP藥品.力量瓶];
break;
case "弓箭手":
武器 = [新手武器.弓, VIP武器.弓];
防具 = [新手防具.皮甲, VIP防具.皮甲];
藥品 = [新手藥品.加速劑, VIP藥品.加速劑];
break;
case "法師":
武器 = [新手武器.杖, VIP武器.杖];
防具 = [新手防具.法袍, VIP防具.法袍];
藥品 = [新手藥品.魔力瓶, VIP藥品.魔力瓶];
break;
default:
break;
}
const 創建角色 = ctx
.db("角色庫")
.insert({
玩家Id,
角色名稱,
職業,
武器,
防具,
藥品
})
.returning("*");
const 連結伺服器 = await http.get(
serverUrl + "/connect-player?id" + 創建角色.id
);
if (連結伺服器.結果) {
ctx.body = { code: "OK" };
} else {
ctx.throw(xxx, "忙線中");
}
};
@horsekitlin
Copy link

const 裝備Mapping = {
  戰士: {
    武器: '劍',
    防具: '盔甲',
    藥品: '力量瓶'
  },
  弓箭手: {
    武器: '弓',
    防具: '皮甲',
    藥品: '加速劑'
  },
  法師: {
    武器: '杖',
    防具: '法袍',
    藥品: '魔力瓶'
  }
};

const get裝備 = (職業, 新手禮包Result, VIP禮包Result) => {
  const { 新手武器, 新手防具, 新手藥品 } = 新手禮包Result;
  const { VIP武器, VIP防具, VIP藥品 } = VIP禮包;
  const {武器, 防具, 藥品} = 裝備Mapping[職業];

  return {
    武器 : [新手武器[武器], VIP武器[武器]],
    防具 : [新手防具[防具], VIP防具[防具]],
    藥品 : [新手藥品[藥品], VIP藥品[藥品]]
  }
}

const checkBodyParams = ({玩家Id, 角色名稱, 職業, 伺服器} = {}) => {
  const isValidated = 玩家Id || !角色名稱 || !職業 || !伺服器;
  return {isValidated, 玩家Id, 角色名稱, 職業, 伺服器};
}

const getAndValidated禮包 = async (route) => {
  const 新手禮包Result = await http.get(route);
  if(!新手禮包Result) return {isValidated: false};
  
  const { 新手武器, 新手防具, 新手藥品 } = 新手禮包Result;
  if(!新手武器 || !新手防具 || !新手藥品) return {isValidated: false};

  return {isValidated: true, 新手武器, 新手防具, 新手藥品}
};

const getServerData = ({id}) => {
  const [伺服器資料 = null] = await ctx
    .db("伺服器列表")
    .where({ id: 伺服器.id });
};

export const 創新角色 = async (ctx, next) => {
  // const { isValidated, 玩家Id, 角色名稱, 職業, 伺服器 } = checkBodyParams(ctx.request.body);
  const { isValidated, 伺服器, ...playerData } = checkBodyParams(ctx.request.body);
  if (!isValidated) return ctx.throw(422);

  const [伺服器資料 = null] = await ctx.db("伺服器列表").where({ id: 伺服器.id });
  if (!伺服器資料) ctx.throw(500);

  const [新手禮包Result, VIP禮包Result] = await Promise.all([
    getAndValidated禮包("https://xxx.xxx/new-role-gift"),
    getAndValidated禮包("https://xxx.xxx/vip-gift?id=" + 玩家Id)
  ]);

  const 裝備Data = get裝備(職業, 新手禮包Result, VIP禮包Result);
  const 創建角色 = ctx
    .db("角色庫")
    .insert({
      ...playerData,
      ...裝備Data
    })
    .returning("*");

  if (!創建角色) ctx.throw(500);

  const {結果} = await http.get(serverUrl + "/connect-player?id" + 創建角色.id);

  if(!結果) ctx.throw(xxx, "忙線中");
  ctx.body = { code: "OK" };
};

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment