Skip to content

Commit f42d810

Browse files
D-K-Pmatt-aitken
authored andcommitted
Improved task code / task names
1 parent 1addccd commit f42d810

8 files changed

Lines changed: 27 additions & 33 deletions

File tree

product-image-generator/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ Each generation builds an enhanced prompt from the structured product analysis.
144144
src/
145145
├── trigger/
146146
│ ├── image-upload.ts # Upload to R2 + structured product analysis (OpenAI)
147-
│ └── generate-and-upload-image.ts # Flux generation (Replicate) + R2 upload
147+
│ └── generate-image-and-upload.ts # Flux generation (Replicate) + R2 upload
148148
├── app/
149149
│ ├── actions.ts # Server actions: trigger tasks + public tokens
150150
│ ├── components/
@@ -183,7 +183,7 @@ src/
183183

184184
### Adding Generation Styles
185185

186-
Add a new style key in `generate-and-upload-image.ts` inside `stylePrompts` and wire a corresponding button/card in `app/page.tsx`.
186+
Add a new style key in `generate-image-and-upload.ts` inside `stylePrompts` and wire a corresponding button/card in `app/page.tsx`.
187187

188188
### Modifying Image Dimensions
189189

product-image-generator/app/actions.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
"use server";
22

33
import { auth, tasks } from "@trigger.dev/sdk";
4-
import type { generateAndUploadImage } from "../src/trigger/generate-and-upload-image";
5-
import type { uploadImageToR2 } from "../src/trigger/image-upload";
4+
import type { generateAndUploadImage } from "../src/trigger/generate-image-and-upload";
5+
import type { uploadImageToR2 } from "../src/trigger/upload-image-and-analyze";
66
import type { ProductAnalysis } from "./types/trigger";
77

88
export async function triggerUploadTask(payload: {
@@ -12,7 +12,7 @@ export async function triggerUploadTask(payload: {
1212
}) {
1313
try {
1414
const handle = await tasks.trigger<typeof uploadImageToR2>(
15-
"upload-image-to-r2",
15+
"upload-image-and-analyze",
1616
payload,
1717
);
1818

@@ -44,7 +44,7 @@ export async function triggerGenerationTask(payload: {
4444
}) {
4545
try {
4646
const handle = await tasks.trigger<typeof generateAndUploadImage>(
47-
"generate-and-upload-image",
47+
"generate-image-and-upload",
4848
payload,
4949
);
5050

product-image-generator/app/components/CustomPromptCard.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
} from "lucide-react";
1414
import { useState, useEffect } from "react";
1515
import { triggerGenerationTask } from "../actions";
16-
import type { generateAndUploadImage } from "../../src/trigger/generate-and-upload-image";
16+
import type { generateAndUploadImage } from "../../src/trigger/generate-image-and-upload";
1717
import type { ProductAnalysis } from "../types/trigger";
1818
import { Button } from "./ui/button";
1919
import { Card } from "./ui/card";

product-image-generator/app/components/GeneratedCard.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
import { useState, useEffect, useCallback } from "react";
1515
import { useRealtimeRun } from "@trigger.dev/react-hooks";
1616
import { triggerGenerationTask } from "../actions";
17-
import type { generateAndUploadImage } from "../../src/trigger/generate-and-upload-image";
17+
import type { generateAndUploadImage } from "../../src/trigger/generate-image-and-upload";
1818
import type { ProductAnalysis } from "../types/trigger";
1919

2020
interface GeneratedCardProps {

product-image-generator/app/components/UploadCard.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import { useRealtimeTaskTrigger } from "@trigger.dev/react-hooks";
44
import { LucideLoader, Upload } from "lucide-react";
55
import { useEffect, useRef, useState } from "react";
6-
import type { uploadImageToR2 } from "../../src/trigger/image-upload";
6+
import type { uploadImageToR2 } from "../../src/trigger/upload-image-and-analyze";
77
import type {
88
ProductAnalysis,
99
UploadTaskMetadata,
@@ -32,7 +32,7 @@ export default function UploadCard({
3232
// Use realtime task trigger hook for immediate triggering
3333
const { submit, run, error, isLoading } = useRealtimeTaskTrigger<
3434
typeof uploadImageToR2
35-
>("upload-image-to-r2", {
35+
>("upload-image-and-analyze", {
3636
accessToken: triggerToken,
3737
enabled: Boolean(triggerToken),
3838
});
@@ -133,7 +133,7 @@ export default function UploadCard({
133133

134134
return (
135135
<Card
136-
className={`aspect-[3/4] border-2 border-dashed transition-colors cursor-pointer group relative overflow-hidden ${
136+
className={`aspect-[3/4] border-2 border-dashed transition-colors cursor-pointer group relative overflow-hidden ${
137137
isDragOver
138138
? "border-gray-500 bg-gray-500/5"
139139
: "border-gray-500 bg-card hover:border-gray-500/80"

product-image-generator/app/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import ProductImageGenerator from "./ProductImageGenerator";
33

44
export default async function Page() {
55
const triggerToken = await auth.createTriggerPublicToken([
6-
"upload-image-to-r2",
6+
"upload-image-and-analyze",
77
]);
88
return <ProductImageGenerator triggerToken={triggerToken} />;
99
}

product-image-generator/src/trigger/generate-and-upload-image.ts renamed to product-image-generator/src/trigger/generate-image-and-upload.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ const s3Client = new S3Client({
1818
const aiModel = "black-forest-labs/flux-dev";
1919

2020
export const generateAndUploadImage = task({
21-
id: "generate-and-upload-image",
21+
id: "generate-image-and-upload",
2222
maxDuration: 600, // 10 minutes max
2323
run: async (payload: {
2424
promptStyle: string; // Style prompt (table-shot, lifestyle, hero, custom)

product-image-generator/src/trigger/image-upload.ts renamed to product-image-generator/src/trigger/upload-image-and-analyze.ts

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -90,44 +90,38 @@ async function analyzeProductStructured(imageUrl: string) {
9090
}
9191

9292
export const uploadImageToR2 = task({
93-
id: "upload-image-to-r2",
94-
maxDuration: 300, // 5 minutes max
93+
id: "upload-image-and-analyze",
94+
maxDuration: 300, // 5 mins
9595
run: async (payload: {
9696
imageBuffer: string; // base64 encoded image
9797
fileName: string;
9898
contentType: string;
9999
}) => {
100100
const { imageBuffer, fileName, contentType } = payload;
101101

102-
// Set initial metadata with 5 steps (added analysis)
102+
// Step 1: Start the upload and analysis
103103
metadata.set("status", "starting");
104104
metadata.set("progress", {
105105
step: 1,
106-
total: 5,
106+
total: 4,
107107
message: "Preparing upload and analysis...",
108108
});
109109

110110
logger.log("Starting image upload and analysis", { fileName, contentType });
111111

112-
// Convert base64 to buffer
113-
metadata.set("progress", {
114-
step: 2,
115-
total: 5,
116-
message: "Processing image data...",
117-
});
118112
const buffer = Buffer.from(imageBuffer, "base64");
119113
const fileSize = buffer.length;
120114

121115
logger.log(`Image size: ${fileSize} bytes`);
122116

123-
// Generate unique key for R2
117+
// Step 2: Generate unique key for R2
124118
const timestamp = Date.now();
125119
const sanitizedFileName = fileName.replace(/[^a-zA-Z0-9.-]/g, "_");
126120
const r2Key = `uploaded-images/${timestamp}-${sanitizedFileName}`;
127121

128122
metadata.set("progress", {
129-
step: 3,
130-
total: 5,
123+
step: 2,
124+
total: 4,
131125
message: "Uploading to storage...",
132126
});
133127

@@ -158,20 +152,20 @@ export const uploadImageToR2 = task({
158152
// Construct the public URL using the R2_PUBLIC_URL env var
159153
const publicUrl = `${process.env.R2_PUBLIC_URL}/${r2Key}`;
160154

161-
// Step 4: Analyze product properties
155+
// Step 3: Analyze product properties
162156
metadata.set("progress", {
163-
step: 4,
164-
total: 5,
157+
step: 3,
158+
total: 4,
165159
message: "Analyzing product properties...",
166160
});
167161

168162
const productAnalysis = await analyzeProductStructured(publicUrl);
169163
logger.log("Product analysis completed", { productAnalysis });
170164

171-
// Step 5: Complete
165+
// Step 4: Complete
172166
metadata.set("progress", {
173-
step: 5,
174-
total: 5,
167+
step: 4,
168+
total: 4,
175169
message: "Upload and analysis completed!",
176170
});
177171
metadata.set("status", "completed");
@@ -200,7 +194,7 @@ export const uploadImageToR2 = task({
200194
metadata.set("status", "failed");
201195
metadata.set("progress", {
202196
step: 0,
203-
total: 5,
197+
total: 4,
204198
message: "Upload and analysis failed",
205199
});
206200
metadata.set(

0 commit comments

Comments
 (0)