diff --git a/src/app/Products/barrels/page.tsx b/src/app/Products/barrels/page.tsx index d92a806..5ff2fcb 100644 --- a/src/app/Products/barrels/page.tsx +++ b/src/app/Products/barrels/page.tsx @@ -3,6 +3,7 @@ import partTypes from 'src/data/parts_cats.json'; import styles from '../styles.module.css'; import PageHero from "@src/components/PageHero"; import ProductTable from "@src/components/ProductTable"; +import SortTable from "@src/components/SortTable"; export default async function BarrelsPage() { const data = await getProductType('Barrels'); @@ -11,7 +12,7 @@ export default async function BarrelsPage() {
- +
); diff --git a/src/app/Products/handguards/page.tsx b/src/app/Products/handguards/page.tsx index 70997e3..b79fcfb 100644 --- a/src/app/Products/handguards/page.tsx +++ b/src/app/Products/handguards/page.tsx @@ -2,6 +2,7 @@ import { getARHandGuards } from "@queries/PSA"; import styles from '../styles.module.css'; import PageHero from "@src/components/PageHero"; import ProductTable from "@src/components/ProductTable"; +import SortTable from "@src/components/SortTable"; export default async function HamdGuardsPage() { const data = await getARHandGuards(); @@ -10,7 +11,7 @@ export default async function HamdGuardsPage() {
- +
); diff --git a/src/app/Products/magazines/page.tsx b/src/app/Products/magazines/page.tsx new file mode 100644 index 0000000..000d99e --- /dev/null +++ b/src/app/Products/magazines/page.tsx @@ -0,0 +1,19 @@ +import { getMags } from "@queries/PSA"; +import partTypes from 'src/data/parts_cats.json'; +import styles from '../styles.module.css'; +import PageHero from "@src/components/PageHero"; +import ProductTable from "@src/components/ProductTable"; +import SortTable from "@src/components/SortTable"; + +export default async function MagsPage() { + const data = await getMags(); + + return ( +
+ +
+ +
+
+ ); +} \ No newline at end of file diff --git a/src/app/Products/muzzle-devices/page.tsx b/src/app/Products/muzzle-devices/page.tsx index f139420..8242c01 100644 --- a/src/app/Products/muzzle-devices/page.tsx +++ b/src/app/Products/muzzle-devices/page.tsx @@ -3,6 +3,7 @@ import partTypes from 'src/data/parts_cats.json'; import styles from '../styles.module.css'; import PageHero from "@src/components/PageHero"; import ProductTable from "@src/components/ProductTable"; +import SortTable from "@src/components/SortTable"; export default async function MuzzleDevices() { const data = await getMuzzleDevices(); @@ -11,7 +12,7 @@ export default async function MuzzleDevices() {
- +
); diff --git a/src/app/Products/parts/page.tsx b/src/app/Products/parts/page.tsx index a04ab0a..fdc97bb 100644 --- a/src/app/Products/parts/page.tsx +++ b/src/app/Products/parts/page.tsx @@ -2,13 +2,14 @@ import { getARParts } from "@queries/PSA"; import partTypes from 'src/data/parts_cats.json'; import styles from '../styles.module.css'; import ProductTable from "@src/components/ProductTable"; +import SortTable from "@src/components/SortTable"; export default async function PartsPage() { const data = await getARParts(); return (
- +
); } \ No newline at end of file diff --git a/src/app/Products/stocks/page.tsx b/src/app/Products/stocks/page.tsx index 5070f31..74cc082 100644 --- a/src/app/Products/stocks/page.tsx +++ b/src/app/Products/stocks/page.tsx @@ -4,6 +4,7 @@ import partTypes from 'src/data/parts_cats.json'; import styles from '../styles.module.css'; import PageHero from "@src/components/PageHero"; import ProductTable from "@src/components/ProductTable"; +import SortTable from "@src/components/SortTable"; export default async function StocksPage() { const psa = await getStocks(); @@ -12,7 +13,7 @@ export default async function StocksPage() {
- +
); diff --git a/src/app/Products/triggers/page.tsx b/src/app/Products/triggers/page.tsx index 7230ead..e91921f 100644 --- a/src/app/Products/triggers/page.tsx +++ b/src/app/Products/triggers/page.tsx @@ -4,6 +4,7 @@ import partTypes from 'src/data/parts_cats.json'; import styles from '../styles.module.css'; import PageHero from "@src/components/PageHero"; import ProductTable from "@src/components/ProductTable"; +import SortTable from "@src/components/SortTable"; export default async function TriggersPage() { const psa = await getARTriggers(); @@ -12,7 +13,7 @@ export default async function TriggersPage() {
- +
); diff --git a/src/components/PopNav/page.tsx b/src/components/PopNav/page.tsx index 86aac54..ad2a66d 100644 --- a/src/components/PopNav/page.tsx +++ b/src/components/PopNav/page.tsx @@ -50,6 +50,7 @@ const navigation = { items: [ { name: "Lower Receivers", href: "/Products/lowers" }, { name: "Grips", href: "/Products/grips" }, + { name: "Magazines", href: "/Products/magazines" }, { name: "Stocks", href: "/Products/stocks" }, { name: "Triggers", href: "/Products/triggers" }, { name: "Parts", href: "/Products/parts" }, diff --git a/src/db/queries/PSA/index.ts b/src/db/queries/PSA/index.ts index dbce09e..b17a0ee 100644 --- a/src/db/queries/PSA/index.ts +++ b/src/db/queries/PSA/index.ts @@ -142,4 +142,14 @@ export async function getARParts(page = 1) { .limit(limit) .where(and(like(psa.fineline, "%Trigger%"), like(psa.category, "Ar Parts"))) .offset(offset); +} +export async function getMags(page = 1) { + const limit = 40; + const offset = (page - 1) * limit; + + return await db.select() + .from(psa) + .limit(limit) + .where(and(like(psa.fineline, "%Magazine%"), like(psa.category, "Ar Parts"))) + .offset(offset); } \ No newline at end of file diff --git a/src/db/schema/User.ts b/src/db/schema/User.ts new file mode 100644 index 0000000..68093eb --- /dev/null +++ b/src/db/schema/User.ts @@ -0,0 +1,27 @@ +import { pgTable, integer, varchar, text, decimal, uuid, real, bigserial, date, timestamp, boolean, unique, check } from "drizzle-orm/pg-core"; +import { sql } from "drizzle-orm"; +import { timestamps } from "./helpers/columns.helpers"; + +export const users = pgTable("users", { + id: bigserial({ mode: "bigint" }).primaryKey().notNull(), + username: varchar({ length: 50 }).notNull(), + email: varchar({ length: 255 }).notNull(), + passwordHash: varchar("password_hash", { length: 255 }).notNull(), + firstName: varchar("first_name", { length: 50 }), + lastName: varchar("last_name", { length: 50 }), + profilePicture: varchar("profile_picture", { length: 255 }), + dateOfBirth: date("date_of_birth"), + phoneNumber: varchar("phone_number", { length: 20 }), + createdAt: timestamp("created_at", { mode: 'string' }).default(sql`CURRENT_TIMESTAMP`), + updatedAt: timestamp("updated_at", { mode: 'string' }).default(sql`CURRENT_TIMESTAMP`), + isAdmin: boolean("is_admin").default(false), + lastLogin: timestamp("last_login", { mode: 'string' }), + emailVerified: boolean("email_verified").default(false), + buildPrivacySetting: text("build_privacy_setting").default('public'), +}, (table) => { + return { + usersUsernameKey: unique("users_username_key").on(table.username), + usersEmailKey: unique("users_email_key").on(table.email), + usersBuildPrivacySettingCheck: check("users_build_privacy_setting_check", sql`build_privacy_setting = ANY (ARRAY['private'::text, 'public'::text])`), + } +}); \ No newline at end of file