feat: update database schema for precision + AMM behavior

This commit is contained in:
Face 2025-05-23 21:45:41 +03:00
parent a278d0c6a5
commit 930d1f41d7
8 changed files with 893 additions and 108 deletions

View file

@ -14,9 +14,9 @@ export const user = pgTable("user", {
isBanned: boolean("is_banned").default(false),
banReason: text("ban_reason"),
baseCurrencyBalance: decimal("base_currency_balance", {
precision: 19,
scale: 4,
}).notNull().default("10000.0000"), // 10,000 *BUSS
precision: 20,
scale: 8,
}).notNull().default("10000.00000000"), // 10,000 *BUSS
bio: varchar("bio", { length: 160 }).default("Hello am 48 year old man from somalia. Sorry for my bed england. I selled my wife for internet connection for play “conter stirk”"),
username: varchar("username", { length: 30 }).notNull().unique(),
});
@ -63,14 +63,14 @@ export const coin = pgTable("coin", {
symbol: varchar("symbol", { length: 10 }).notNull().unique(),
icon: text("icon"), // New field for coin icon
creatorId: integer("creator_id").references(() => user.id, { onDelete: "set null", }), // Coin can exist even if creator is deleted
initialSupply: decimal("initial_supply", { precision: 28, scale: 8 }).notNull(),
circulatingSupply: decimal("circulating_supply", { precision: 28, scale: 8 }).notNull(),
currentPrice: decimal("current_price", { precision: 19, scale: 8 }).notNull(), // Price in base currency
marketCap: decimal("market_cap", { precision: 28, scale: 4 }).notNull(),
volume24h: decimal("volume_24h", { precision: 28, scale: 4 }).default("0.0000"),
change24h: decimal("change_24h", { precision: 8, scale: 4 }).default("0.0000"), // Percentage
poolCoinAmount: decimal("pool_coin_amount", { precision: 28, scale: 8 }).notNull().default("0.00000000"),
poolBaseCurrencyAmount: decimal("pool_base_currency_amount", { precision: 28, scale: 4, }).notNull().default("0.0000"),
initialSupply: decimal("initial_supply", { precision: 30, scale: 8 }).notNull(),
circulatingSupply: decimal("circulating_supply", { precision: 30, scale: 8 }).notNull(),
currentPrice: decimal("current_price", { precision: 20, scale: 8 }).notNull(), // Price in base currency
marketCap: decimal("market_cap", { precision: 30, scale: 2 }).notNull(),
volume24h: decimal("volume_24h", { precision: 30, scale: 2 }).default("0.00"),
change24h: decimal("change_24h", { precision: 10, scale: 4 }).default("0.0000"), // Percentage
poolCoinAmount: decimal("pool_coin_amount", { precision: 30, scale: 8 }).notNull().default("0.00000000"),
poolBaseCurrencyAmount: decimal("pool_base_currency_amount", { precision: 30, scale: 8, }).notNull().default("0.00000000"),
createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow(),
isListed: boolean("is_listed").default(true).notNull(),
@ -79,7 +79,7 @@ export const coin = pgTable("coin", {
export const userPortfolio = pgTable("user_portfolio", {
userId: integer("user_id").notNull().references(() => user.id, { onDelete: "cascade" }),
coinId: integer("coin_id").notNull().references(() => coin.id, { onDelete: "cascade" }),
quantity: decimal("quantity", { precision: 28, scale: 8 }).notNull(),
quantity: decimal("quantity", { precision: 30, scale: 8 }).notNull(),
updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow(),
},
(table) => {
@ -94,15 +94,15 @@ export const transaction = pgTable("transaction", {
userId: integer("user_id").notNull().references(() => user.id, { onDelete: "cascade" }),
coinId: integer("coin_id").notNull().references(() => coin.id, { onDelete: "cascade" }),
type: transactionTypeEnum("type").notNull(),
quantity: decimal("quantity", { precision: 28, scale: 8 }).notNull(),
pricePerCoin: decimal("price_per_coin", { precision: 19, scale: 8 }).notNull(),
totalBaseCurrencyAmount: decimal("total_base_currency_amount", { precision: 28, scale: 4 }).notNull(),
quantity: decimal("quantity", { precision: 30, scale: 8 }).notNull(),
pricePerCoin: decimal("price_per_coin", { precision: 20, scale: 8 }).notNull(),
totalBaseCurrencyAmount: decimal("total_base_currency_amount", { precision: 30, scale: 8 }).notNull(),
timestamp: timestamp("timestamp", { withTimezone: true }).notNull().defaultNow(),
});
export const priceHistory = pgTable("price_history", {
id: serial("id").primaryKey(),
coinId: integer("coin_id").notNull().references(() => coin.id, { onDelete: "cascade" }),
price: decimal("price", { precision: 19, scale: 8 }).notNull(),
price: decimal("price", { precision: 20, scale: 8 }).notNull(),
timestamp: timestamp("timestamp", { withTimezone: true }).notNull().defaultNow(),
});