more query action
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Vercel Production Deployment / Deploy-Production (push) Successful in 2m23s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Vercel Production Deployment / Deploy-Production (push) Successful in 2m23s
				
			This commit is contained in:
		
							parent
							
								
									f4cf2f3adc
								
							
						
					
					
						commit
						ffbf48bc8a
					
				@ -7,7 +7,7 @@
 | 
			
		||||
    "build": "next build",
 | 
			
		||||
    "db:push": "drizzle-kit push",
 | 
			
		||||
    "db:studio": "drizzle-kit studio",
 | 
			
		||||
    "dev": "next dev --turbo",
 | 
			
		||||
    "dev": "next dev",
 | 
			
		||||
    "lint": "next lint",
 | 
			
		||||
    "start": "next start"
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
import { getWines } from "../../server/actions/allWines";
 | 
			
		||||
import { getWines } from "~/server/actions/allWines";
 | 
			
		||||
import WineName from "./WineName";
 | 
			
		||||
import WineProducer from "./WineProducer";
 | 
			
		||||
 | 
			
		||||
@ -6,10 +6,9 @@ const allWines = await getWines();
 | 
			
		||||
export default async function WineCards() {
 | 
			
		||||
  return (
 | 
			
		||||
    <>
 | 
			
		||||
      <p>{JSON.stringify(allWines)}</p>
 | 
			
		||||
      {allWines.map((wine, i) => {
 | 
			
		||||
        return (
 | 
			
		||||
          <div key={i}>
 | 
			
		||||
          <div key={i} className="flex">
 | 
			
		||||
            <WineName name={wine.name} /> - <WineProducer id={wine.producer} />
 | 
			
		||||
          </div>
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,25 @@
 | 
			
		||||
import { UUID } from "crypto";
 | 
			
		||||
import { PgUUID } from "drizzle-orm/pg-core";
 | 
			
		||||
import getProducer from "~/server/actions/getProducer";
 | 
			
		||||
 | 
			
		||||
export default async function (props: { id: string }) {
 | 
			
		||||
  const result = await getProducer(props.id);
 | 
			
		||||
  return <p>{result?.name}</p>;
 | 
			
		||||
export default async function WineProducer(props: { id: string }) {
 | 
			
		||||
  const { id } = props;
 | 
			
		||||
 | 
			
		||||
  // Validate the id before making the database call
 | 
			
		||||
  if (!id) {
 | 
			
		||||
    return <p>Invalid producer ID</p>;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  try {
 | 
			
		||||
    const result = await getProducer(id);
 | 
			
		||||
    return !result ? <p>Unable to retrieve producer</p> : <p>{result?.name}</p>;
 | 
			
		||||
  } catch (error) {
 | 
			
		||||
    console.error("Error fetching producer:", error);
 | 
			
		||||
    return <p>Error fetching producer</p>;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Utility function to validate UUID
 | 
			
		||||
function isValidUUID(uuid: string) {
 | 
			
		||||
  const uuidRegex =
 | 
			
		||||
    /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
 | 
			
		||||
  return uuidRegex.test(uuid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,4 @@
 | 
			
		||||
import { Suspense } from "react";
 | 
			
		||||
import CreateWine from "./_components/CreateWine";
 | 
			
		||||
import WineCards from "./_components/WineCards";
 | 
			
		||||
 | 
			
		||||
@ -5,11 +6,13 @@ export const dynamic = "force-dynamic";
 | 
			
		||||
 | 
			
		||||
export default async function HomePage() {
 | 
			
		||||
  return (
 | 
			
		||||
    <main className="">
 | 
			
		||||
    <main>
 | 
			
		||||
      <div className="container ">
 | 
			
		||||
        <h1>Yes hello</h1>
 | 
			
		||||
        <CreateWine />
 | 
			
		||||
        <WineCards />
 | 
			
		||||
        <Suspense fallback={<p>Loading....</p>}>
 | 
			
		||||
          <CreateWine />
 | 
			
		||||
          <WineCards />
 | 
			
		||||
        </Suspense>
 | 
			
		||||
      </div>
 | 
			
		||||
    </main>
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
@ -1,11 +1,10 @@
 | 
			
		||||
"use server"
 | 
			
		||||
"use server";
 | 
			
		||||
import { producers } from "../db/schema";
 | 
			
		||||
import { db } from "../db";
 | 
			
		||||
import { eq } from "drizzle-orm";
 | 
			
		||||
 | 
			
		||||
export default async function getProducer(id: string){
 | 
			
		||||
    return db.query.producers.findFirst({
 | 
			
		||||
        where: eq(producers.id, id)
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
export default async function getProducer(id: string) {
 | 
			
		||||
  return db.query.producers.findFirst({
 | 
			
		||||
    where: eq(producers.id, id),
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,10 +1,13 @@
 | 
			
		||||
"use server"
 | 
			
		||||
"use server";
 | 
			
		||||
import { sql } from "drizzle-orm";
 | 
			
		||||
import { db } from "../db";
 | 
			
		||||
import { wines, producers } from "../db/schema";
 | 
			
		||||
import { UUID } from "crypto";
 | 
			
		||||
 | 
			
		||||
export async function getWineDetails(id: UUID) {
 | 
			
		||||
    const results = await db.select().from(producers).where(sql `${producers.id} = ${id}`)
 | 
			
		||||
    return results;
 | 
			
		||||
  }
 | 
			
		||||
export async function getWineDetails(id: string) {
 | 
			
		||||
  const results = await db
 | 
			
		||||
    .select()
 | 
			
		||||
    .from(producers)
 | 
			
		||||
    .where(sql`${producers.id} = ${id}`);
 | 
			
		||||
  return results;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -5,23 +5,23 @@ import {
 | 
			
		||||
  uniqueIndex,
 | 
			
		||||
  uuid,
 | 
			
		||||
} from "drizzle-orm/pg-core";
 | 
			
		||||
import { relations } from 'drizzle-orm';
 | 
			
		||||
import { relations } from "drizzle-orm";
 | 
			
		||||
 | 
			
		||||
export const createTable = pgTableCreator((name) => `wine-shop_${name}`);
 | 
			
		||||
 | 
			
		||||
export const producers = createTable(
 | 
			
		||||
  "producer",
 | 
			
		||||
  {
 | 
			
		||||
    id: uuid('id').primaryKey().defaultRandom(),
 | 
			
		||||
    name: text('name').notNull(),
 | 
			
		||||
    createdAt: timestamp('createdAt').defaultNow().notNull(),
 | 
			
		||||
    country: text('country').notNull(),
 | 
			
		||||
    region: text('region').notNull(),
 | 
			
		||||
    email: text('email').notNull()
 | 
			
		||||
    id: uuid("id").primaryKey().defaultRandom(),
 | 
			
		||||
    name: text("name").notNull(),
 | 
			
		||||
    createdAt: timestamp("createdAt").defaultNow().notNull(),
 | 
			
		||||
    country: text("country").notNull(),
 | 
			
		||||
    region: text("region").notNull(),
 | 
			
		||||
    email: text("email").notNull(),
 | 
			
		||||
  },
 | 
			
		||||
  (producers) => {
 | 
			
		||||
    return {
 | 
			
		||||
      uniqueIdx: uniqueIndex('email').on(producers.email),
 | 
			
		||||
      uniqueIdx: uniqueIndex("email").on(producers.email),
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
);
 | 
			
		||||
@ -33,15 +33,15 @@ export const producersRelations = relations(producers, ({ many }) => ({
 | 
			
		||||
export const wines = createTable(
 | 
			
		||||
  "wine",
 | 
			
		||||
  {
 | 
			
		||||
    id: uuid('id').primaryKey().defaultRandom(),
 | 
			
		||||
    name: text('name').notNull(),
 | 
			
		||||
    createdAt: timestamp('createdAt').defaultNow().notNull(),
 | 
			
		||||
    updatedAt: timestamp('updatedAt').defaultNow(),
 | 
			
		||||
    producer: uuid('producer').notNull(),
 | 
			
		||||
    id: uuid("id").primaryKey().defaultRandom(),
 | 
			
		||||
    name: text("name").notNull(),
 | 
			
		||||
    createdAt: timestamp("createdAt").defaultNow().notNull(),
 | 
			
		||||
    updatedAt: timestamp("updatedAt").defaultNow(),
 | 
			
		||||
    producer: uuid("producer").notNull(),
 | 
			
		||||
  },
 | 
			
		||||
  (wines) => {
 | 
			
		||||
    return {
 | 
			
		||||
      uniqueIdx: uniqueIndex('unique_idx').on(wines.id),
 | 
			
		||||
      uniqueIdx: uniqueIndex("unique_idx").on(wines.id),
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
);
 | 
			
		||||
@ -55,6 +55,5 @@ export const winesRelations = relations(wines, ({ one }) => ({
 | 
			
		||||
 | 
			
		||||
export type SelectWine = typeof wines.$inferSelect;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
export type SelectProducer = typeof producers.$inferSelect;
 | 
			
		||||
export type InsertProducer = typeof producers.$inferInsert;
 | 
			
		||||
export type InsertProducer = typeof producers.$inferInsert;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user