Skip to content

Commit dde88ca

Browse files
committed
feat: Add Drizzle Introspection + Updated schema
1 parent 6ce0712 commit dde88ca

File tree

13 files changed

+124
-77
lines changed

13 files changed

+124
-77
lines changed

app/api/user/balance/route.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import { eq, sql } from 'drizzle-orm';
44

55
import TransactionStatus from '@/constants/TransactionStatus';
66
import TransactionType from '@/constants/TransactionType';
7+
import { transactions } from '@/drizzle/schema';
78
import { db } from '@/lib/db';
8-
import { transactions } from '@/schema';
99
import getPayloadFromJWT from '@/utils/getPayloadFromJWT';
1010

1111
export const preferredRegion = ['sfo1'];

app/api/user/route.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import { cookies } from 'next/headers';
22

33
import { eq, sql } from 'drizzle-orm';
44

5+
import { accountTypes, users } from '@/drizzle/schema';
56
import { db } from '@/lib/db';
6-
import { accountTypes, users } from '@/schema';
77
import getPayloadFromJWT from '@/utils/getPayloadFromJWT';
88

99
export const preferredRegion = ['sfo1'];

app/api/user/transactions/route.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { cookies } from 'next/headers';
33
import { desc, eq, sql } from 'drizzle-orm';
44
import { alias } from 'drizzle-orm/pg-core';
55

6+
import { transactions, users } from '@/drizzle/schema';
67
import { db } from '@/lib/db';
7-
import { transactions, users } from '@/schema';
88
import getPayloadFromJWT from '@/utils/getPayloadFromJWT';
99

1010
export const preferredRegion = ['sfo1'];

app/api/user/updateMinecraftUsername/route.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import { cookies } from 'next/headers';
22

33
import { eq } from 'drizzle-orm';
44

5+
import { users } from '@/drizzle/schema';
56
import { db } from '@/lib/db';
6-
import { users } from '@/schema';
77
import getPayloadFromJWT from '@/utils/getPayloadFromJWT';
88
import minecraftProfileFromUUID from '@/utils/minecraftProfileFromUUID';
99

app/api/users/route.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1+
import { users } from '@/drizzle/schema';
12
import { db } from '@/lib/db';
2-
import { users } from '@/schema';
33

44
export const preferredRegion = ['sfo1'];
55
export const dynamic = 'force-dynamic';

drizzle.config.js

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,14 @@
1+
import * as dotenv from 'dotenv';
2+
3+
dotenv.config({
4+
path: '.env.local',
5+
});
6+
17
export default {
2-
schema: './schema.js',
8+
schema: './drizzle/schema.js',
39
out: './drizzle',
10+
driver: 'pg',
11+
dbCredentials: {
12+
connectionString: process.env.DATABASE_URL,
13+
},
414
};

drizzle/schema.js

+95
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import { sql } from 'drizzle-orm';
2+
import {
3+
inet,
4+
integer,
5+
numeric,
6+
pgTable,
7+
serial,
8+
text,
9+
timestamp,
10+
varchar,
11+
} from 'drizzle-orm/pg-core';
12+
13+
export const accountTypes = pgTable('AccountTypes', {
14+
name: text('name').primaryKey().notNull(),
15+
interestRate: numeric('interest_rate', { precision: 4, scale: 3 }).notNull(),
16+
transactionFee: numeric('transaction_fee', {
17+
precision: 4,
18+
scale: 3,
19+
}).notNull(),
20+
});
21+
22+
export const paymentTypes = pgTable('PaymentTypes', {
23+
name: text('name').primaryKey().notNull(),
24+
});
25+
26+
export const roles = pgTable('Roles', {
27+
name: text('name').primaryKey().notNull(),
28+
});
29+
30+
export const transactionStatuses = pgTable('TransactionStatuses', {
31+
name: text('name').primaryKey().notNull(),
32+
});
33+
34+
export const transactionTypes = pgTable('TransactionTypes', {
35+
name: text('name').primaryKey().notNull(),
36+
});
37+
38+
export const users = pgTable('Users', {
39+
id: serial('id').primaryKey().notNull(),
40+
accountType: text('account_type')
41+
.notNull()
42+
.references(() => accountTypes.name),
43+
minecraftUuid: varchar('minecraft_uuid', { length: 36 }),
44+
minecraftUsername: varchar('minecraft_username', { length: 16 }),
45+
discordUsername: varchar('discord_username', { length: 32 }),
46+
password: varchar('password', { length: 60 }).notNull(),
47+
createdAt: timestamp('created_at', { withTimezone: true, mode: 'string' })
48+
.default(sql`now() AT TIME ZONE 'utc'`)
49+
.notNull(),
50+
updatedAt: timestamp('updated_at', { withTimezone: true, mode: 'string' })
51+
.default(sql`now() AT TIME ZONE 'utc'`)
52+
.notNull(),
53+
lastSignInAt: timestamp('last_sign_in_at', {
54+
withTimezone: true,
55+
mode: 'string',
56+
}),
57+
lastDiscordChangeAt: timestamp('last_discord_change_at', {
58+
withTimezone: true,
59+
mode: 'string',
60+
}),
61+
lastPasswordChangeAt: timestamp('last_password_change_at', {
62+
withTimezone: true,
63+
mode: 'string',
64+
}),
65+
lastIpAccessed: inet('last_ip_accessed'),
66+
});
67+
68+
export const transactions = pgTable('Transactions', {
69+
id: serial('id').primaryKey().notNull(),
70+
userId: integer('user_id')
71+
.notNull()
72+
.references(() => users.id),
73+
createdByUserId: integer('created_by_user_id')
74+
.notNull()
75+
.references(() => users.id),
76+
amount: numeric('amount', { precision: 32, scale: 2 }).notNull(),
77+
fee: numeric('fee', { precision: 32, scale: 2 }).default('0.00').notNull(),
78+
transactionType: text('transaction_type')
79+
.notNull()
80+
.references(() => transactionTypes.name),
81+
paymentType: text('payment_type')
82+
.notNull()
83+
.references(() => paymentTypes.name),
84+
attachment: text('attachment'),
85+
note: text('note'),
86+
status: text('status')
87+
.notNull()
88+
.references(() => transactionStatuses.name),
89+
createdAt: timestamp('created_at', { withTimezone: true, mode: 'string' })
90+
.default(sql`now() AT TIME ZONE 'utc'`)
91+
.notNull(),
92+
updatedAt: timestamp('updated_at', { withTimezone: true, mode: 'string' })
93+
.default(sql`now() AT TIME ZONE 'utc'`)
94+
.notNull(),
95+
});

lib/actions/form.actions.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import { compare, hash } from 'bcrypt';
66
import { eq } from 'drizzle-orm';
77

88
import AccountType from '@/constants/AccountType';
9+
import { users } from '@/drizzle/schema';
910
import { db } from '@/lib/db';
10-
import { users } from '@/schema';
1111
import getPayloadFromJWT from '@/utils/getPayloadFromJWT';
1212
import isValidDiscordUsername from '@/utils/isValidDiscordUsername';
1313
import minecraftProfileFromUsername from '@/utils/minecraftProfileFromUsername';

lib/actions/transaction.actions.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import { eq, sql } from 'drizzle-orm';
88
import PaymentType from '@/constants/PaymentType';
99
import TransactionStatus from '@/constants/TransactionStatus';
1010
import TransactionType from '@/constants/TransactionType';
11+
import { transactions, users } from '@/drizzle/schema';
1112
import { db } from '@/lib/db';
12-
import { transactions, users } from '@/schema';
1313
import formatCurrency from '@/utils/formatCurrency';
1414
import getPayloadFromJWT from '@/utils/getPayloadFromJWT';
1515

lib/db.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { drizzle } from 'drizzle-orm/postgres-js';
22
import postgres from 'postgres';
3-
import * as schema from '@/schema';
3+
import * as schema from '@/drizzle/schema';
44

55
const client = postgres(process.env.DATABASE_URL, {
66
ssl: {

package.json

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
"format": "prettier --check .",
1515
"format:fix": "prettier --write .",
1616
"drizzle:generate": "drizzle-kit generate:pg",
17+
"drizzle:introspect": "drizzle-kit introspect:pg",
1718
"drizzle:migrate": "node drizzle/migrate.js"
1819
},
1920
"dependencies": {
@@ -40,6 +41,7 @@
4041
"devDependencies": {
4142
"autoprefixer": "^10.4.19",
4243
"clsx": "^2.1.0",
44+
"dotenv": "^16.4.5",
4345
"drizzle-kit": "^0.20.14",
4446
"eslint": "^8.57.0",
4547
"eslint-config-next": "^14.2.1",

pnpm-lock.yaml

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

schema.js

-68
This file was deleted.

0 commit comments

Comments
 (0)