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", |     "build": "next build", | ||||||
|     "db:push": "drizzle-kit push", |     "db:push": "drizzle-kit push", | ||||||
|     "db:studio": "drizzle-kit studio", |     "db:studio": "drizzle-kit studio", | ||||||
|     "dev": "next dev --turbo", |     "dev": "next dev", | ||||||
|     "lint": "next lint", |     "lint": "next lint", | ||||||
|     "start": "next start" |     "start": "next start" | ||||||
|   }, |   }, | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| import { getWines } from "../../server/actions/allWines"; | import { getWines } from "~/server/actions/allWines"; | ||||||
| import WineName from "./WineName"; | import WineName from "./WineName"; | ||||||
| import WineProducer from "./WineProducer"; | import WineProducer from "./WineProducer"; | ||||||
| 
 | 
 | ||||||
| @ -6,10 +6,9 @@ const allWines = await getWines(); | |||||||
| export default async function WineCards() { | export default async function WineCards() { | ||||||
|   return ( |   return ( | ||||||
|     <> |     <> | ||||||
|       <p>{JSON.stringify(allWines)}</p> |  | ||||||
|       {allWines.map((wine, i) => { |       {allWines.map((wine, i) => { | ||||||
|         return ( |         return ( | ||||||
|           <div key={i}> |           <div key={i} className="flex"> | ||||||
|             <WineName name={wine.name} /> - <WineProducer id={wine.producer} /> |             <WineName name={wine.name} /> - <WineProducer id={wine.producer} /> | ||||||
|           </div> |           </div> | ||||||
|         ); |         ); | ||||||
|  | |||||||
| @ -1,8 +1,25 @@ | |||||||
| import { UUID } from "crypto"; |  | ||||||
| import { PgUUID } from "drizzle-orm/pg-core"; |  | ||||||
| import getProducer from "~/server/actions/getProducer"; | import getProducer from "~/server/actions/getProducer"; | ||||||
| 
 | 
 | ||||||
| export default async function (props: { id: string }) { | export default async function WineProducer(props: { id: string }) { | ||||||
|   const result = await getProducer(props.id); |   const { id } = props; | ||||||
|   return <p>{result?.name}</p>; | 
 | ||||||
|  |   // 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 CreateWine from "./_components/CreateWine"; | ||||||
| import WineCards from "./_components/WineCards"; | import WineCards from "./_components/WineCards"; | ||||||
| 
 | 
 | ||||||
| @ -5,11 +6,13 @@ export const dynamic = "force-dynamic"; | |||||||
| 
 | 
 | ||||||
| export default async function HomePage() { | export default async function HomePage() { | ||||||
|   return ( |   return ( | ||||||
|     <main className=""> |     <main> | ||||||
|       <div className="container "> |       <div className="container "> | ||||||
|         <h1>Yes hello</h1> |         <h1>Yes hello</h1> | ||||||
|  |         <Suspense fallback={<p>Loading....</p>}> | ||||||
|           <CreateWine /> |           <CreateWine /> | ||||||
|           <WineCards /> |           <WineCards /> | ||||||
|  |         </Suspense> | ||||||
|       </div> |       </div> | ||||||
|     </main> |     </main> | ||||||
|   ); |   ); | ||||||
|  | |||||||
| @ -1,11 +1,10 @@ | |||||||
| "use server" | "use server"; | ||||||
| import { producers } from "../db/schema"; | import { producers } from "../db/schema"; | ||||||
| import { db } from "../db"; | import { db } from "../db"; | ||||||
| import { eq } from "drizzle-orm"; | import { eq } from "drizzle-orm"; | ||||||
| 
 | 
 | ||||||
| export default async function getProducer(id: string){ | export default async function getProducer(id: string) { | ||||||
|   return db.query.producers.findFirst({ |   return db.query.producers.findFirst({ | ||||||
|         where: eq(producers.id, id) |     where: eq(producers.id, id), | ||||||
|   }); |   }); | ||||||
| 
 |  | ||||||
| } | } | ||||||
| @ -1,10 +1,13 @@ | |||||||
| "use server" | "use server"; | ||||||
| import { sql } from "drizzle-orm"; | import { sql } from "drizzle-orm"; | ||||||
| import { db } from "../db"; | import { db } from "../db"; | ||||||
| import { wines, producers } from "../db/schema"; | import { wines, producers } from "../db/schema"; | ||||||
| import { UUID } from "crypto"; | import { UUID } from "crypto"; | ||||||
| 
 | 
 | ||||||
| export async function getWineDetails(id: UUID) { | export async function getWineDetails(id: string) { | ||||||
|     const results = await db.select().from(producers).where(sql `${producers.id} = ${id}`) |   const results = await db | ||||||
|  |     .select() | ||||||
|  |     .from(producers) | ||||||
|  |     .where(sql`${producers.id} = ${id}`); | ||||||
|   return results; |   return results; | ||||||
|   } | } | ||||||
|  | |||||||
| @ -5,23 +5,23 @@ import { | |||||||
|   uniqueIndex, |   uniqueIndex, | ||||||
|   uuid, |   uuid, | ||||||
| } from "drizzle-orm/pg-core"; | } 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 createTable = pgTableCreator((name) => `wine-shop_${name}`); | ||||||
| 
 | 
 | ||||||
| export const producers = createTable( | export const producers = createTable( | ||||||
|   "producer", |   "producer", | ||||||
|   { |   { | ||||||
|     id: uuid('id').primaryKey().defaultRandom(), |     id: uuid("id").primaryKey().defaultRandom(), | ||||||
|     name: text('name').notNull(), |     name: text("name").notNull(), | ||||||
|     createdAt: timestamp('createdAt').defaultNow().notNull(), |     createdAt: timestamp("createdAt").defaultNow().notNull(), | ||||||
|     country: text('country').notNull(), |     country: text("country").notNull(), | ||||||
|     region: text('region').notNull(), |     region: text("region").notNull(), | ||||||
|     email: text('email').notNull() |     email: text("email").notNull(), | ||||||
|   }, |   }, | ||||||
|   (producers) => { |   (producers) => { | ||||||
|     return { |     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( | export const wines = createTable( | ||||||
|   "wine", |   "wine", | ||||||
|   { |   { | ||||||
|     id: uuid('id').primaryKey().defaultRandom(), |     id: uuid("id").primaryKey().defaultRandom(), | ||||||
|     name: text('name').notNull(), |     name: text("name").notNull(), | ||||||
|     createdAt: timestamp('createdAt').defaultNow().notNull(), |     createdAt: timestamp("createdAt").defaultNow().notNull(), | ||||||
|     updatedAt: timestamp('updatedAt').defaultNow(), |     updatedAt: timestamp("updatedAt").defaultNow(), | ||||||
|     producer: uuid('producer').notNull(), |     producer: uuid("producer").notNull(), | ||||||
|   }, |   }, | ||||||
|   (wines) => { |   (wines) => { | ||||||
|     return { |     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 SelectWine = typeof wines.$inferSelect; | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| export type SelectProducer = typeof producers.$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