Skip to content

Commit

Permalink
通貨管理システムへのアクセスをDBで行う
Browse files Browse the repository at this point in the history
  • Loading branch information
weak-kajuma committed Sep 14, 2023
1 parent 69e11ed commit 17a74e0
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 66 deletions.
Binary file modified .DS_Store
Binary file not shown.
31 changes: 15 additions & 16 deletions api/router/race.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ import { RowDataPacket } from "mysql2";
import mysql_connect from "./../utils/mysqlConnect";
import { KRATicket, RacingResult } from "../kra/KRAClient";
import { Races } from "../utils/constant";
import loginAndGetToken from "../utils/loginAndgetToken";
import axios from "axios";

const router = express.Router();
const con = mysql_connect();
Expand All @@ -16,8 +14,6 @@ router.put(
"SELECT * FROM ticket WHERE race = ?",
[req.params.race_id]
);
const idToken = await loginAndGetToken()
if (!idToken) throw new Error('Cannot Login');
const kraTickets: KRATicket[] = tickets.map(
(t) =>
new KRATicket(
Expand All @@ -36,20 +32,23 @@ router.put(
const race = Races[id].setResult(new RacingResult([f, s, t]));
//Transaction作成 user_id={kraTicket.user} dealer_id="1c34" hide_detail="none" detail={kraTicket.type} amount={payout}
//Money-Manager APIで
await Promise.all(kraTickets.map((kraTicket) => {
await Promise.all(kraTickets.map(async (kraTicket) => {
const payout: number = race.totalPayout(kraTicket); //払い戻し
if (payout > 0) {
return axios.post(`${process.env.ENDPOINT}/transactions`, {
headers: {Authorization: `Bearer ${idToken}`},
body: {
user_id: kraTicket.user,
dealer_id: process.env.DEALERID,
amount: payout,
type: "payout",
detail: kraTicket.type.toString(),
hide_detail: ""
}
}).catch(e => console.log(e))
Promise.all([
con.query("INSERT INTO transactions (transaction_id, user_id, dealer_id, amount, type, detail, hide_detail) VALUES (?, ?, ?, ?, ?, ?, ?)", [
Math.floor(Math.random() * 65535).toString(16).padStart(4, '0'), // Transaction id
kraTicket.user,
process.env.DEALERID,
payout,
"payout",
kraTicket.type.toString(),
""
]),
await con.query(`UPDATE users SET having_money = having_money + ? WHERE user_id = "${kraTicket.user}"`, [
payout
])
])
}
}));
return res.status(200).json(kraTickets);
Expand Down
49 changes: 23 additions & 26 deletions api/router/ticket.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ import express, { Request, Response } from "express";
import { ResultSetHeader, RowDataPacket } from "mysql2";
import mysql_connect from "./../utils/mysqlConnect";
import { Ticket } from "../types/Ticket";
import axios from "axios";
import loginAndGetToken from "../utils/loginAndgetToken";

const router = express.Router();
const con = mysql_connect();
Expand Down Expand Up @@ -44,37 +42,36 @@ router.get("/get/:ticket_id", async (req: Request, res: Response<Ticket>) => {
});

router.post("/add", async (req: Request<Ticket>, res: Response<Ticket>) => {
const idToken = await loginAndGetToken()
if (!idToken) throw new Error('Cannot Login');
const body = req.body;
const [rows] = await con.query<ResultSetHeader>(
const [checkMoneyRows] = await con.query<RowDataPacket[]>("SELECT having_money FROM users WHERE user_id = ?", [req.body.user_id])
if (checkMoneyRows.length === 0) throw new Error("The User is not found.")
const setMoney = checkMoneyRows[0].having_money - parseInt(req.body.bet)
if (setMoney < 0) throw new Error("You do not have enough money to complete the bet.")
const [addTicketRows] = await con.query<ResultSetHeader>(
"INSERT INTO ticket (user_id, horse, type, option, optNum, bet, race) VALUES (?, JSON_ARRAY(?), ?, ?, ?, ?, ?)",
[
body.id,
body.horse,
body.type,
body.option,
body.optNum,
body.bet,
body.race,
req.body.user_id,
req.body.horse,
req.body.type,
req.body.option,
req.body.optNum,
req.body.bet,
req.body.race,
]
);
await con.query("INSERT INTO transactions (transaction_id, user_id, dealer_id, amount, type, detail, hide_detail) VALUES (?, ?, ?, ?, ?, ?, ?)", [
Math.floor(Math.random() * 65535).toString(16).padStart(4, '0'), // Transaction id
req.body.user_id,
process.env.DEALERID,
req.body.bet,
"bet",
req.body.type.toString(),
""
]);
await con.query(`UPDATE users SET having_money = ? WHERE user_id = "${req.body.user_id}"`, [setMoney,req.body.user_id]);
const [[ticket]] = await con.query<RowDataPacket[]>(
"SELECT * FROM ticket WHERE ticket_id = ?",
[rows.insertId]
[addTicketRows.insertId]
);
//Transaction作成 user_id={ticket.user_id} dealer_id="1c34" hide_detail="none" detail={ticket.type} amount={ticket.bet}
await axios.post(`${process.env.ENDPOINT}/transactions`, {
headers: {Authorization: `Bearer ${idToken}`},
body: {
user_id: ticket.user,
dealer_id: process.env.DEALERID,
amount: ticket.bet,
type: "bet",
detail: ticket.type.toString(),
hide_detail: ""
}
})
res.status(200).json({
ticket_id: ticket.ticket_id,
user_id: ticket.user_id,
Expand Down
22 changes: 0 additions & 22 deletions api/utils/loginAndgetToken.ts

This file was deleted.

2 changes: 0 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,8 @@
"typescript": "^5.2.2"
},
"dependencies": {
"axios": "^1.5.0",
"dotenv": "^16.3.1",
"express": "^4.18.2",
"firebase": "^10.3.1",
"fs": "^0.0.1-security",
"mysql2": "^3.6.0"
}
Expand Down

0 comments on commit 17a74e0

Please sign in to comment.