diff --git a/.gitignore b/.gitignore index 6d678dc..8903641 100644 --- a/.gitignore +++ b/.gitignore @@ -41,4 +41,4 @@ yarn-error.log* *.tsbuildinfo next-env.d.ts -public/uploads/ \ No newline at end of file +public/mii/ \ No newline at end of file diff --git a/prisma/migrations/20250405104409_nullable_images/migration.sql b/prisma/migrations/20250405104409_nullable_images/migration.sql deleted file mode 100644 index ec4c927..0000000 --- a/prisma/migrations/20250405104409_nullable_images/migration.sql +++ /dev/null @@ -1,3 +0,0 @@ --- AlterTable -ALTER TABLE "miis" ALTER COLUMN "qrCodeUrl" DROP NOT NULL, -ALTER COLUMN "studioUrl" DROP NOT NULL; diff --git a/prisma/migrations/20250404173207_init/migration.sql b/prisma/migrations/20250405161120_init/migration.sql similarity index 95% rename from prisma/migrations/20250404173207_init/migration.sql rename to prisma/migrations/20250405161120_init/migration.sql index a789cb4..70f3168 100644 --- a/prisma/migrations/20250404173207_init/migration.sql +++ b/prisma/migrations/20250405161120_init/migration.sql @@ -45,10 +45,12 @@ CREATE TABLE "miis" ( "id" SERIAL NOT NULL, "userId" INTEGER NOT NULL, "name" VARCHAR(64) NOT NULL, - "qrCodeUrl" TEXT NOT NULL, - "studioUrl" TEXT NOT NULL, "images" TEXT[], "tags" TEXT[], + "firstName" TEXT NOT NULL, + "lastName" TEXT NOT NULL, + "islandName" TEXT NOT NULL, + "allowedCopying" BOOLEAN NOT NULL, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "miis_pkey" PRIMARY KEY ("id") diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 133854c..5d4d98f 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -61,13 +61,16 @@ model Session { } model Mii { - id Int @id @default(autoincrement()) - userId Int - name String @db.VarChar(64) - qrCodeUrl String? - studioUrl String? - images String[] - tags String[] + id Int @id @default(autoincrement()) + userId Int + name String @db.VarChar(64) + images String[] + tags String[] + + firstName String + lastName String + islandName String + allowedCopying Boolean createdAt DateTime @default(now()) diff --git a/src/app/api/submit/route.ts b/src/app/api/submit/route.ts index 98f8649..c14c105 100644 --- a/src/app/api/submit/route.ts +++ b/src/app/api/submit/route.ts @@ -13,7 +13,7 @@ import { nameSchema, tagsSchema } from "@/lib/schemas"; import Mii from "@/utils/mii.js/mii"; import TomodachiLifeMii from "@/utils/tomodachi-life-mii"; -const uploadsDirectory = path.join(process.cwd(), "public", "uploads"); +const uploadsDirectory = path.join(process.cwd(), "public", "mii"); export async function POST(request: Request) { const session = await auth(); @@ -76,14 +76,17 @@ export async function POST(request: Request) { userId: Number(session.user.id), name, tags, + + firstName: tomodachiLifeMii.firstName, + lastName: tomodachiLifeMii.lastName, + islandName: tomodachiLifeMii.islandName, + allowedCopying: mii.allowCopying, }, }); // Ensure directories exist - await Promise.all([ - fs.mkdir(path.join(uploadsDirectory, "studio"), { recursive: true }), - fs.mkdir(path.join(uploadsDirectory, "qr-code"), { recursive: true }), - ]); + const miiUploadsDirectory = path.join(uploadsDirectory, miiRecord.id.toString()); + await fs.mkdir(miiUploadsDirectory, { recursive: true }); // Download the image of the Mii let studioBuffer: Buffer; @@ -107,7 +110,7 @@ export async function POST(request: Request) { try { // Compress and upload const studioWebpBuffer = await sharp(studioBuffer).webp({ quality: 85 }).toBuffer(); - const studioFileLocation = path.join(uploadsDirectory, "studio", `${miiRecord.id}.webp`); + const studioFileLocation = path.join(miiUploadsDirectory, "mii.webp"); await fs.writeFile(studioFileLocation, studioWebpBuffer); @@ -124,22 +127,11 @@ export async function POST(request: Request) { // Compress and upload const codeWebpBuffer = await sharp(codeBuffer).webp({ quality: 85 }).toBuffer(); - const codeFileLocation = path.join(uploadsDirectory, "qr-code", `${miiRecord.id}.webp`); + const codeFileLocation = path.join(miiUploadsDirectory, "qr-code.webp"); await fs.writeFile(codeFileLocation, codeWebpBuffer); // todo: upload user images - // Update database to use images - await prisma.mii.update({ - where: { - id: miiRecord.id, - }, - data: { - studioUrl: studioFileLocation, - qrCodeUrl: codeFileLocation, - }, - }); - return Response.json({ success: true, id: miiRecord.id }); } catch (error) { await prisma.mii.delete({ where: { id: miiRecord.id } });