diff --git a/graphql/composables/app-info.ts b/app/composables/app-info.ts
similarity index 100%
rename from graphql/composables/app-info.ts
rename to app/composables/app-info.ts
diff --git a/app/pages/index.vue b/app/pages/index.vue
index 33017a8..6cb6ffd 100644
--- a/app/pages/index.vue
+++ b/app/pages/index.vue
@@ -1,5 +1,5 @@
diff --git a/graphql/server/types/app-info.ts b/app/server/types/app-info.ts
similarity index 100%
rename from graphql/server/types/app-info.ts
rename to app/server/types/app-info.ts
diff --git a/app/types/utils.d.ts b/app/types/utils.d.ts
deleted file mode 100644
index 8af79b9..0000000
--- a/app/types/utils.d.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-declare global {
- type PartialBy = Pick, K> & Omit;
- type SinglePropertyType = { [K in keyof T]: { [P in K]: T[K] } }[keyof T];
-}
-
-export { type PartialBy, type SinglePropertyType };
diff --git a/prisma/seeds/02-admin-user.ts b/auth/server/seeds/admin-user.ts
similarity index 94%
rename from prisma/seeds/02-admin-user.ts
rename to auth/server/seeds/admin-user.ts
index 4372d68..e20286f 100644
--- a/prisma/seeds/02-admin-user.ts
+++ b/auth/server/seeds/admin-user.ts
@@ -1,8 +1,7 @@
import { AuthRole } from "@prisma/client";
import { auth } from "~/auth/server/utils/auth";
-
-import type { SeedFn } from "../seed";
+import type { SeedFn } from "~/prisma/server/seed";
export const seedAdminUser: SeedFn = async (prisma) => {
const adminUserData = {
diff --git a/graphql/server/types/auth-user.ts b/auth/server/types/auth-user.ts
similarity index 100%
rename from graphql/server/types/auth-user.ts
rename to auth/server/types/auth-user.ts
diff --git a/graphql/server/types.ts b/graphql/server/types.ts
deleted file mode 100644
index 07ece10..0000000
--- a/graphql/server/types.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export * from "./types/app-info";
-export * from "./types/auth-user";
-export * from "./types/scalars";
diff --git a/graphql/server/utils/builder.ts b/graphql/server/utils/builder.ts
index 6c0a9cb..6d88548 100644
--- a/graphql/server/utils/builder.ts
+++ b/graphql/server/utils/builder.ts
@@ -5,6 +5,7 @@ import type PrismaTypes from "@pothos/plugin-prisma/generated";
import PrismaUtils from "@pothos/plugin-prisma-utils";
import RelayPlugin from "@pothos/plugin-relay";
import ScopeAuthPlugin from "@pothos/plugin-scope-auth";
+import SimpleObjectsPlugin from "@pothos/plugin-simple-objects";
import { Prisma } from "@prisma/client";
import { type Scalars } from "~/graphql/server/types/scalars";
@@ -22,6 +23,7 @@ export const builder = new SchemaBuilder<{
PrismaPlugin,
PrismaUtils,
RelayPlugin,
+ SimpleObjectsPlugin,
],
prisma: {
client: prisma,
diff --git a/graphql/server/utils/schema.ts b/graphql/server/utils/schema.ts
index 8bc07b7..7d36361 100644
--- a/graphql/server/utils/schema.ts
+++ b/graphql/server/utils/schema.ts
@@ -1,13 +1,15 @@
import { writeFileSync } from "fs";
import { lexicographicSortSchema, printSchema } from "graphql";
-import * as types from "../types";
+import * as appInfo from "~/app/server/types/app-info";
+import * as authUser from "~/auth/server/types/auth-user";
+import * as scalars from "~/graphql/server/types/scalars";
// Initialize builder
builder.queryType({});
builder.mutationType({});
//builder.subscriptionType({});
-Function.prototype(types);
+Function.prototype({ appInfo, authUser, scalars });
export const schema = builder.toSchema();
diff --git a/graphql/utils/graphql.ts b/graphql/utils/graphql.ts
index 071fa46..95f7fcf 100644
--- a/graphql/utils/graphql.ts
+++ b/graphql/utils/graphql.ts
@@ -19,11 +19,37 @@ export type Scalars = {
Upload: { input: File; output: File; }
};
+export enum AuthRole {
+ Administrator = 'ADMINISTRATOR',
+ Unverified = 'UNVERIFIED',
+ Verified = 'VERIFIED'
+}
+
+export type AuthRoleFilter = {
+ equals?: InputMaybe;
+ in?: InputMaybe>;
+ notIn?: InputMaybe>;
+};
+
export type AuthUser = Node & {
__typename?: 'AuthUser';
email: Scalars['String']['output'];
globalId: Scalars['ID']['output'];
id: Scalars['ID']['output'];
+ role: AuthRole;
+};
+
+export type AuthUserFilter = {
+ role?: InputMaybe;
+};
+
+export type AuthUserOrderBy = {
+ email?: InputMaybe;
+ role?: InputMaybe;
+};
+
+export type AuthUserUniqueFilter = {
+ email: Scalars['String']['input'];
};
export type Mutation = {
@@ -35,6 +61,11 @@ export type Node = {
globalId: Scalars['ID']['output'];
};
+export enum OrderBy {
+ Asc = 'Asc',
+ Desc = 'Desc'
+}
+
export type PageInfo = {
__typename?: 'PageInfo';
endCursor?: Maybe;
@@ -56,6 +87,8 @@ export type QueryAuthUsersArgs = {
before?: InputMaybe;
first?: InputMaybe;
last?: InputMaybe;
+ orderBy: AuthUserOrderBy;
+ where: AuthUserFilter;
};
export type QueryAuthUsersConnection = {
diff --git a/jobs/server/plugins/bullmq.ts b/jobs/server/plugins/bullmq.ts
index 91504f9..7ec1629 100644
--- a/jobs/server/plugins/bullmq.ts
+++ b/jobs/server/plugins/bullmq.ts
@@ -2,7 +2,7 @@ const queues = [dummyQueue];
const workers = [dummyWorker];
export default defineNitroPlugin(async (nitroApp) => {
- await Promise.all(Object.values(queues).map((queue) => queue.obliterate()));
+ await Promise.all(Object.values(queues).map((queue) => queue.obliterate({ force: true })));
logger.success(`${Object.keys(queues).length} job queue(s) cleared`);
Function.prototype(workers);
diff --git a/jobs/server/utils/dummy.ts b/jobs/server/utils/dummy.ts
deleted file mode 100644
index 5009462..0000000
--- a/jobs/server/utils/dummy.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import { logger } from "@nuxt/kit";
-import { type Job, Queue, Worker } from "bullmq";
-
-const { connection } = useRuntimeConfig();
-
-// Dummy job data / return types
-export type DummyJobData = {};
-
-export type DummyJobReturn = {
- message: string;
-};
-
-export const dummyQueue = new Queue("dummy", { connection });
-
-export const dummyWorker = new Worker(
- "dummy",
- async (job: Job) => {
- return { message: `Dummy job ${job.name} executed successfully` };
- },
- { connection },
-);
-
-dummyWorker.on("failed", async (job, error) => {
- logger.error(`Dummy job ${job?.name} failed with error: ${error.message}`);
-});
-
-dummyWorker.on("completed", async (job) => {
- logger.success(job.returnvalue.message);
-});
diff --git a/jobs/server/utils/job-dummy.ts b/jobs/server/utils/job-dummy.ts
new file mode 100644
index 0000000..fddbaf8
--- /dev/null
+++ b/jobs/server/utils/job-dummy.ts
@@ -0,0 +1,27 @@
+import { logger } from "@nuxt/kit";
+import { type Job, Queue, QueueEvents, Worker } from "bullmq";
+
+const { connection } = useRuntimeConfig();
+
+// Dummy job data / return types
+export type DummyJobData = {};
+export type DummyJobReturn = {
+ message: string;
+};
+
+export const dummyQueue = new Queue("DummyJob", { connection });
+export const dummyQueueEvents = new QueueEvents("DummyJob", { connection });
+
+export const dummyWorker = new Worker(
+ "DummyJob",
+ async (job: Job) => {
+ return { message: `Dummy job ${job.name} executed successfully` };
+ },
+ { connection },
+)
+ .on("failed", async (job, error) => {
+ logger.error(`Dummy job ${job?.name} failed with error: ${error.message}`);
+ })
+ .on("completed", async (job) => {
+ logger.success(job.returnvalue.message);
+ });
diff --git a/package.json b/package.json
index 64b66ae..3f5cbc8 100644
--- a/package.json
+++ b/package.json
@@ -15,7 +15,7 @@
"release": "pnpm lint && changelogen --release --push"
},
"prisma": {
- "seed": "tsx prisma/seed.ts"
+ "seed": "tsx prisma/server/seed.ts"
},
"dependencies": {
"@lucia-auth/adapter-prisma": "^3.0.2",
@@ -25,6 +25,7 @@
"@pothos/plugin-prisma-utils": "^0.13.0",
"@pothos/plugin-relay": "^3.45.0",
"@pothos/plugin-scope-auth": "^3.20.0",
+ "@pothos/plugin-simple-objects": "^3.7.0",
"@prisma/client": "^5.6.0",
"@urql/vue": "^1.1.2",
"bullmq": "^4.14.4",
@@ -64,4 +65,4 @@
"*.{js,ts,vue}": "eslint --fix",
"*.{css,scss,vue}": "stylelint --fix"
}
-}
+}
\ No newline at end of file
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 714b8cd..dea7387 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -26,6 +26,9 @@ dependencies:
'@pothos/plugin-scope-auth':
specifier: ^3.20.0
version: 3.20.0(@pothos/core@3.40.0)(graphql@16.8.1)
+ '@pothos/plugin-simple-objects':
+ specifier: ^3.7.0
+ version: 3.7.0(@pothos/core@3.40.0)(graphql@16.8.1)
'@prisma/client':
specifier: ^5.6.0
version: 5.6.0(prisma@5.6.0)
@@ -69,7 +72,7 @@ devDependencies:
version: 0.8.3(postcss@8.4.31)(stylelint@15.11.0)
'@nuxt/devtools':
specifier: latest
- version: 1.0.3(nuxt@3.8.2)(vite@4.5.0)
+ version: 1.0.4(nuxt@3.8.2)(vite@4.5.0)
'@types/node':
specifier: ^20.10.3
version: 20.10.3
@@ -439,7 +442,7 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
- '@babel/types': 7.23.3
+ '@babel/types': 7.23.4
/@babel/parser@7.23.4:
resolution: {integrity: sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==}
@@ -516,13 +519,13 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.2):
+ /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.3):
resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.23.2
+ '@babel/core': 7.23.3
'@babel/helper-plugin-utils': 7.22.5
dev: true
@@ -821,24 +824,6 @@ packages:
'@babel/parser': 7.23.3
'@babel/types': 7.23.3
- /@babel/traverse@7.23.2:
- resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/code-frame': 7.23.4
- '@babel/generator': 7.23.4
- '@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-function-name': 7.23.0
- '@babel/helper-hoist-variables': 7.22.5
- '@babel/helper-split-export-declaration': 7.22.6
- '@babel/parser': 7.23.4
- '@babel/types': 7.23.4
- debug: 4.3.4
- globals: 11.12.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
/@babel/traverse@7.23.4:
resolution: {integrity: sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg==}
engines: {node: '>=6.9.0'}
@@ -1738,11 +1723,11 @@ packages:
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
- '@babel/core': 7.23.2
- '@babel/parser': 7.23.3
- '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.2)
- '@babel/traverse': 7.23.2
- '@babel/types': 7.23.3
+ '@babel/core': 7.23.3
+ '@babel/parser': 7.23.4
+ '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.3)
+ '@babel/traverse': 7.23.4
+ '@babel/types': 7.23.4
'@graphql-tools/utils': 10.0.8(graphql@16.8.1)
graphql: 16.8.1
tslib: 2.6.2
@@ -2327,22 +2312,6 @@ packages:
- supports-color
dev: false
- /@nuxt/devtools-kit@1.0.3(nuxt@3.8.2)(vite@4.5.0):
- resolution: {integrity: sha512-a/ZAVmrD5yOfUYhRVfC9afMkczzL8J8zdf0h6QHbTd33rJW/jmjwTn++RTdnbSD2gg2fSBRi/h8y17RmqIdb9g==}
- peerDependencies:
- nuxt: ^3.8.1
- vite: '*'
- dependencies:
- '@nuxt/kit': 3.8.2
- '@nuxt/schema': 3.8.2
- execa: 7.2.0
- nuxt: 3.8.2(@types/node@20.10.3)(eslint@8.55.0)(stylelint@15.11.0)(typescript@5.2.2)(vite@4.5.0)(vue-tsc@1.8.24)
- vite: 4.5.0(@types/node@20.10.3)
- transitivePeerDependencies:
- - rollup
- - supports-color
- dev: true
-
/@nuxt/devtools-kit@1.0.4(nuxt@3.8.2)(vite@4.5.0):
resolution: {integrity: sha512-AXNeI1dBilNryCmwuTd3lU7CrPBhzUJ5ntTFiXw9MmFwe5QT3NOxDFOv0gX7z1DFnmBEmx5mPKWysCwh7htEnQ==}
peerDependencies:
@@ -2358,22 +2327,6 @@ packages:
- rollup
- supports-color
- /@nuxt/devtools-wizard@1.0.3:
- resolution: {integrity: sha512-iningPOhBVMYov+7hDX5yr1tAVVA6AmJ7EgRkNfmHqPX2rerhD4eIN7Ao4KwkjGmQJ7qdM7k8w+NiL8OQOpdFQ==}
- hasBin: true
- dependencies:
- consola: 3.2.3
- diff: 5.1.0
- execa: 7.2.0
- global-directory: 4.0.1
- magicast: 0.3.2
- pathe: 1.1.1
- pkg-types: 1.0.3
- prompts: 2.4.2
- rc9: 2.1.1
- semver: 7.5.4
- dev: true
-
/@nuxt/devtools-wizard@1.0.4:
resolution: {integrity: sha512-3QHRfmkiITM67lAzSIOiI6N4Qzi5i705TCQ53pHQbce0+E00f5vck2hPauflN2X0/M3SZdkUV8UayaHc4egmdA==}
hasBin: true
@@ -2389,74 +2342,6 @@ packages:
rc9: 2.1.1
semver: 7.5.4
- /@nuxt/devtools@1.0.3(nuxt@3.8.2)(vite@4.5.0):
- resolution: {integrity: sha512-2mXvQiS3KTMF0fO80Y9WLx95yubRoIp2wSCarmhhqInPe8/0K9VZ4TUiTGF20ti45h0ky3OAxiVSmLfViwDWjg==}
- hasBin: true
- peerDependencies:
- nuxt: ^3.8.1
- vite: '*'
- dependencies:
- '@antfu/utils': 0.7.6
- '@nuxt/devtools-kit': 1.0.3(nuxt@3.8.2)(vite@4.5.0)
- '@nuxt/devtools-wizard': 1.0.3
- '@nuxt/kit': 3.8.2
- birpc: 0.2.14
- consola: 3.2.3
- destr: 2.0.2
- error-stack-parser-es: 0.1.1
- execa: 7.2.0
- fast-glob: 3.3.2
- flatted: 3.2.9
- get-port-please: 3.1.1
- h3: 1.9.0
- hookable: 5.5.3
- image-meta: 0.2.0
- is-installed-globally: 1.0.0
- launch-editor: 2.6.1
- local-pkg: 0.5.0
- magicast: 0.3.2
- nitropack: 2.8.0
- nuxt: 3.8.2(@types/node@20.10.3)(eslint@8.55.0)(stylelint@15.11.0)(typescript@5.2.2)(vite@4.5.0)(vue-tsc@1.8.24)
- nypm: 0.3.3
- ofetch: 1.3.3
- ohash: 1.1.3
- pacote: 17.0.4
- pathe: 1.1.1
- perfect-debounce: 1.0.0
- pkg-types: 1.0.3
- rc9: 2.1.1
- scule: 1.1.0
- semver: 7.5.4
- simple-git: 3.21.0
- sirv: 2.0.3
- unimport: 3.5.0(rollup@4.5.1)
- vite: 4.5.0(@types/node@20.10.3)
- vite-plugin-inspect: 0.7.42(@nuxt/kit@3.8.2)(vite@4.5.0)
- vite-plugin-vue-inspector: 4.0.0(vite@4.5.0)
- which: 3.0.1
- ws: 8.14.2
- transitivePeerDependencies:
- - '@azure/app-configuration'
- - '@azure/cosmos'
- - '@azure/data-tables'
- - '@azure/identity'
- - '@azure/keyvault-secrets'
- - '@azure/storage-blob'
- - '@capacitor/preferences'
- - '@netlify/blobs'
- - '@planetscale/database'
- - '@upstash/redis'
- - '@vercel/kv'
- - bluebird
- - bufferutil
- - encoding
- - idb-keyval
- - rollup
- - supports-color
- - utf-8-validate
- - xml2js
- dev: true
-
/@nuxt/devtools@1.0.4(nuxt@3.8.2)(vite@4.5.0):
resolution: {integrity: sha512-G1Oo9+TaOYzePIXpNX+Zzalw/rJyIZKZpZmXfzolPlOJSA1i0JKzZX6Z7iQHdqPwNJ8t+HnVaF4PghPIpo1kwg==}
hasBin: true
@@ -2986,6 +2871,16 @@ packages:
graphql: 16.8.1
dev: false
+ /@pothos/plugin-simple-objects@3.7.0(@pothos/core@3.40.0)(graphql@16.8.1):
+ resolution: {integrity: sha512-CgZJLaHLt1Q30j+XCiWV6qVJcae1ksiUFdi8kz4sEsOhCNfdVwz64s8rx7SSqsdmPbjb68dJIDKpq2Qg9VZb8g==}
+ peerDependencies:
+ '@pothos/core': '*'
+ graphql: '>=15.1.0'
+ dependencies:
+ '@pothos/core': 3.40.0(graphql@16.8.1)
+ graphql: 16.8.1
+ dev: false
+
/@prisma/client@5.6.0(prisma@5.6.0):
resolution: {integrity: sha512-mUDefQFa1wWqk4+JhKPYq8BdVoFk9NFMBXUI8jAkBfQTtgx8WPx02U2HB/XbAz3GSUJpeJOKJQtNvaAIDs6sug==}
engines: {node: '>=16.13'}
@@ -8450,7 +8345,7 @@ packages:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
dependencies:
- '@babel/code-frame': 7.22.13
+ '@babel/code-frame': 7.23.4
error-ex: 1.3.2
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
@@ -10432,7 +10327,7 @@ packages:
vue-router:
optional: true
dependencies:
- '@babel/types': 7.23.3
+ '@babel/types': 7.23.4
'@rollup/pluginutils': 5.0.5(rollup@4.5.1)
'@vue-macros/common': 1.8.0(vue@3.3.8)
ast-walker-scope: 0.5.0
@@ -10539,7 +10434,7 @@ packages:
dependencies:
'@babel/core': 7.23.2
'@babel/standalone': 7.23.2
- '@babel/types': 7.23.3
+ '@babel/types': 7.23.4
defu: 6.1.3
jiti: 1.21.0
mri: 1.2.0
diff --git a/prisma/seeds/01-dummy.ts b/prisma/seeds/01-dummy.ts
deleted file mode 100644
index 2425d22..0000000
--- a/prisma/seeds/01-dummy.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import type { SeedFn } from "../seed";
-
-export const seedDummy: SeedFn = async (prisma) => {
- return `Dummy seed ran successfully!`;
-};
diff --git a/prisma/seeds/index.ts b/prisma/seeds/index.ts
deleted file mode 100644
index 69945bc..0000000
--- a/prisma/seeds/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from "./01-dummy";
-export * from "./02-admin-user";
diff --git a/prisma/seed.ts b/prisma/server/seed.ts
similarity index 72%
rename from prisma/seed.ts
rename to prisma/server/seed.ts
index 7ac4dbb..d84d214 100644
--- a/prisma/seed.ts
+++ b/prisma/server/seed.ts
@@ -1,11 +1,10 @@
+import { seedAdminUser } from "~/auth/server/seeds/admin-user";
import { prisma } from "~/prisma/server/utils/prisma";
-import * as seeds from "./seeds";
-
export type SeedFn = (prisma: Prisma) => Promise;
async function main() {
- for (const [seedName, seedFn] of Object.entries(seeds)) {
+ for (const [seedName, seedFn] of Object.entries({ seedAdminUser })) {
console.log("\n🌱 " + seedName);
console.log(await seedFn(prisma));
}
diff --git a/ui/assets/css/colors.css b/ui/assets/css/colors.css
index fc70053..de4a4ee 100644
--- a/ui/assets/css/colors.css
+++ b/ui/assets/css/colors.css
@@ -3,8 +3,10 @@
@apply bg-white dark:bg-black;
}
- .divide-y,
- .divide-x {
+ *,
+ ::before,
+ ::after {
+ @apply border-gray-200 dark:border-gray-800;
@apply divide-gray-200 dark:divide-gray-800;
}
}