From bfe40a9d8d8dfc40c0a2284c3c681f9d18d5e907 Mon Sep 17 00:00:00 2001 From: Yunus <19399214+yunusefendi52@users.noreply.github.com> Date: Thu, 4 Apr 2024 06:53:03 +0700 Subject: [PATCH] List artifacts --- bun.lockb | Bin 449716 -> 503216 bytes components/AppFileUpload.vue | 44 ++++++++++++++ components/Releases.vue | 57 +++++++++++++++++- components/UploadArtifact.vue | 3 + package.json | 7 ++- pages/orgs/[orgName]/apps/[appId].vue | 42 +++++++------ .../migrations/20240402001549_/migration.sql | 19 ++++++ .../migrations/20240403222737_/migration.sql | 17 ++++++ .../migrations/20240403223916_/migration.sql | 2 + prisma/schema.prisma | 16 ++++- server/api/artifacts/list-artifacts.get.ts | 27 +++++++++ .../api/artifacts/upload-artifact-url.post.ts | 46 ++++++++++++++ server/api/artifacts/upload-artifact.post.ts | 20 ++++++ server/middleware/00.start.ts | 10 ++- server/middleware/auth-middleware.ts | 2 +- server/plugins/startup.ts | 12 ++++ server/services.ts | 3 + server/utils/utils.ts | 9 +++ utils/utils.ts | 14 +++++ 19 files changed, 323 insertions(+), 27 deletions(-) create mode 100644 components/AppFileUpload.vue create mode 100644 components/UploadArtifact.vue create mode 100644 prisma/migrations/20240402001549_/migration.sql create mode 100644 prisma/migrations/20240403222737_/migration.sql create mode 100644 prisma/migrations/20240403223916_/migration.sql create mode 100644 server/api/artifacts/list-artifacts.get.ts create mode 100644 server/api/artifacts/upload-artifact-url.post.ts create mode 100644 server/api/artifacts/upload-artifact.post.ts create mode 100644 utils/utils.ts diff --git a/bun.lockb b/bun.lockb index d72c73a8b8573b9d75a5b60f86ecbf8010a6890d..27f67e2330b7fc4d2c44c59d95ef40d1fb265608 100755 GIT binary patch delta 127288 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 F{}0>h(HsB( delta 89163 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 c*xEO`vu)q#&hE;yy}p*cPJ6q_O7 +
+ +
+ +
+
+ + + diff --git a/components/Releases.vue b/components/Releases.vue index 5e69208..ebd5b48 100644 --- a/components/Releases.vue +++ b/components/Releases.vue @@ -1,3 +1,56 @@ \ No newline at end of file + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/UploadArtifact.vue b/components/UploadArtifact.vue new file mode 100644 index 0000000..612ea26 --- /dev/null +++ b/components/UploadArtifact.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/package.json b/package.json index 068f183..cea6b45 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,8 @@ "format:check": "prettier --check \"**/*.{js,vue,d.ts}\"" }, "dependencies": { + "@aws-sdk/client-s3": "^3.540.0", + "@aws-sdk/s3-request-presigner": "^3.540.0", "@hebilicious/vue-query-nuxt": "^0.3.0", "@pinia/nuxt": "^0.5.1", "@prisma/client": "^5.11.0", @@ -24,17 +26,20 @@ "h3": "^1.11.1", "jsonwebtoken": "^9.0.2", "lodash": "^4.17.21", + "moment": "^2.30.1", "pg": "^8.11.3", "pinia": "^2.1.7", "primeflex": "^3.3.0", "primeicons": "^6.0.1", - "primevue": "^3.49.1" + "primevue": "^3.49.1", + "uuid": "^9.0.1" }, "devDependencies": { "@babel/eslint-parser": "^7.18.9", "@types/jsonwebtoken": "^9.0.6", "@types/lodash": "^4.17.0", "@types/pg": "^8.11.4", + "@types/uuid": "^9.0.8", "autoprefixer": "^10.4.19", "eslint": "^8.30.0", "eslint-config-prettier": "^8.5.0", diff --git a/pages/orgs/[orgName]/apps/[appId].vue b/pages/orgs/[orgName]/apps/[appId].vue index 6bee0dd..6d0865b 100644 --- a/pages/orgs/[orgName]/apps/[appId].vue +++ b/pages/orgs/[orgName]/apps/[appId].vue @@ -1,22 +1,20 @@ \ No newline at end of file diff --git a/prisma/migrations/20240402001549_/migration.sql b/prisma/migrations/20240402001549_/migration.sql new file mode 100644 index 0000000..235792d --- /dev/null +++ b/prisma/migrations/20240402001549_/migration.sql @@ -0,0 +1,19 @@ +-- CreateTable +CREATE TABLE "Artifacts" ( + "id" SERIAL NOT NULL, + "fileObjectId" TEXT NOT NULL, + "versionName" TEXT NOT NULL, + "versionCode" TEXT NOT NULL, + "releaseNotes" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "appsId" INTEGER NOT NULL, + + CONSTRAINT "Artifacts_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "Artifacts_fileObjectId_key" ON "Artifacts"("fileObjectId"); + +-- AddForeignKey +ALTER TABLE "Artifacts" ADD CONSTRAINT "Artifacts_appsId_fkey" FOREIGN KEY ("appsId") REFERENCES "Apps"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/prisma/migrations/20240403222737_/migration.sql b/prisma/migrations/20240403222737_/migration.sql new file mode 100644 index 0000000..c5c7587 --- /dev/null +++ b/prisma/migrations/20240403222737_/migration.sql @@ -0,0 +1,17 @@ +/* + Warnings: + + - You are about to drop the column `fileObjectId` on the `Artifacts` table. All the data in the column will be lost. + - A unique constraint covering the columns `[fileObjectKey]` on the table `Artifacts` will be added. If there are existing duplicate values, this will fail. + - Added the required column `fileObjectKey` to the `Artifacts` table without a default value. This is not possible if the table is not empty. + +*/ +-- DropIndex +DROP INDEX "Artifacts_fileObjectId_key"; + +-- AlterTable +ALTER TABLE "Artifacts" DROP COLUMN "fileObjectId", +ADD COLUMN "fileObjectKey" TEXT NOT NULL; + +-- CreateIndex +CREATE UNIQUE INDEX "Artifacts_fileObjectKey_key" ON "Artifacts"("fileObjectKey"); diff --git a/prisma/migrations/20240403223916_/migration.sql b/prisma/migrations/20240403223916_/migration.sql new file mode 100644 index 0000000..5db5b81 --- /dev/null +++ b/prisma/migrations/20240403223916_/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "Artifacts" ALTER COLUMN "releaseNotes" DROP NOT NULL; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 0700376..3e66ac9 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -10,7 +10,7 @@ datasource db { // } generator clientWorker { - provider = "prisma-client-js" + provider = "prisma-client-js" // previewFeatures = ["driverAdapters"] } @@ -46,6 +46,20 @@ model Apps { Organization Organizations @relation(fields: [organizationsId], references: [id]) organizationsId Int + Artifacts Artifacts[] @@unique([organizationsId, name]) } + +model Artifacts { + id Int @id @default(autoincrement()) + fileObjectKey String @unique + versionName String + versionCode String + releaseNotes String? + createdAt DateTime + updatedAt DateTime + + apps Apps @relation(fields: [appsId], references: [id]) + appsId Int +} diff --git a/server/api/artifacts/list-artifacts.get.ts b/server/api/artifacts/list-artifacts.get.ts new file mode 100644 index 0000000..bbdca40 --- /dev/null +++ b/server/api/artifacts/list-artifacts.get.ts @@ -0,0 +1,27 @@ +import { getStorageKeys } from "~/server/utils/utils" + +export default defineEventHandler(async (event) => { + const prisma = event.context.prisma + const { appName, orgName } = getQuery(event) + return await prisma.artifacts.findMany({ + include: { + apps: true, + }, + orderBy: { + createdAt: 'desc', + }, + where: { + apps: { + name: appName?.toString(), + Organization: { + name: orgName?.toString(), + OrganizationsPeople: { + every: { + userId: event.context.auth.userId, + }, + }, + }, + }, + }, + }) +}) diff --git a/server/api/artifacts/upload-artifact-url.post.ts b/server/api/artifacts/upload-artifact-url.post.ts new file mode 100644 index 0000000..e36fe52 --- /dev/null +++ b/server/api/artifacts/upload-artifact-url.post.ts @@ -0,0 +1,46 @@ +import { getStorageKeys } from "~/server/utils/utils" + +export default defineEventHandler(async (event) => { + const { key, appName, orgName } = await readBody(event) + const { temp, assets } = getStorageKeys(event.context.auth, key) + const prisma = event.context.prisma + await prisma.$transaction(async (t) => { + // TODO: Select only id + const app = await prisma.apps.findFirstOrThrow({ + include: { + Organization: true, + }, + where: { + name: appName, + Organization: { + name: orgName, + OrganizationsPeople: { + every: { + userId: event.context.auth.userId, + }, + }, + }, + }, + }) + const now = new Date() + await prisma.artifacts.create({ + data: { + createdAt: now, + updatedAt: now, + fileObjectKey: key, + versionCode: '1', + versionName: '1.0.0', + appsId: app.id, + }, + }) + }) + await event.context.s3.copyObject({ + CopySource: `app-deployin/${temp}`, + Bucket: 'app-deployin', + Key: assets, + }) + await event.context.s3.deleteObject({ + Bucket: 'app-deployin', + Key: temp, + }) +}) diff --git a/server/api/artifacts/upload-artifact.post.ts b/server/api/artifacts/upload-artifact.post.ts new file mode 100644 index 0000000..52006f5 --- /dev/null +++ b/server/api/artifacts/upload-artifact.post.ts @@ -0,0 +1,20 @@ +import { PutObjectCommand } from "@aws-sdk/client-s3"; +import { getSignedUrl } from "@aws-sdk/s3-request-presigner" +import { v4 } from "uuid"; +import { getStorageKeys } from "~/server/utils/utils"; + +export default defineEventHandler(async (event) => { + const key = v4() + var expires = new Date(); expires.setMinutes(expires.getMinutes() + 30); + const { temp } = getStorageKeys(event.context.auth, key) + const signedUrl = await getSignedUrl(event.context.s3Client, new PutObjectCommand({ + Bucket: 'app-deployin', + Key: temp, + // Expires: expires, // TODO: epxiry here + ContentType: 'application/vnd.android.package-archive', + })) + return { + file: key, + url: signedUrl, + } +}) diff --git a/server/middleware/00.start.ts b/server/middleware/00.start.ts index 63f3f05..444cab2 100644 --- a/server/middleware/00.start.ts +++ b/server/middleware/00.start.ts @@ -1,12 +1,18 @@ import { PrismaClient } from '@prisma/client' import { services } from '../services'; +import { S3, S3Client } from '@aws-sdk/client-s3/'; declare module 'h3' { interface H3EventContext { - prisma: PrismaClient; + prisma: PrismaClient, + s3Client: S3Client, + s3: S3, } } export default defineEventHandler(async (event) => { - event.context.prisma = services.prisma + event.context = { + ...event.context, + ...services, + } }) diff --git a/server/middleware/auth-middleware.ts b/server/middleware/auth-middleware.ts index db5b289..9f6ed6f 100644 --- a/server/middleware/auth-middleware.ts +++ b/server/middleware/auth-middleware.ts @@ -1,7 +1,7 @@ import jsonwebtoken from 'jsonwebtoken' import { JWT_KEY } from '../utils/utils'; -type AuthData = { +export type AuthData = { userId: number, } diff --git a/server/plugins/startup.ts b/server/plugins/startup.ts index 8b0d95a..6085b59 100644 --- a/server/plugins/startup.ts +++ b/server/plugins/startup.ts @@ -1,8 +1,20 @@ import { PrismaClient } from "@prisma/client" import { services } from "../services" +import { S3, S3Client, type S3ClientConfig } from "@aws-sdk/client-s3" export default defineNitroPlugin(async (nuxtApp) => { services.prisma = new PrismaClient({ log: ['error', 'info', 'query', 'warn'] }) + const s3Config: S3ClientConfig = { + credentials: { + accessKeyId: 'niMVVLTJtujejdnkkceX', + secretAccessKey: 'n8FRdjEn7mAKKSq2hpnXAShu6GhqSj8PqQ0IGl9H' + }, + endpoint: 'http://127.0.0.1:9000', + forcePathStyle: true, + region: 'us-east-1', + } + services.s3Client = new S3Client(s3Config) + services.s3 = new S3(s3Config) }) diff --git a/server/services.ts b/server/services.ts index 03d2044..4e5d25e 100644 --- a/server/services.ts +++ b/server/services.ts @@ -1,7 +1,10 @@ +import type { S3, S3Client } from "@aws-sdk/client-s3"; import type { PrismaClient } from "@prisma/client"; class Services { prisma!: PrismaClient; + s3Client!: S3Client + s3!: S3 } export const services = new Services() diff --git a/server/utils/utils.ts b/server/utils/utils.ts index 10db7e6..bbef3aa 100644 --- a/server/utils/utils.ts +++ b/server/utils/utils.ts @@ -1,5 +1,14 @@ +import type { AuthData } from "../middleware/auth-middleware" + export const normalizeName = (value: string): string => { return value.replaceAll(' ', '-') } export const JWT_KEY = process.env.JWT_KEY! + +export const getStorageKeys = (auth: AuthData, key: String) => { + return { + temp: `temporary/userId-${auth.userId}/${key}`, + assets: `assets/userId-${auth.userId}/${key}`, + } +} diff --git a/utils/utils.ts b/utils/utils.ts new file mode 100644 index 0000000..337dcd3 --- /dev/null +++ b/utils/utils.ts @@ -0,0 +1,14 @@ +export const toOsType = (osType?: number): OsType => { + switch (osType) { + case 0: + return 'android' + default: + return 'ios' + } +} + +export const getMimeTypeFromosType = (osType?: OsType): string => { + return osType == 'android' ?'application/vnd.android.package-archive' : 'application/octet-stream' +} + +export type OsType = 'android' | 'ios' \ No newline at end of file