From 7371819ed7e31b922b9281ef1b0ada4d6b941789 Mon Sep 17 00:00:00 2001 From: Roman Godmaire Date: Fri, 9 Feb 2024 22:43:36 -0500 Subject: [PATCH] misc: initial move to pants --- .gitignore | 13 +-- pants.toml | 14 ++++ .eslintignore => plice/.eslintignore | 0 .eslintrc.cjs => plice/.eslintrc.cjs | 0 plice/.gitignore | 12 +++ .npmrc => plice/.npmrc | 0 .prettierignore => plice/.prettierignore | 0 .prettierrc => plice/.prettierrc | 0 plice/.projectile | 0 plice/BUILD | 54 +++++++++++++ package.json => plice/package.json | 2 +- pnpm-lock.yaml => plice/pnpm-lock.yaml | 0 {prisma => plice/prisma}/schema.prisma | 5 +- {src => plice/src}/app.css | 0 {src => plice/src}/app.d.ts | 0 {src => plice/src}/app.html | 0 {src => plice/src}/hooks.server.ts | 6 +- {src => plice/src}/index.test.ts | 0 .../src}/lib/components/Comment.svelte | 0 plice/src/lib/components/CommentField.svelte | 74 ++++++++++++++++++ .../src}/lib/components/TrackCard.svelte | 2 +- {src => plice/src}/lib/index.ts | 0 {src => plice/src}/lib/server/db/index.ts | 25 ++++-- {src => plice/src}/lib/server/db/prisma.ts | 52 +++++------- {src => plice/src}/lib/server/lucia.ts | 0 .../src}/lib/server/storage/index.ts | 0 {src => plice/src}/lib/server/storage/s3.ts | 0 {src => plice/src}/lib/validators.ts | 0 {src => plice/src}/routes/+layout.server.ts | 0 {src => plice/src}/routes/+layout.svelte | 0 plice/src/routes/+page.server.ts | 33 ++++++++ {src => plice/src}/routes/+page.svelte | 0 .../src}/routes/account/+page.server.ts | 0 .../src}/routes/account/+page.svelte | 0 .../src}/routes/login/+page.server.ts | 0 {src => plice/src}/routes/login/+page.svelte | 0 .../src}/routes/signup/+page.server.ts | 0 {src => plice/src}/routes/signup/+page.svelte | 0 plice/src/routes/track/[slug]/+page.server.ts | 38 +++++++++ .../src}/routes/track/[slug]/+page.svelte | 3 +- .../src}/routes/upload/+page.server.ts | 0 {src => plice/src}/routes/upload/+page.svelte | 0 {static => plice/static}/favicon.png | Bin svelte.config.js => plice/svelte.config.js | 0 tsconfig.json => plice/tsconfig.json | 0 vite.config.ts => plice/vite.config.ts | 0 src/lib/components/CommentField.svelte | 29 ------- src/routes/+page.server.ts | 16 ---- src/routes/track/[slug]/+page.server.ts | 20 ----- 49 files changed, 269 insertions(+), 129 deletions(-) create mode 100644 pants.toml rename .eslintignore => plice/.eslintignore (100%) rename .eslintrc.cjs => plice/.eslintrc.cjs (100%) create mode 100644 plice/.gitignore rename .npmrc => plice/.npmrc (100%) rename .prettierignore => plice/.prettierignore (100%) rename .prettierrc => plice/.prettierrc (100%) create mode 100644 plice/.projectile create mode 100644 plice/BUILD rename package.json => plice/package.json (97%) rename pnpm-lock.yaml => plice/pnpm-lock.yaml (100%) rename {prisma => plice/prisma}/schema.prisma (95%) rename {src => plice/src}/app.css (100%) rename {src => plice/src}/app.d.ts (100%) rename {src => plice/src}/app.html (100%) rename {src => plice/src}/hooks.server.ts (70%) rename {src => plice/src}/index.test.ts (100%) rename {src => plice/src}/lib/components/Comment.svelte (100%) create mode 100644 plice/src/lib/components/CommentField.svelte rename {src => plice/src}/lib/components/TrackCard.svelte (93%) rename {src => plice/src}/lib/index.ts (100%) rename {src => plice/src}/lib/server/db/index.ts (56%) rename {src => plice/src}/lib/server/db/prisma.ts (64%) rename {src => plice/src}/lib/server/lucia.ts (100%) rename {src => plice/src}/lib/server/storage/index.ts (100%) rename {src => plice/src}/lib/server/storage/s3.ts (100%) rename {src => plice/src}/lib/validators.ts (100%) rename {src => plice/src}/routes/+layout.server.ts (100%) rename {src => plice/src}/routes/+layout.svelte (100%) create mode 100644 plice/src/routes/+page.server.ts rename {src => plice/src}/routes/+page.svelte (100%) rename {src => plice/src}/routes/account/+page.server.ts (100%) rename {src => plice/src}/routes/account/+page.svelte (100%) rename {src => plice/src}/routes/login/+page.server.ts (100%) rename {src => plice/src}/routes/login/+page.svelte (100%) rename {src => plice/src}/routes/signup/+page.server.ts (100%) rename {src => plice/src}/routes/signup/+page.svelte (100%) create mode 100644 plice/src/routes/track/[slug]/+page.server.ts rename {src => plice/src}/routes/track/[slug]/+page.svelte (92%) rename {src => plice/src}/routes/upload/+page.server.ts (100%) rename {src => plice/src}/routes/upload/+page.svelte (100%) rename {static => plice/static}/favicon.png (100%) rename svelte.config.js => plice/svelte.config.js (100%) rename tsconfig.json => plice/tsconfig.json (100%) rename vite.config.ts => plice/vite.config.ts (100%) delete mode 100644 src/lib/components/CommentField.svelte delete mode 100644 src/routes/+page.server.ts delete mode 100644 src/routes/track/[slug]/+page.server.ts diff --git a/.gitignore b/.gitignore index 414b5a2..0af4e32 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1 @@ -.DS_Store -node_modules -/build -/.svelte-kit -/package -.env -.env.* -!.env.example -vite.config.js.timestamp-* -vite.config.ts.timestamp-* - -*.db +.pants.d/ diff --git a/pants.toml b/pants.toml new file mode 100644 index 0000000..c9acdca --- /dev/null +++ b/pants.toml @@ -0,0 +1,14 @@ +[GLOBAL] +pants_version = "2.19.0" + +backend_packages = [ + "pants.backend.docker", + "pants.backend.shell", + "pants.backend.experimental.adhoc", + "pants.backend.experimental.javascript", + "pants.backend.experimental.javascript.lint.prettier", + "pants.backend.experimental.rust", +] + +[system-binaries] +system_binary_paths = [""] diff --git a/.eslintignore b/plice/.eslintignore similarity index 100% rename from .eslintignore rename to plice/.eslintignore diff --git a/.eslintrc.cjs b/plice/.eslintrc.cjs similarity index 100% rename from .eslintrc.cjs rename to plice/.eslintrc.cjs diff --git a/plice/.gitignore b/plice/.gitignore new file mode 100644 index 0000000..414b5a2 --- /dev/null +++ b/plice/.gitignore @@ -0,0 +1,12 @@ +.DS_Store +node_modules +/build +/.svelte-kit +/package +.env +.env.* +!.env.example +vite.config.js.timestamp-* +vite.config.ts.timestamp-* + +*.db diff --git a/.npmrc b/plice/.npmrc similarity index 100% rename from .npmrc rename to plice/.npmrc diff --git a/.prettierignore b/plice/.prettierignore similarity index 100% rename from .prettierignore rename to plice/.prettierignore diff --git a/.prettierrc b/plice/.prettierrc similarity index 100% rename from .prettierrc rename to plice/.prettierrc diff --git a/plice/.projectile b/plice/.projectile new file mode 100644 index 0000000..e69de29 diff --git a/plice/BUILD b/plice/BUILD new file mode 100644 index 0000000..60655ca --- /dev/null +++ b/plice/BUILD @@ -0,0 +1,54 @@ +docker_image(name="docker") + +files( + name="sources", + sources=[ + "prisma/**", + "src/**/*.ts", + ] +) + +files( + name="package-config", + sources=[ + "package.json", + "pnpm-lock.yaml", + ], +) + +system_binary( + name="pnpm", + binary_name="pnpm", + fingerprint=r"8\.\d+\.\d+", + fingerprint_args=["--version"], + fingerprint_dependencies=[":node"], +) + +system_binary( + name="node", + binary_name="node", + fingerprint=r"v21\.\d+\.\d+", + fingerprint_args=["--version"], +) + +system_binary( + name="sh", + binary_name="sh", +) + +adhoc_tool( + name="node-modules", + runnable=":pnpm", + runnable_dependencies=[":node", ":sh"], + args=["install", "--reporter", "ndjson"], + output_dependencies=[":package-config"], + execution_dependencies=[":package-config"], + output_directories=["node_modules"], +) + +experimental_test_shell_command( + name="test", + tools=["pnpm", "node", "sh", "sed", "dirname", "uname"], + command="pnpm vitest run", + execution_dependencies=[":sources", ":package-config", ":node-modules"], +) diff --git a/package.json b/plice/package.json similarity index 97% rename from package.json rename to plice/package.json index e717ec2..60c3e1b 100644 --- a/package.json +++ b/plice/package.json @@ -1,5 +1,5 @@ { - "name": "larsen", + "name": "larsen-plice", "version": "0.0.1", "private": true, "scripts": { diff --git a/pnpm-lock.yaml b/plice/pnpm-lock.yaml similarity index 100% rename from pnpm-lock.yaml rename to plice/pnpm-lock.yaml diff --git a/prisma/schema.prisma b/plice/prisma/schema.prisma similarity index 95% rename from prisma/schema.prisma rename to plice/prisma/schema.prisma index 648fe59..7373a66 100644 --- a/prisma/schema.prisma +++ b/plice/prisma/schema.prisma @@ -43,7 +43,6 @@ model Key { model Track { id Int @id @default(autoincrement()) title String - objectKey String producer User @relation(fields: [producerId], references: [id], onDelete: Cascade) producerId String @@ -57,7 +56,7 @@ model Track { } model TrackVersion { - id Int @id @default(autoincrement()) + id String @id @default(uuid()) track Track @relation(fields: [trackId], references: [id], onDelete: Cascade) trackId Int @@ -77,7 +76,7 @@ model Comment { authorId String trackVersion TrackVersion @relation(fields: [trackVersionId], references: [id], onDelete: Cascade) - trackVersionId Int + trackVersionId String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt diff --git a/src/app.css b/plice/src/app.css similarity index 100% rename from src/app.css rename to plice/src/app.css diff --git a/src/app.d.ts b/plice/src/app.d.ts similarity index 100% rename from src/app.d.ts rename to plice/src/app.d.ts diff --git a/src/app.html b/plice/src/app.html similarity index 100% rename from src/app.html rename to plice/src/app.html diff --git a/src/hooks.server.ts b/plice/src/hooks.server.ts similarity index 70% rename from src/hooks.server.ts rename to plice/src/hooks.server.ts index ee0f937..1abcacb 100644 --- a/src/hooks.server.ts +++ b/plice/src/hooks.server.ts @@ -1,12 +1,10 @@ import type { Handle } from '@sveltejs/kit'; -import { S3_ENDPOINT, S3_BUCKET } from '$env/static/private'; - import { auth } from '$lib/server/lucia'; -import { ObjectStorageS3 } from '$lib/server/storage/s3'; +import { ObjectStorageNoop } from '$lib/server/storage/noop'; import { DatabasePrisma } from '$lib/server/db/prisma'; -const s3Client = new ObjectStorageS3(S3_ENDPOINT, S3_BUCKET); +const s3Client = new ObjectStorageNoop(); const prismaClient = new DatabasePrisma(); export const handle: Handle = async ({ event, resolve }) => { diff --git a/src/index.test.ts b/plice/src/index.test.ts similarity index 100% rename from src/index.test.ts rename to plice/src/index.test.ts diff --git a/src/lib/components/Comment.svelte b/plice/src/lib/components/Comment.svelte similarity index 100% rename from src/lib/components/Comment.svelte rename to plice/src/lib/components/Comment.svelte diff --git a/plice/src/lib/components/CommentField.svelte b/plice/src/lib/components/CommentField.svelte new file mode 100644 index 0000000..94981ab --- /dev/null +++ b/plice/src/lib/components/CommentField.svelte @@ -0,0 +1,74 @@ + + +
+
+ + + {#if content.length > 0} + + {/if} +
+ + {#if content.length > 0} +
+ For version + + +
+ {/if} +
+ + diff --git a/src/lib/components/TrackCard.svelte b/plice/src/lib/components/TrackCard.svelte similarity index 93% rename from src/lib/components/TrackCard.svelte rename to plice/src/lib/components/TrackCard.svelte index 912ecc5..f02dc01 100644 --- a/src/lib/components/TrackCard.svelte +++ b/plice/src/lib/components/TrackCard.svelte @@ -34,7 +34,7 @@
{/each} - + diff --git a/src/lib/index.ts b/plice/src/lib/index.ts similarity index 100% rename from src/lib/index.ts rename to plice/src/lib/index.ts diff --git a/src/lib/server/db/index.ts b/plice/src/lib/server/db/index.ts similarity index 56% rename from src/lib/server/db/index.ts rename to plice/src/lib/server/db/index.ts index 3eb10c4..27c5a32 100644 --- a/src/lib/server/db/index.ts +++ b/plice/src/lib/server/db/index.ts @@ -5,24 +5,32 @@ export interface Database { { id: number; title: string; - version: number; - producer: string; - comments: { - author: string; - content: string; - createdAt: Date; + producer: { + username: string; + }; + versions: { + comments: { + createdAt: Date; + content: string; + author: { + username: string; + }; + }[]; }[]; + _count: { + versions: number; + }; }[] >; fetchTrackPageData: (trackId: number) => Promise<{ title: string; - objectKey: string; createdAt: Date; producer: { username: string; }; versions: { + id: string; comments: { createdAt: Date; content: string; @@ -32,6 +40,7 @@ export interface Database { }[]; }[]; } | null>; - createTrack: (producerId: string, title: string, objectKey: string) => Promise; + createTrack: (producerId: string, title: string) => Promise; createTrackVersion: (trackId: number) => Promise; + createComment: (versionId: number, producerId: string, content: string) => Promise<{}>; } diff --git a/src/lib/server/db/prisma.ts b/plice/src/lib/server/db/prisma.ts similarity index 64% rename from src/lib/server/db/prisma.ts rename to plice/src/lib/server/db/prisma.ts index f24d4a4..8462c41 100644 --- a/src/lib/server/db/prisma.ts +++ b/plice/src/lib/server/db/prisma.ts @@ -4,12 +4,18 @@ import { PrismaClient } from '@prisma/client'; export class DatabasePrisma implements Database { client: PrismaClient; - constructor() { - this.client = new PrismaClient(); + constructor(url: string) { + this.client = new PrismaClient({ + datasources: { + db: { + url: url + } + } + }); } fetchHomepageData = async (producerId: string) => { - const tracks = await this.client.track.findMany({ + return await this.client.track.findMany({ select: { id: true, title: true, @@ -43,33 +49,12 @@ export class DatabasePrisma implements Database { producerId } }); - - const res = tracks.map((track) => { - return { - id: track.id, - title: track.title, - version: track._count.versions, - producer: track.producer.username, - comments: track.versions.flatMap((v) => { - return v.comments.map((c) => { - return { - author: c.author.username, - content: c.content, - createdAt: c.createdAt - }; - }); - }) - }; - }); - - return res; }; fetchTrackPageData = async (trackId: number) => { - const track = await this.client.track.findUnique({ + return await this.client.track.findUnique({ select: { title: true, - objectKey: true, createdAt: true, producer: { select: { @@ -81,6 +66,7 @@ export class DatabasePrisma implements Database { id: 'desc' }, select: { + id: true, comments: { select: { content: true, @@ -99,29 +85,27 @@ export class DatabasePrisma implements Database { id: trackId } }); - - return track; }; - createTrack = async (producerId: string, title: string, objectKey: string) => { - const track = await this.client.track.create({ + createTrack = async (producerId: string, title: string) => { + return await this.client.track.create({ data: { title, - objectKey, producerId } }); - - return track; }; createTrackVersion = async (trackId: number) => { - const trackVersion = await this.client.trackVersion.create({ + return await this.client.trackVersion.create({ data: { trackId } }); + }; - return trackVersion; + createComment = async (versionId: number, producerId: string, content: string) => { + // TODO + return {}; }; } diff --git a/src/lib/server/lucia.ts b/plice/src/lib/server/lucia.ts similarity index 100% rename from src/lib/server/lucia.ts rename to plice/src/lib/server/lucia.ts diff --git a/src/lib/server/storage/index.ts b/plice/src/lib/server/storage/index.ts similarity index 100% rename from src/lib/server/storage/index.ts rename to plice/src/lib/server/storage/index.ts diff --git a/src/lib/server/storage/s3.ts b/plice/src/lib/server/storage/s3.ts similarity index 100% rename from src/lib/server/storage/s3.ts rename to plice/src/lib/server/storage/s3.ts diff --git a/src/lib/validators.ts b/plice/src/lib/validators.ts similarity index 100% rename from src/lib/validators.ts rename to plice/src/lib/validators.ts diff --git a/src/routes/+layout.server.ts b/plice/src/routes/+layout.server.ts similarity index 100% rename from src/routes/+layout.server.ts rename to plice/src/routes/+layout.server.ts diff --git a/src/routes/+layout.svelte b/plice/src/routes/+layout.svelte similarity index 100% rename from src/routes/+layout.svelte rename to plice/src/routes/+layout.svelte diff --git a/plice/src/routes/+page.server.ts b/plice/src/routes/+page.server.ts new file mode 100644 index 0000000..77aeeb9 --- /dev/null +++ b/plice/src/routes/+page.server.ts @@ -0,0 +1,33 @@ +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ locals: { authReq, database } }) => { + const session = await authReq.validate(); + + if (!session) + return { + tracks: [] + }; + + const raw_tracks = await database.fetchHomepageData(session.user.userId); + const tracks = raw_tracks.map((track) => { + return { + id: track.id, + title: track.title, + version: track._count.versions, + producer: track.producer.username, + comments: track.versions.flatMap((v) => { + return v.comments.map((c) => { + return { + author: c.author.username, + content: c.content, + createdAt: c.createdAt + }; + }); + }) + }; + }); + + return { + tracks + }; +}; diff --git a/src/routes/+page.svelte b/plice/src/routes/+page.svelte similarity index 100% rename from src/routes/+page.svelte rename to plice/src/routes/+page.svelte diff --git a/src/routes/account/+page.server.ts b/plice/src/routes/account/+page.server.ts similarity index 100% rename from src/routes/account/+page.server.ts rename to plice/src/routes/account/+page.server.ts diff --git a/src/routes/account/+page.svelte b/plice/src/routes/account/+page.svelte similarity index 100% rename from src/routes/account/+page.svelte rename to plice/src/routes/account/+page.svelte diff --git a/src/routes/login/+page.server.ts b/plice/src/routes/login/+page.server.ts similarity index 100% rename from src/routes/login/+page.server.ts rename to plice/src/routes/login/+page.server.ts diff --git a/src/routes/login/+page.svelte b/plice/src/routes/login/+page.svelte similarity index 100% rename from src/routes/login/+page.svelte rename to plice/src/routes/login/+page.svelte diff --git a/src/routes/signup/+page.server.ts b/plice/src/routes/signup/+page.server.ts similarity index 100% rename from src/routes/signup/+page.server.ts rename to plice/src/routes/signup/+page.server.ts diff --git a/src/routes/signup/+page.svelte b/plice/src/routes/signup/+page.svelte similarity index 100% rename from src/routes/signup/+page.svelte rename to plice/src/routes/signup/+page.svelte diff --git a/plice/src/routes/track/[slug]/+page.server.ts b/plice/src/routes/track/[slug]/+page.server.ts new file mode 100644 index 0000000..01c6550 --- /dev/null +++ b/plice/src/routes/track/[slug]/+page.server.ts @@ -0,0 +1,38 @@ +import { error, redirect } from '@sveltejs/kit'; +import type { Actions, PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ params: { slug }, locals: { database } }) => { + const trackId = parseInt(slug); + if (isNaN(trackId)) { + throw error(404, 'Track not found'); + } + + let track = await database.fetchTrackPageData(trackId); + if (!track) { + throw error(440, 'Track not found'); + } + + return { + track + }; +}; + +export const actions: Actions = { + comment: async ({ request, params: { slug }, locals: { authReq, database } }) => { + const session = await authReq.validate(); + if (!session) throw redirect(302, '/login'); + + const trackId = parseInt(slug); + + const formData = await request.formData(); + const comment = formData.get('comment') as string; + const version = formData.get('version') as string; + + const versionId = parseInt(version); + if (isNaN(versionId)) { + throw error(404, 'Invalid version'); + } + + database.createComment(trackId, versionId, comment); + } +}; diff --git a/src/routes/track/[slug]/+page.svelte b/plice/src/routes/track/[slug]/+page.svelte similarity index 92% rename from src/routes/track/[slug]/+page.svelte rename to plice/src/routes/track/[slug]/+page.svelte index d82cdf0..2b45840 100644 --- a/src/routes/track/[slug]/+page.svelte +++ b/plice/src/routes/track/[slug]/+page.svelte @@ -37,5 +37,6 @@ {/each} {/each} - + + diff --git a/src/routes/upload/+page.server.ts b/plice/src/routes/upload/+page.server.ts similarity index 100% rename from src/routes/upload/+page.server.ts rename to plice/src/routes/upload/+page.server.ts diff --git a/src/routes/upload/+page.svelte b/plice/src/routes/upload/+page.svelte similarity index 100% rename from src/routes/upload/+page.svelte rename to plice/src/routes/upload/+page.svelte diff --git a/static/favicon.png b/plice/static/favicon.png similarity index 100% rename from static/favicon.png rename to plice/static/favicon.png diff --git a/svelte.config.js b/plice/svelte.config.js similarity index 100% rename from svelte.config.js rename to plice/svelte.config.js diff --git a/tsconfig.json b/plice/tsconfig.json similarity index 100% rename from tsconfig.json rename to plice/tsconfig.json diff --git a/vite.config.ts b/plice/vite.config.ts similarity index 100% rename from vite.config.ts rename to plice/vite.config.ts diff --git a/src/lib/components/CommentField.svelte b/src/lib/components/CommentField.svelte deleted file mode 100644 index 3ec700a..0000000 --- a/src/lib/components/CommentField.svelte +++ /dev/null @@ -1,29 +0,0 @@ - - -
- - - {#if content.length > 0} - - {/if} -
- - diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts deleted file mode 100644 index af64999..0000000 --- a/src/routes/+page.server.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { PageServerLoad } from './$types'; - -export const load: PageServerLoad = async ({ locals: { authReq, database } }) => { - const session = await authReq.validate(); - - if (!session) - return { - tracks: [] - }; - - const tracks = await database.fetchHomepageData(session.user.userId); - - return { - tracks - }; -}; diff --git a/src/routes/track/[slug]/+page.server.ts b/src/routes/track/[slug]/+page.server.ts deleted file mode 100644 index 5c3e248..0000000 --- a/src/routes/track/[slug]/+page.server.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { error } from '@sveltejs/kit'; -import type { PageServerLoad } from './$types'; - -export const load: PageServerLoad = async ({ params: { slug }, locals: { database } }) => { - const trackId = parseInt(slug); - - if (isNaN(trackId)) { - throw error(404, 'Track not found'); - } - - let track = await database.fetchTrackPageData(trackId); - - if (!track) { - throw error(440, 'Track not found'); - } - - return { - track - }; -};