Skip to content

Commit

Permalink
feat: update
Browse files Browse the repository at this point in the history
  • Loading branch information
pa001024 committed Jan 24, 2021
1 parent 087fc1a commit 89d05a4
Show file tree
Hide file tree
Showing 82 changed files with 13,663 additions and 841 deletions.
18 changes: 18 additions & 0 deletions api/db/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import mongoose from "mongoose";

const DB = process.env.DB!;

mongoose.connect(DB, {
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
useCreateIndex: true,
});

const db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error:"));
db.once("open", function () {
console.log("connected to", DB);
});

export * from "./models/user";
34 changes: 0 additions & 34 deletions api/db/models.ts

This file was deleted.

51 changes: 51 additions & 0 deletions api/db/models/artifact.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import { getModelForClass, prop } from "@typegoose/typegoose";
import { User } from "./user";
import type { IArtifact, IAttr } from "~/modules/core";

/**
* 圣遗物
*
* @export
* @class Artifact
*/
export class Artifact implements IArtifact {
/** 拥有者 */
@prop({ ref: () => User, index: true })
public owner!: string;

/** 部位 */
@prop({ type: Number, required: true })
public typeId!: number;

/** 等级 */
@prop({ type: Number, required: true, default: 0 })
public level!: number;

/** 主属性类型 */
@prop({ type: Number, required: true })
public main!: number;

/** 副属性 */
@prop({ type: () => [Attr] })
public attrs!: Attr[];

// 评分
@prop({ type: Number })
public score?: number;
}

/**
* 属性
*
* @class Attr
*/
export class Attr implements IAttr {
//
@prop({ type: Number, required: true })
type!: number;

@prop({ type: Number, required: true })
value!: number;
}

export const ArtifactModel = getModelForClass(Artifact);
61 changes: 61 additions & 0 deletions api/db/models/char.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import { getModelForClass, prop } from "@typegoose/typegoose";
import { User } from "./user";
import { Artifact } from "./artifact";
import { IWeapon } from "~/modules/core";

/**
* 角色
*
* @export
* @class Char
*/
export class Char {
/** 拥有者 */
@prop({ ref: () => User, index: true })
public owner!: string;

/** 等级 */
@prop({ type: Number, required: true, default: 0 })
public level!: number;

/** 突破等级 */
@prop({ type: Number, required: true })
public promoteLevel!: number;

/** 命座等级 */
@prop({ type: Number })
public talentLevel!: number;

/** 普攻等级 */
@prop({ type: Number })
public attackLevel!: number;

/** E等级 */
@prop({ type: Number })
public eLevel!: number;

/** Q等级 */
@prop({ type: Number })
public qLevel!: number;

/** 圣遗物 */
@prop({ ref: () => Artifact })
public artifacts!: Artifact[];

/** 武器 */
@prop({ type: () => Weapon })
public weaponId!: Weapon;
}

class Weapon implements IWeapon {
@prop({ type: Number })
public typeId!: number;

@prop({ type: Number })
public level!: number;

@prop({ type: Number })
public promoteLevel!: number;
}

export const CharModel = getModelForClass(Char);
41 changes: 41 additions & 0 deletions api/db/models/user.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { getModelForClass, prop } from "@typegoose/typegoose";

/**
* 用户
*
* @export
* @class User
*/
export class User {
@prop({ type: String, required: true, unique: true })
public email!: string;

@prop({ type: String })
public username?: string;

// 类型 普通用户=1
@prop({ type: Number })
public type?: number;

// password
@prop({ type: String, required: true })
public pass!: string;

// 旅行者性别
@prop({ type: Number })
public travelerGender!: number;

// 平台
@prop({ type: String })
public platform!: string;

// 服务器
@prop({ type: String })
public server!: string;

// 圣遗物hash
@prop({ type: String })
public artifactHash!: string;
}

export const UserModel = getModelForClass(User);
20 changes: 9 additions & 11 deletions api/routes/user.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,13 @@ import { Router } from "express";
import ejwt from "express-jwt";
import bcrypt from "bcrypt";
import jwt from "jsonwebtoken";
import { UserModel, User } from "../db/models";
import { UserModel, User } from "../db";

const router = Router();
const SECRET = process.env.JWT_SECRET!;

function delay(d = 1e3) {
return new Promise(resolve =>
setTimeout(() => {
resolve(d);
}, d)
);
function delay(d = Math.random() * 500) {
return new Promise(resolve => setTimeout(() => resolve(d), d));
}

function signUser(user: User) {
Expand All @@ -30,7 +26,7 @@ function signUser(user: User) {
/* GET users listing. */
router.post("/user/login", async function (req, res) {
// Timing Hack
await delay(1e3);
await delay();
const { email, hash: password } = req.body;

const user = await UserModel.findOne({ email });
Expand All @@ -48,8 +44,6 @@ router.post("/user/login", async function (req, res) {

/* 用户注册 */
router.post("/user/signup", async function ({ body: { email, username, hash } }, res) {
// Timing Hack
await delay(1e3);
if (!email || !username || !hash) return res.json({ code: 400, message: "invalid input" });
const user = await UserModel.findOne({ email });
if (user) return res.json({ code: 403, message: "user exists" });
Expand All @@ -64,7 +58,11 @@ router.post("/user/signup", async function ({ body: { email, username, hash } },
return res.json({ code: 200, username: newUser.username });
});

/* 校验是否登录 */
/**
* 校验是否登录
* test:
* $nuxt.$axios.get("/api/user/check",{headers:{Authorization:$nuxt.$store.state.app.auth}})
*/
router.get("/user/check", ejwt({ secret: SECRET, algorithms: ["HS256"] }), function (req: any, res) {
if (!req.user) return res.status(403).json({ code: 403, message: "not login" });
return res.json({ code: 200 });
Expand Down
5 changes: 3 additions & 2 deletions cli/commands/avatar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ async function parseChar() {
bodyType: toBodyType(char.BodyType),
rarity: toRarity(char.QualityType),
weapon: toWeaponType(char.WeaponType),
region: toRegion(tags),
region: toRegion(char, tags),
ascensions: ascensions.map(v => {
const p: IAscensionPhase = {
level: v.level,
Expand Down Expand Up @@ -143,7 +143,7 @@ async function parseChar() {
return rst;
}

function toRegion(tags: ReturnType<typeof toTags>) {
function toRegion(char: AvatarExcelConfigData, tags: ReturnType<typeof toTags>) {
const ids = new Set(tags.map(v => v.TagId));
if (ids.has(1001)) return Region.Mondstadt;
if (ids.has(1002)) return Region.Liyue;
Expand All @@ -152,6 +152,7 @@ async function parseChar() {
if (ids.has(1005)) return Region.Fontaine;
if (ids.has(1006)) return Region.Natlan;
if (ids.has(1007)) return Region.Snezhnaya;
if (toID(char.NameTextMapHash) === "Traveler") return Region.Unknown;
return Region.Snezhnaya;
}

Expand Down
Loading

0 comments on commit 89d05a4

Please sign in to comment.