lock trading for 1 minute for creator
This commit is contained in:
parent
c729913db0
commit
6c54afc88d
9 changed files with 2324 additions and 8 deletions
|
|
@ -134,7 +134,9 @@ export async function GET({ params, url }) {
|
|||
creatorName: user.name,
|
||||
creatorUsername: user.username,
|
||||
creatorBio: user.bio,
|
||||
creatorImage: user.image
|
||||
creatorImage: user.image,
|
||||
tradingUnlocksAt: coin.tradingUnlocksAt,
|
||||
isLocked: coin.isLocked
|
||||
})
|
||||
.from(coin)
|
||||
.leftJoin(user, eq(coin.creatorId, user.id))
|
||||
|
|
@ -185,7 +187,9 @@ export async function GET({ params, url }) {
|
|||
poolCoinAmount: Number(coinData.poolCoinAmount),
|
||||
poolBaseCurrencyAmount: Number(coinData.poolBaseCurrencyAmount),
|
||||
circulatingSupply: Number(coinData.circulatingSupply),
|
||||
initialSupply: Number(coinData.initialSupply)
|
||||
initialSupply: Number(coinData.initialSupply),
|
||||
tradingUnlocksAt: coinData.tradingUnlocksAt,
|
||||
isLocked: coinData.isLocked
|
||||
},
|
||||
candlestickData,
|
||||
volumeData,
|
||||
|
|
|
|||
|
|
@ -40,7 +40,20 @@ export async function POST({ params, request }) {
|
|||
}
|
||||
|
||||
return await db.transaction(async (tx) => {
|
||||
const [coinData] = await tx.select().from(coin).where(eq(coin.symbol, normalizedSymbol)).for('update').limit(1);
|
||||
const [coinData] = await tx.select({
|
||||
id: coin.id,
|
||||
symbol: coin.symbol,
|
||||
name: coin.name,
|
||||
icon: coin.icon,
|
||||
currentPrice: coin.currentPrice,
|
||||
poolCoinAmount: coin.poolCoinAmount,
|
||||
poolBaseCurrencyAmount: coin.poolBaseCurrencyAmount,
|
||||
circulatingSupply: coin.circulatingSupply,
|
||||
isListed: coin.isListed,
|
||||
creatorId: coin.creatorId,
|
||||
tradingUnlocksAt: coin.tradingUnlocksAt,
|
||||
isLocked: coin.isLocked
|
||||
}).from(coin).where(eq(coin.symbol, normalizedSymbol)).for('update').limit(1);
|
||||
|
||||
if (!coinData) {
|
||||
throw error(404, 'Coin not found');
|
||||
|
|
@ -50,6 +63,18 @@ export async function POST({ params, request }) {
|
|||
throw error(400, 'This coin is delisted and cannot be traded');
|
||||
}
|
||||
|
||||
if (coinData.isLocked && coinData.tradingUnlocksAt && userId !== coinData.creatorId) {
|
||||
const unlockTime = new Date(coinData.tradingUnlocksAt);
|
||||
if (new Date() < unlockTime) {
|
||||
const remainingSeconds = Math.ceil((unlockTime.getTime() - Date.now()) / 1000);
|
||||
throw error(400, `Trading is locked. Unlocks in ${remainingSeconds} seconds.`);
|
||||
}
|
||||
|
||||
await tx.update(coin)
|
||||
.set({ isLocked: false })
|
||||
.where(eq(coin.id, coinData.id));
|
||||
}
|
||||
|
||||
const [userData] = await tx.select({
|
||||
baseCurrencyBalance: user.baseCurrencyBalance,
|
||||
username: user.username,
|
||||
|
|
|
|||
|
|
@ -114,7 +114,9 @@ export async function POST({ request }) {
|
|||
currentPrice: STARTING_PRICE.toString(),
|
||||
marketCap: (FIXED_SUPPLY * STARTING_PRICE).toString(),
|
||||
poolCoinAmount: FIXED_SUPPLY.toString(),
|
||||
poolBaseCurrencyAmount: INITIAL_LIQUIDITY.toString()
|
||||
poolBaseCurrencyAmount: INITIAL_LIQUIDITY.toString(),
|
||||
tradingUnlocksAt: new Date(Date.now() + 60 * 1000), // 1 minute from now
|
||||
isLocked: true
|
||||
}).returning();
|
||||
|
||||
createdCoin = newCoin;
|
||||
|
|
|
|||
Reference in a new issue