diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 73db413e1..406b34f8a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,11 +32,17 @@ jobs: - name: Install dependencies run: pnpm install + - name: Build Docs + run: pnpm build:docs + - name: Build Scripts run: pnpm build:scripts - - name: Build Docs - run: pnpm build:docs + - name: Install scripts + run: pnpm install + + - name: Run config init + run: pnpm config:init:skip-database - name: Build run: pnpm build diff --git a/.github/workflows/conventional-label.yaml b/.github/workflows/conventional-label.yaml index ec319d010..7cd49ca1a 100644 --- a/.github/workflows/conventional-label.yaml +++ b/.github/workflows/conventional-label.yaml @@ -14,4 +14,4 @@ jobs: steps: - uses: bcoe/conventional-release-labels@v1 with: - type_labels: '{"feat": "πŸ’‘ Feature", "fix": "🐞 Bug", "breaking": "🚨 Breaking Changes", "docs": "πŸ“– Documentation", "style": "πŸ’… Style", "refactor": "πŸš€ Performerce", "perf": "πŸš€ Performerce", "test": "πŸ§ͺ Test"}' + type_labels: '{"feat": "πŸ’‘ Feature", "fix": "🐞 Bug", "breaking": "🚨 Breaking Changes", "docs": "πŸ“– Documentation", "style": "πŸ’… Style", "refactor": "🧱 Refactor", "perf": "πŸš€ Performerce", "test": "πŸ§ͺ Test"}' diff --git a/apps/backend/.gitignore b/apps/backend/.gitignore index a13d15b70..0601ff5bc 100644 --- a/apps/backend/.gitignore +++ b/apps/backend/.gitignore @@ -48,6 +48,4 @@ lerna-debug.log* # Configuration /src/plugins/*/admin/database/migrations -/src/plugins/core/utils/config.json -/src/plugins/core/utils/email.config.json -/src/plugins/core/utils/captcha.config.json \ No newline at end of file +/src/plugins/core/ \ No newline at end of file diff --git a/apps/backend/drizzle.config.ts b/apps/backend/drizzle.config.ts index 6d213c8ec..aacf951a2 100644 --- a/apps/backend/drizzle.config.ts +++ b/apps/backend/drizzle.config.ts @@ -1,6 +1,6 @@ import { defineConfig } from 'drizzle-kit'; -import { DATABASE_ENVS } from '@/database/client'; +import { DATABASE_ENVS } from '@/database'; export default defineConfig({ dialect: 'postgresql', diff --git a/apps/backend/index.d.ts b/apps/backend/index.d.ts index 678dfa501..110ac7031 100644 --- a/apps/backend/index.d.ts +++ b/apps/backend/index.d.ts @@ -2,7 +2,7 @@ import { DatabaseService } from 'vitnode-backend'; import { NodePgDatabase } from 'drizzle-orm/node-postgres'; -import { schemaDatabase } from '@/database/schema'; +import { schemaDatabase } from '@/database'; // Overwrite the DatabaseService class to include the db property declare module 'vitnode-backend' { diff --git a/apps/backend/schema.gql b/apps/backend/schema.gql index b6fc77eb0..fbdf639ce 100644 --- a/apps/backend/schema.gql +++ b/apps/backend/schema.gql @@ -158,14 +158,6 @@ type GroupUser { name: [TextLanguage!]! } -input GroupsPermissionsCreatePluginCategories { - can_create: Boolean! - can_download_files: Boolean! - can_read: Boolean! - can_reply: Boolean! - group_id: Int! -} - type HslColor { h: Int! l: Int! @@ -195,7 +187,6 @@ type LayoutAdminInstallObj { } type Mutation { - admin__blog_categories__create(color: String!, description: [TextLanguageInput!]!, name: [TextLanguageInput!]!, permissions: PermissionsCreatePluginCategories!): ShowBlogCategories! admin__core_email_settings__edit(color_primary: String!, color_primary_foreground: String!, smtp_host: String!, smtp_password: String!, smtp_port: Int!, smtp_secure: Boolean!, smtp_user: String!): ShowAdminEmailSettingsServiceObj! admin__core_email_settings__test(from: String!, message: String!, preview_text: String, subject: String!, to: String!): String! admin__core_files__delete(id: Int!): String! @@ -236,6 +227,7 @@ type Mutation { core_groups__admin_create(content: ContentCreateAdminGroups!, name: [TextLanguageInput!]!): ShowAdminGroups! core_members__avatar__delete: String! core_members__avatar__upload(file: Upload!): UploadAvatarCoreMembersObj! + core_members__change_password(hashKey: String!, password: String!): User! core_members__delete(id: Int!): String! core_members__reset_password__create_key(email: String!): String! core_sessions__sign_in(admin: Boolean, email: String!, password: String!, remember: Boolean): String! @@ -257,14 +249,6 @@ type PageInfo { totalCount: Float! } -input PermissionsCreatePluginCategories { - can_all_create: Boolean! - can_all_download_files: Boolean! - can_all_read: Boolean! - can_all_reply: Boolean! - groups: [GroupsPermissionsCreatePluginCategories!]! -} - type Query { admin__core_email_settings__show: ShowAdminEmailSettingsServiceObj! admin__core_files__show(cursor: Int, first: Int, last: Int, search: String, sortBy: ShowCoreFilesSortByArgs): ShowAdminFilesObj! @@ -280,7 +264,6 @@ type Query { admin__core_staff_moderators__show(cursor: Int, first: Int, last: Int, sortBy: ShowAdminStaffModeratorsSortByArgs): ShowAdminStaffModeratorsObj! admin__install__layout: LayoutAdminInstallObj! admin__sessions__authorization: AuthorizationAdminSessionsObj! - blog_categories__show(cursor: Int, first: Int, last: Int): ShowBlogCategoriesObj! core_files__show(cursor: Int, first: Int, last: Int, search: String, sortBy: ShowCoreFilesSortByArgs): ShowCoreFilesObj! core_languages__show(cursor: Int, first: Int, last: Int, search: String, sortBy: ShowCoreLanguagesSortByArgs): ShowCoreLanguagesObj! core_members__show(cursor: Int, first: Int, last: Int, name_seo: String, search: String, sortBy: ShowCoreMembersSortByArgs): ShowCoreMembersObj! @@ -500,19 +483,6 @@ enum ShowAdminStaffModeratorsSortingColumnEnum { updated } -type ShowBlogCategories { - color: String! - description: [TextLanguage!] - id: Int! - name: [TextLanguage!]! - position: Int! -} - -type ShowBlogCategoriesObj { - edges: [ShowBlogCategories!]! - pageInfo: PageInfo! -} - type ShowCoreFiles { count_uses: Int! created: DateTime! diff --git a/apps/backend/src/app.module.ts b/apps/backend/src/app.module.ts index a3c9fe731..03661d2a0 100644 --- a/apps/backend/src/app.module.ts +++ b/apps/backend/src/app.module.ts @@ -4,8 +4,7 @@ import { Module } from '@nestjs/common'; import { VitNodeCoreModule } from 'vitnode-backend'; import { PluginsModule } from './plugins/plugins.module'; -import { DATABASE_ENVS } from './database/client'; -import { schemaDatabase } from './database/schema'; +import { DATABASE_ENVS, schemaDatabase } from './database'; @Module({ imports: [ diff --git a/apps/backend/src/database.ts b/apps/backend/src/database.ts new file mode 100644 index 000000000..118f27ad3 --- /dev/null +++ b/apps/backend/src/database.ts @@ -0,0 +1,19 @@ +// ! DO NOT REMOVE, MODIFY OR MOVE THIS FILE!!! + +import tableCore from '@/plugins/core/admin/database/index'; +import tableWelcome from '@/plugins/welcome/admin/database/index'; +// ! === IMPORT === + +export const schemaDatabase = { + ...tableWelcome, + // ! === MODULE === + ...tableCore, +}; + +export const DATABASE_ENVS = { + host: process.env.DB_HOST || 'localhost', + port: process.env.DB_PORT ? +process.env.DB_PORT : 5432, + user: process.env.DB_USER || 'root', + password: process.env.DB_PASSWORD || 'root', + database: process.env.DB_DATABASE || 'vitnode', +}; diff --git a/apps/backend/src/database/schema.ts b/apps/backend/src/database/schema.ts deleted file mode 100644 index e87599303..000000000 --- a/apps/backend/src/database/schema.ts +++ /dev/null @@ -1,11 +0,0 @@ -// ! DO NOT REMOVE, MODIFY OR MOVE THIS FILE!!! - -import tableCore from '../plugins/core/admin/database/index'; -import tableBlog from '../plugins/blog/admin/database/index'; -// ! === IMPORT === - -export const schemaDatabase = { - ...tableBlog, - // ! === MODULE === - ...tableCore, -}; diff --git a/apps/backend/src/plugins/blog/admin/admin.module.ts b/apps/backend/src/plugins/blog/admin/admin.module.ts deleted file mode 100644 index abb01cff0..000000000 --- a/apps/backend/src/plugins/blog/admin/admin.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Module } from '@nestjs/common'; - -import { CreateBlogCategoriesService } from './categories/create/create.service'; -import { CreateBlogCategoriesResolver } from './categories/create/create.resolver'; - -@Module({ - providers: [CreateBlogCategoriesService, CreateBlogCategoriesResolver], -}) -export class AdminBlogModule {} diff --git a/apps/backend/src/plugins/blog/admin/categories/create/create.resolver.ts b/apps/backend/src/plugins/blog/admin/categories/create/create.resolver.ts deleted file mode 100644 index eee0d8ddc..000000000 --- a/apps/backend/src/plugins/blog/admin/categories/create/create.resolver.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Args, Mutation, Resolver } from '@nestjs/graphql'; -import { UseGuards } from '@nestjs/common'; -import { AdminAuthGuards } from 'vitnode-backend'; - -import { CreateBlogCategoriesService } from './create.service'; -import { CreatePluginCategoriesArgs } from './dto/create.args'; - -import { ShowBlogCategories } from '@/plugins/blog/categories/show/dto/show.obj'; - -@Resolver() -export class CreateBlogCategoriesResolver { - constructor(private readonly service: CreateBlogCategoriesService) {} - - @Mutation(() => ShowBlogCategories) - @UseGuards(AdminAuthGuards) - async admin__blog_categories__create( - @Args() args: CreatePluginCategoriesArgs, - ): Promise { - return this.service.create(args); - } -} diff --git a/apps/backend/src/plugins/blog/admin/categories/create/create.service.ts b/apps/backend/src/plugins/blog/admin/categories/create/create.service.ts deleted file mode 100644 index b773d4fa9..000000000 --- a/apps/backend/src/plugins/blog/admin/categories/create/create.service.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { - DatabaseService, - ParserTextLanguageCoreHelpersService, -} from 'vitnode-backend'; - -import { CreatePluginCategoriesArgs } from './dto/create.args'; - -import { ShowBlogCategories } from '@/plugins/blog/categories/show/dto/show.obj'; -import { - blog_categories, - blog_categories_description, - blog_categories_name, - blog_categories_permissions, -} from '../../database/schema/categories'; - -@Injectable() -export class CreateBlogCategoriesService { - constructor( - private readonly databaseService: DatabaseService, - private readonly parserTextLang: ParserTextLanguageCoreHelpersService, - ) {} - - async create({ - color, - description, - name, - permissions, - }: CreatePluginCategoriesArgs): Promise { - const categories = await this.databaseService.db - .insert(blog_categories) - .values({ color, ...permissions }) - .returning(); - - const categoryId = categories[0].id; - - await this.parserTextLang.parse({ - item_id: categoryId, - database: blog_categories_name, - data: name, - }); - - await this.parserTextLang.parse({ - item_id: categoryId, - database: blog_categories_description, - data: description, - }); - - const data = await this.databaseService.db.query.blog_categories.findFirst({ - where: (table, { eq }) => eq(table.id, categoryId), - with: { - name: true, - description: true, - }, - }); - - // Set permissions - if (permissions.groups.length > 0) { - await this.databaseService.db.insert(blog_categories_permissions).values( - permissions.groups.map(item => ({ - blog_id: data[0].id, - group_id: item.group_id, - ...item, - })), - ); - } - - return data; - } -} diff --git a/apps/backend/src/plugins/blog/admin/categories/create/dto/create.args.ts b/apps/backend/src/plugins/blog/admin/categories/create/dto/create.args.ts deleted file mode 100644 index a5497a373..000000000 --- a/apps/backend/src/plugins/blog/admin/categories/create/dto/create.args.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { ArgsType, Field, InputType, Int } from '@nestjs/graphql'; -import { Transform } from 'class-transformer'; -import { ArrayMinSize, ValidateNested, IsArray } from 'class-validator'; -import { - IsTextLanguageInput, - TextLanguageInput, - TransformTextLanguageInput, -} from 'vitnode-backend'; - -@InputType() -class GroupsPermissionsCreatePluginCategories { - @Field(() => Int) - group_id: number; - - @Field(() => Boolean) - can_read: boolean; - - @Field(() => Boolean) - can_create: boolean; - - @Field(() => Boolean) - can_reply: boolean; - - @Field(() => Boolean) - can_download_files: boolean; -} - -@InputType() -export class PermissionsCreatePluginCategories { - @Field(() => Boolean) - can_all_read: boolean; - - @Field(() => Boolean) - can_all_create: boolean; - - @Field(() => Boolean) - can_all_reply: boolean; - - @Field(() => Boolean) - can_all_download_files: boolean; - - @Field(() => [GroupsPermissionsCreatePluginCategories]) - groups: GroupsPermissionsCreatePluginCategories[]; -} - -@ArgsType() -export class CreatePluginCategoriesArgs { - @IsArray() - @ValidateNested({ each: true }) - @ArrayMinSize(1) - @IsTextLanguageInput() - @Transform(TransformTextLanguageInput) - @Field(() => [TextLanguageInput]) - name: TextLanguageInput[]; - - @IsArray() - @IsTextLanguageInput() - @Transform(TransformTextLanguageInput) - @Field(() => [TextLanguageInput]) - description: TextLanguageInput[]; - - @Field(() => String) - color: string; - - @Field(() => PermissionsCreatePluginCategories) - permissions: PermissionsCreatePluginCategories; -} diff --git a/apps/backend/src/plugins/blog/admin/database/index.ts b/apps/backend/src/plugins/blog/admin/database/index.ts deleted file mode 100644 index 1dd87742a..000000000 --- a/apps/backend/src/plugins/blog/admin/database/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as articles from './schema/articles'; -import * as categories from './schema/categories'; - -export default { - ...articles, - ...categories, -}; diff --git a/apps/backend/src/plugins/blog/admin/database/schema/articles.ts b/apps/backend/src/plugins/blog/admin/database/schema/articles.ts deleted file mode 100644 index fcb284b11..000000000 --- a/apps/backend/src/plugins/blog/admin/database/schema/articles.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { relations } from 'drizzle-orm'; -import { - index, - integer, - pgTable, - serial, - timestamp, - varchar, -} from 'drizzle-orm/pg-core'; - -import { blog_categories } from './categories'; - -import { core_languages } from '@/plugins/core/admin/database/schema/languages'; -import { core_users } from '@/plugins/core/admin/database/schema/users'; - -export const blog_articles = pgTable( - 'blog_articles', - { - id: serial('id').primaryKey(), - author_id: integer('author_id').references(() => core_users.id, { - onDelete: 'cascade', - }), - category_id: integer('category_id').references(() => blog_categories.id, { - onDelete: 'cascade', - }), - created: timestamp('created').notNull().defaultNow(), - update: timestamp('update').notNull().defaultNow(), - ip_address: varchar('ip_address', { length: 45 }), - }, - table => ({ - author_id_idx: index('blog_articles_author_id_idx').on(table.author_id), - category_id_idx: index('blog_articles_category_id_idx').on( - table.category_id, - ), - }), -); - -export const blog_articles_relations = relations( - blog_articles, - ({ many, one }) => ({ - author: one(core_users, { - fields: [blog_articles.author_id], - references: [core_users.id], - }), - content: many(blog_articles_content), - title: many(blog_articles_title), - category: one(blog_categories, { - fields: [blog_articles.category_id], - references: [blog_categories.id], - }), - }), -); - -export const blog_articles_content = pgTable( - 'blog_articles_content', - { - id: serial('id').primaryKey(), - item_id: integer('item_id').references(() => blog_articles.id, { - onDelete: 'cascade', - }), - language_code: varchar('language_code') - .notNull() - .references(() => core_languages.code, { - onDelete: 'cascade', - }), - value: varchar('value').notNull(), - }, - table => ({ - item_id_idx: index('blog_articles_content_item_id_idx').on(table.item_id), - language_code_idx: index('blog_articles_content_language_code_idx').on( - table.language_code, - ), - }), -); - -export const blog_articles_content_relations = relations( - blog_articles_content, - ({ one }) => ({ - article: one(blog_articles, { - fields: [blog_articles_content.item_id], - references: [blog_articles.id], - }), - }), -); - -export const blog_articles_title = pgTable( - 'blog_articles_title', - { - id: serial('id').primaryKey(), - item_id: integer('item_id').references(() => blog_articles.id, { - onDelete: 'cascade', - }), - language_code: varchar('language_code') - .notNull() - .references(() => core_languages.code, { - onDelete: 'cascade', - }), - value: varchar('value', { length: 100 }).notNull(), - }, - table => ({ - item_id_idx: index('blog_articles_title_item_id_idx').on(table.item_id), - language_code_idx: index('blog_articles_title_language_code_idx').on( - table.language_code, - ), - }), -); - -export const blog_articles_title_relations = relations( - blog_articles_title, - ({ one }) => ({ - article: one(blog_articles, { - fields: [blog_articles_title.item_id], - references: [blog_articles.id], - }), - }), -); diff --git a/apps/backend/src/plugins/blog/admin/database/schema/categories.ts b/apps/backend/src/plugins/blog/admin/database/schema/categories.ts deleted file mode 100644 index bcf576a3f..000000000 --- a/apps/backend/src/plugins/blog/admin/database/schema/categories.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { - boolean, - index, - integer, - pgTable, - serial, - timestamp, - varchar, -} from 'drizzle-orm/pg-core'; -import { relations } from 'drizzle-orm'; - -import { blog_articles } from './articles'; - -import { core_languages } from '@/plugins/core/admin/database/schema/languages'; -import { core_groups } from '@/plugins/core/admin/database/schema/groups'; - -export const blog_categories = pgTable('blog_categories', { - id: serial('id').primaryKey(), - created: timestamp('created').notNull().defaultNow(), - position: integer('position').notNull().default(0), - color: varchar('color', { length: 30 }).notNull().default(''), - can_all_read: boolean('can_all_read').notNull().default(true), - can_all_create: boolean('can_all_create').notNull().default(true), - can_all_reply: boolean('can_all_reply').notNull().default(true), - can_all_download_files: boolean('can_all_download_files') - .notNull() - .default(true), -}); - -export const blog_categories_relations = relations( - blog_categories, - ({ many }) => ({ - articles: many(blog_articles), - name: many(blog_categories_name), - description: many(blog_categories_description), - permissions: many(blog_categories_permissions), - }), -); - -export const blog_categories_name = pgTable( - 'blog_categories_name', - { - id: serial('id').primaryKey(), - item_id: integer('item_id').references(() => blog_categories.id, { - onDelete: 'cascade', - }), - language_code: varchar('language_code') - .notNull() - .references(() => core_languages.code, { - onDelete: 'cascade', - }), - value: varchar('value', { length: 100 }).notNull(), - }, - table => ({ - item_id_idx: index('blog_categories_name_item_id_idx').on(table.item_id), - language_code_idx: index('blog_categories_name_language_code_idx').on( - table.language_code, - ), - }), -); - -export const blog_categories_name_relations = relations( - blog_categories_name, - ({ one }) => ({ - category: one(blog_categories, { - fields: [blog_categories_name.item_id], - references: [blog_categories.id], - }), - }), -); - -export const blog_categories_description = pgTable( - 'blog_categories_description', - { - id: serial('id').primaryKey(), - item_id: integer('item_id').references(() => blog_categories.id, { - onDelete: 'cascade', - }), - language_code: varchar('language_code') - .notNull() - .references(() => core_languages.code, { - onDelete: 'cascade', - }), - value: varchar('value').notNull(), - }, - table => ({ - item_id_idx: index('blog_categories_description_item_id_idx').on( - table.item_id, - ), - language_code_idx: index( - 'blog_categories_description_language_code_idx', - ).on(table.language_code), - }), -); - -export const blog_categories_description_relations = relations( - blog_categories_description, - ({ one }) => ({ - category: one(blog_categories, { - fields: [blog_categories_description.item_id], - references: [blog_categories.id], - }), - }), -); - -export const blog_categories_permissions = pgTable( - 'blog_categories_permissions', - { - id: serial('id').primaryKey(), - blog_id: integer('blog_id').references(() => blog_categories.id, { - onDelete: 'cascade', - }), - group_id: integer('group_id').references(() => core_groups.id, { - onDelete: 'cascade', - }), - can_read: boolean('can_read').notNull().default(false), - can_create: boolean('can_create').notNull().default(false), - can_reply: boolean('can_reply').notNull().default(false), - can_download_files: boolean('can_download_files').notNull().default(false), - }, - table => ({ - blog_id_idx: index('blog_categories_permissions_blog_id_idx').on( - table.blog_id, - ), - group_id_idx: index('blog_categories_permissions_group_id_idx').on( - table.group_id, - ), - }), -); diff --git a/apps/backend/src/plugins/blog/blog.module.ts b/apps/backend/src/plugins/blog/blog.module.ts deleted file mode 100644 index 80c87519e..000000000 --- a/apps/backend/src/plugins/blog/blog.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Module } from '@nestjs/common'; - -import { AdminBlogModule } from './admin/admin.module'; -import { BlogCategoriesModule } from './categories/categories.module'; - -@Module({ - imports: [AdminBlogModule, BlogCategoriesModule], -}) -export class BlogModule {} diff --git a/apps/backend/src/plugins/blog/categories/categories.module.ts b/apps/backend/src/plugins/blog/categories/categories.module.ts deleted file mode 100644 index c467127cb..000000000 --- a/apps/backend/src/plugins/blog/categories/categories.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Module } from '@nestjs/common'; - -import { ShowBlogCategoriesService } from './show/show.service'; -import { ShowBlogCategoriesResolver } from './show/show.resolver'; - -@Module({ - providers: [ShowBlogCategoriesService, ShowBlogCategoriesResolver], -}) -export class BlogCategoriesModule {} diff --git a/apps/backend/src/plugins/blog/categories/show/dto/show.args.ts b/apps/backend/src/plugins/blog/categories/show/dto/show.args.ts deleted file mode 100644 index 4847f5dcf..000000000 --- a/apps/backend/src/plugins/blog/categories/show/dto/show.args.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { ArgsType } from '@nestjs/graphql'; -import { PaginationArgs } from 'vitnode-backend'; - -@ArgsType() -export class ShowBlogCategoriesArgs extends PaginationArgs {} diff --git a/apps/backend/src/plugins/blog/categories/show/dto/show.obj.ts b/apps/backend/src/plugins/blog/categories/show/dto/show.obj.ts deleted file mode 100644 index a749a8f61..000000000 --- a/apps/backend/src/plugins/blog/categories/show/dto/show.obj.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Field, Int, ObjectType } from '@nestjs/graphql'; -import { PageInfo, TextLanguage } from 'vitnode-backend'; - -@ObjectType() -export class ShowBlogCategories { - @Field(() => Int) - id: number; - - @Field(() => [TextLanguage]) - name: TextLanguage[]; - - @Field(() => [TextLanguage], { nullable: true }) - description: TextLanguage[] | null; - - @Field(() => Int) - position: number; - - @Field(() => String) - color: string; -} - -@ObjectType() -export class ShowBlogCategoriesObj { - @Field(() => [ShowBlogCategories]) - edges: ShowBlogCategories[]; - - @Field(() => PageInfo) - pageInfo: PageInfo; -} diff --git a/apps/backend/src/plugins/blog/categories/show/show.resolver.ts b/apps/backend/src/plugins/blog/categories/show/show.resolver.ts deleted file mode 100644 index 5d42ecb35..000000000 --- a/apps/backend/src/plugins/blog/categories/show/show.resolver.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Args, Query, Resolver } from '@nestjs/graphql'; - -import { ShowBlogCategoriesService } from './show.service'; -import { ShowBlogCategoriesArgs } from './dto/show.args'; -import { ShowBlogCategoriesObj } from './dto/show.obj'; - -@Resolver() -export class ShowBlogCategoriesResolver { - constructor(private readonly service: ShowBlogCategoriesService) {} - - @Query(() => ShowBlogCategoriesObj) - async blog_categories__show( - @Args() args: ShowBlogCategoriesArgs, - ): Promise { - return this.service.show(args); - } -} diff --git a/apps/backend/src/plugins/blog/categories/show/show.service.ts b/apps/backend/src/plugins/blog/categories/show/show.service.ts deleted file mode 100644 index 8bf772abd..000000000 --- a/apps/backend/src/plugins/blog/categories/show/show.service.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { count } from 'drizzle-orm'; -import { - inputPaginationCursor, - outputPagination, - SortDirectionEnum, - DatabaseService, -} from 'vitnode-backend'; - -import { ShowBlogCategoriesArgs } from './dto/show.args'; -import { ShowBlogCategoriesObj } from './dto/show.obj'; - -import { blog_categories } from '../../admin/database/schema/categories'; - -@Injectable() -export class ShowBlogCategoriesService { - constructor(private readonly databaseService: DatabaseService) {} - - async show({ - cursor, - first, - last, - }: ShowBlogCategoriesArgs): Promise { - const pagination = await inputPaginationCursor({ - cursor, - database: blog_categories, - databaseService: this.databaseService, - first, - last, - primaryCursor: { - column: 'id', - schema: blog_categories.id, - }, - defaultSortBy: { - direction: SortDirectionEnum.asc, - column: 'position', - }, - }); - - const edges = await this.databaseService.db.query.blog_categories.findMany({ - ...pagination, - with: { - name: true, - description: true, - }, - }); - - const totalCount = await this.databaseService.db - .select({ count: count() }) - .from(blog_categories); - - return outputPagination({ - edges, - totalCount, - first, - cursor, - last, - }); - } -} diff --git a/apps/backend/src/plugins/blog/config.json b/apps/backend/src/plugins/blog/config.json deleted file mode 100644 index 64998872e..000000000 --- a/apps/backend/src/plugins/blog/config.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "Blog", - "description": "Turn your ideas into viral blog posts.", - "code": "blog", - "author": "VitNode", - "author_url": "https://vitnode.com/", - "support_url": "https://github.com/aXenDeveloper/vitnode/issues", - "allow_default": true, - "nav": [ - { - "code": "categories", - "href": "categories", - "icon": "blocks", - "children": [] - } - ] -} diff --git a/apps/backend/src/plugins/blog/versions.json b/apps/backend/src/plugins/blog/versions.json deleted file mode 100644 index 1143a9b2a..000000000 --- a/apps/backend/src/plugins/blog/versions.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "10000": "0.1.0" -} diff --git a/apps/backend/src/plugins/core/admin/database/drizzle.config.ts b/apps/backend/src/plugins/core/admin/database/drizzle.config.ts deleted file mode 100644 index 5c3d66308..000000000 --- a/apps/backend/src/plugins/core/admin/database/drizzle.config.ts +++ /dev/null @@ -1,14 +0,0 @@ -// ! DO NOT REMOVE, MODIFY OR MOVE THIS FILE!!! - -import { defineConfig } from 'drizzle-kit'; - -// eslint-disable-next-line @typescript-eslint/ban-ts-comment, @typescript-eslint/prefer-ts-expect-error -// @ts-ignore -import { DATABASE_ENVS } from '@/database/client'; - -export default defineConfig({ - dialect: 'postgresql', - dbCredentials: DATABASE_ENVS, - schema: './src/plugins/core/admin/database/schema/*.ts', - out: './src/plugins/core/admin/database/migrations/', -}); diff --git a/apps/backend/src/plugins/plugins.module.ts b/apps/backend/src/plugins/plugins.module.ts index 76398d7c5..9df05a87f 100644 --- a/apps/backend/src/plugins/plugins.module.ts +++ b/apps/backend/src/plugins/plugins.module.ts @@ -2,12 +2,12 @@ import { Module } from '@nestjs/common'; -import { BlogModule } from './blog/blog.module'; +import { WelcomeModule } from './welcome/welcome.module'; // ! === IMPORT === @Module({ imports: [ - BlogModule, + WelcomeModule, // ! === MODULE === ], }) diff --git a/apps/backend/src/plugins/welcome/admin/admin.module.ts b/apps/backend/src/plugins/welcome/admin/admin.module.ts new file mode 100644 index 000000000..655ebc32b --- /dev/null +++ b/apps/backend/src/plugins/welcome/admin/admin.module.ts @@ -0,0 +1,4 @@ +import { Module } from '@nestjs/common'; + +@Module({}) +export class AdminWelcomeModule {} diff --git a/apps/backend/src/plugins/blog/admin/database/drizzle.config.ts b/apps/backend/src/plugins/welcome/admin/database/drizzle.config.ts similarity index 52% rename from apps/backend/src/plugins/blog/admin/database/drizzle.config.ts rename to apps/backend/src/plugins/welcome/admin/database/drizzle.config.ts index ee1c58642..c46743e28 100644 --- a/apps/backend/src/plugins/blog/admin/database/drizzle.config.ts +++ b/apps/backend/src/plugins/welcome/admin/database/drizzle.config.ts @@ -1,12 +1,11 @@ // ! DO NOT REMOVE, MODIFY OR MOVE THIS FILE!!! - import { defineConfig } from 'drizzle-kit'; -import { DATABASE_ENVS } from '@/database/client'; +import { DATABASE_ENVS } from '@/database'; export default defineConfig({ dialect: 'postgresql', dbCredentials: DATABASE_ENVS, - schema: './src/plugins/blog/admin/database/schema/*.ts', - out: './src/plugins/blog/admin/database/migrations/', + schema: './plugins/welcome/admin/database/schema/*.ts', + out: './plugins/welcome/admin/database/migrations/', }); diff --git a/apps/backend/src/plugins/blog/admin/database/functions.ts b/apps/backend/src/plugins/welcome/admin/database/functions.ts similarity index 100% rename from apps/backend/src/plugins/blog/admin/database/functions.ts rename to apps/backend/src/plugins/welcome/admin/database/functions.ts diff --git a/apps/backend/src/plugins/welcome/admin/database/index.ts b/apps/backend/src/plugins/welcome/admin/database/index.ts new file mode 100644 index 000000000..ff8b4c563 --- /dev/null +++ b/apps/backend/src/plugins/welcome/admin/database/index.ts @@ -0,0 +1 @@ +export default {}; diff --git a/apps/backend/src/plugins/welcome/config.json b/apps/backend/src/plugins/welcome/config.json new file mode 100644 index 000000000..c5b7a44bd --- /dev/null +++ b/apps/backend/src/plugins/welcome/config.json @@ -0,0 +1,10 @@ +{ + "name": "Welcome", + "description": "Basic plugin with default page.", + "code": "welcome", + "author": "VitNode", + "author_url": "https://vitnode.com/", + "support_url": "https://github.com/aXenDeveloper/vitnode/issues", + "allow_default": true, + "nav": [] +} \ No newline at end of file diff --git a/apps/backend/src/plugins/welcome/versions.json b/apps/backend/src/plugins/welcome/versions.json new file mode 100644 index 000000000..daffb9b32 --- /dev/null +++ b/apps/backend/src/plugins/welcome/versions.json @@ -0,0 +1,3 @@ +{ + "10000": "1.0.0" +} \ No newline at end of file diff --git a/apps/backend/src/plugins/welcome/welcome.module.ts b/apps/backend/src/plugins/welcome/welcome.module.ts new file mode 100644 index 000000000..2ec566af7 --- /dev/null +++ b/apps/backend/src/plugins/welcome/welcome.module.ts @@ -0,0 +1,8 @@ +import { Module } from '@nestjs/common'; + +import { AdminWelcomeModule } from './admin/admin.module'; + +@Module({ + imports: [AdminWelcomeModule], +}) +export class WelcomeModule {} diff --git a/apps/frontend/app/[locale]/(admin)/admin/(auth)/blog/categories/page.tsx b/apps/frontend/app/[locale]/(admin)/admin/(auth)/blog/categories/page.tsx deleted file mode 100644 index 4d02d9e13..000000000 --- a/apps/frontend/app/[locale]/(admin)/admin/(auth)/blog/categories/page.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { Metadata } from 'next'; -import { getTranslations } from 'next-intl/server'; -import { - Card, - CardContent, - CardHeader, -} from 'vitnode-frontend/components/ui/card'; -import { fetcher } from 'vitnode-frontend/graphql/fetcher'; -import { HeaderContent } from 'vitnode-frontend/components/ui/header-content'; - -import { CategoriesBlogAdminView } from '@/plugins/blog/admin/views/categories/categories-view'; -import { CreateCategoryBlogAdmin } from '@/plugins/blog/admin/views/categories/actions/create'; -import { - Admin_Blog_Categories__Show, - Admin_Blog_Categories__ShowQuery, - Admin_Blog_Categories__ShowQueryVariables, -} from '@/utils/graphql'; - -const getData = async () => { - const { data } = await fetcher< - Admin_Blog_Categories__ShowQuery, - Admin_Blog_Categories__ShowQueryVariables - >({ - query: Admin_Blog_Categories__Show, - }); - - return data; -}; - -export async function generateMetadata(): Promise { - const t = await getTranslations('blog.admin.categories'); - - return { - title: t('title'), - }; -} - -export default async function Page() { - const [t, data] = await Promise.all([ - getTranslations('blog.admin.categories'), - getData(), - ]); - - return ( - - - - - - - - - - - - ); -} diff --git a/apps/frontend/app/[locale]/(admin)/admin/(auth)/blog/layout.tsx b/apps/frontend/app/[locale]/(admin)/admin/(auth)/blog/layout.tsx deleted file mode 100644 index d36cdff9a..000000000 --- a/apps/frontend/app/[locale]/(admin)/admin/(auth)/blog/layout.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { Metadata } from 'next'; -import { getTranslations } from 'next-intl/server'; -import * as React from 'react'; -import { getGlobalData } from 'vitnode-frontend/graphql/get-global-data'; - -interface Props { - children: React.ReactNode; -} - -export async function generateMetadata(): Promise { - const [data, t, tAdmin] = await Promise.all([ - getGlobalData(), - getTranslations('blog.admin.nav'), - getTranslations('admin'), - ]); - - const defaultTitle = `${t('title')} - ${tAdmin('title_short')} - ${data.core_settings__show.site_name}`; - - return { - title: { - default: defaultTitle, - template: `%s - ${defaultTitle}`, - }, - }; -} - -export default async function Layout({ children }: Props) { - return children; -} diff --git a/apps/frontend/global.d.ts b/apps/frontend/global.d.ts index 5edd460c3..01127cb59 100644 --- a/apps/frontend/global.d.ts +++ b/apps/frontend/global.d.ts @@ -1,6 +1,6 @@ // ! DO NOT REMOVE, MODIFY OR MOVE THIS FILE!!! -type IntlMessages = typeof import("@/plugins/core/langs/en.json") & +type IntlMessages = typeof import('@/plugins/core/langs/en.json') & + typeof import('@/plugins/welcome/langs/en.json') & // ! === IMPORT === - typeof import("@/plugins/blog/langs/en.json") & - typeof import("@/plugins/admin/langs/en.json"); + typeof import('@/plugins/admin/langs/en.json'); diff --git a/apps/frontend/plugins/blog/admin/views/categories/actions/create.tsx b/apps/frontend/plugins/blog/admin/views/categories/actions/create.tsx deleted file mode 100644 index 9ea9d4824..000000000 --- a/apps/frontend/plugins/blog/admin/views/categories/actions/create.tsx +++ /dev/null @@ -1,39 +0,0 @@ -'use client'; - -import { Plus } from 'lucide-react'; -import { useTranslations } from 'next-intl'; -import * as React from 'react'; -import { - Dialog, - DialogContent, - DialogTrigger, -} from 'vitnode-frontend/components/ui/dialog'; -import { Button } from 'vitnode-frontend/components/ui/button'; -import { Loader } from 'vitnode-frontend/components/ui/loader'; - -const Content = React.lazy(async () => - import('../create-edit/create-edit').then(module => ({ - default: module.CreateEditCategoryBlogAdmin, - })), -); - -export const CreateCategoryBlogAdmin = () => { - const t = useTranslations('core'); - - return ( - - - - - - - }> - - - - - ); -}; diff --git a/apps/frontend/plugins/blog/admin/views/categories/categories-view.tsx b/apps/frontend/plugins/blog/admin/views/categories/categories-view.tsx deleted file mode 100644 index b82e02608..000000000 --- a/apps/frontend/plugins/blog/admin/views/categories/categories-view.tsx +++ /dev/null @@ -1,92 +0,0 @@ -'use client'; - -import * as React from 'react'; -import { DndContext, DragOverlay, closestCorners } from '@dnd-kit/core'; -import { - SortableContext, - verticalListSortingStrategy, -} from '@dnd-kit/sortable'; -import { useTranslations } from 'next-intl'; -import { useDragAndDrop } from 'vitnode-frontend/hooks/drag&drop/use-functions'; -import { ItemDragAndDrop } from 'vitnode-frontend/components/drag&drop-item'; - -import { ItemCategoriesCategoryAdmin } from './item/item'; -import { - Admin_Blog_Categories__ShowQuery, - ShowBlogCategories, -} from '@/utils/graphql'; - -export const CategoriesBlogAdminView = ({ - blog_categories__show: { edges }, -}: Admin_Blog_Categories__ShowQuery) => { - const t = useTranslations('core'); - const [initData, setData] = React.useState(edges); - const data = initData.map(item => ({ - ...item, - children: [], - })); - - // Update data when edges change - React.useEffect(() => { - setData(edges); - }, [edges]); - - const { - actionsItem, - activeItemOverlay, - flattenedItems, - onDragEnd, - onDragMove, - onDragOver, - onDragStart, - resetState, - sortedIds, - } = useDragAndDrop({ - data, - }); - - if (!data.length) { - return
{t('no_results')}
; - } - - return ( - onDragMove({ ...e, flattenedItems, maxDepth: 0 })} - onDragStart={onDragStart} - onDragEnd={async event => { - const moveTo = onDragEnd({ - data, - setData, - ...event, - }); - - if (!moveTo) return; - - // await mutationChangePositionApi(moveTo); - }} - > - - {flattenedItems.map(item => ( - - - - ))} - - - {activeItemOverlay && ( - - - - )} - - - - ); -}; diff --git a/apps/frontend/plugins/blog/admin/views/categories/create-edit/create-edit.tsx b/apps/frontend/plugins/blog/admin/views/categories/create-edit/create-edit.tsx deleted file mode 100644 index 9c06883b5..000000000 --- a/apps/frontend/plugins/blog/admin/views/categories/create-edit/create-edit.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import { useTranslations } from 'next-intl'; -import * as React from 'react'; -import { - DialogDescription, - DialogFooter, - DialogHeader, - DialogTitle, -} from 'vitnode-frontend/components/ui/dialog'; -import { Button } from 'vitnode-frontend/components/ui/button'; -import { Form } from 'vitnode-frontend/components/ui/form'; -import { Tabs, TabsTrigger } from 'vitnode-frontend/components/ui/tabs'; -import { useTextLang } from 'vitnode-frontend/hooks/use-text-lang'; - -import { useCreateEditCategoryBlogAdmin } from './hooks/use-create-edit-category-blog-admin'; -import { MainTabCreateEditCategoryBlogAdmin } from './tabs/main'; -import { PermissionsTabCreateEditCategoryBlogAdmin } from './tabs/permissions'; -import { ShowBlogCategories } from '@/utils/graphql'; - -interface Props { - data?: ShowBlogCategories; -} - -enum TabsEnum { - MAIN = 'main', - PERMISSIONS = 'permissions', -} - -export const CreateEditCategoryBlogAdmin = ({ data }: Props) => { - const t = useTranslations('blog.admin.categories'); - const { convertText } = useTextLang(); - const { form, onSubmit } = useCreateEditCategoryBlogAdmin({ data }); - const [activeTab, setActiveTab] = React.useState(TabsEnum.MAIN); - - const tabsContent = { - [TabsEnum.MAIN]: , - [TabsEnum.PERMISSIONS]: , - }; - - return ( - <> - - {t(data ? 'edit.title' : 'create.title')} - {data?.name && ( - {convertText(data.name)} - )} - - - - setActiveTab(TabsEnum.MAIN)} - > - {t('create.tabs.main')} - - setActiveTab(TabsEnum.PERMISSIONS)} - > - {t('create.tabs.permissions')} - - - -
- - {tabsContent[activeTab]} - - - - -
- - - ); -}; diff --git a/apps/frontend/plugins/blog/admin/views/categories/create-edit/hooks/create-mutation-api.ts b/apps/frontend/plugins/blog/admin/views/categories/create-edit/hooks/create-mutation-api.ts deleted file mode 100644 index 7e8d794d7..000000000 --- a/apps/frontend/plugins/blog/admin/views/categories/create-edit/hooks/create-mutation-api.ts +++ /dev/null @@ -1,30 +0,0 @@ -'use server'; - -import { revalidatePath } from 'next/cache'; -import { fetcher } from 'vitnode-frontend/graphql/fetcher'; - -import { - Admin__Blog_Categories__CreateMutation, - Admin__Blog_Categories__Create, - Admin__Blog_Categories__CreateMutationVariables, -} from '@/utils/graphql'; - -export const mutationCreateApi = async ( - variables: Admin__Blog_Categories__CreateMutationVariables, -) => { - try { - const { data } = await fetcher< - Admin__Blog_Categories__CreateMutation, - Admin__Blog_Categories__CreateMutationVariables - >({ - query: Admin__Blog_Categories__Create, - variables, - }); - - revalidatePath('/admin/blog/categories', 'page'); - - return { data }; - } catch (error) { - return { error }; - } -}; diff --git a/apps/frontend/plugins/blog/admin/views/categories/create-edit/hooks/use-create-edit-category-blog-admin.ts b/apps/frontend/plugins/blog/admin/views/categories/create-edit/hooks/use-create-edit-category-blog-admin.ts deleted file mode 100644 index b5b059a68..000000000 --- a/apps/frontend/plugins/blog/admin/views/categories/create-edit/hooks/use-create-edit-category-blog-admin.ts +++ /dev/null @@ -1,92 +0,0 @@ -import * as z from 'zod'; -import { useForm } from 'react-hook-form'; -import { zodResolver } from '@hookform/resolvers/zod'; -import { toast } from 'sonner'; -import { useTranslations } from 'next-intl'; -import { zodInput } from 'vitnode-frontend/helpers/zod'; -import { useDialog } from 'vitnode-frontend/components/ui/dialog'; -import { useTextLang } from 'vitnode-frontend/hooks/use-text-lang'; - -import { mutationCreateApi } from './create-mutation-api'; -import { ShowBlogCategories } from '@/utils/graphql'; - -interface Args { - data?: ShowBlogCategories; -} - -export const useCreateEditCategoryBlogAdmin = ({ data }: Args) => { - const t = useTranslations('blog.admin.categories'); - const tCore = useTranslations('core'); - const { setOpen } = useDialog(); - const { convertText } = useTextLang(); - - const formSchema = z.object({ - name: zodInput.languageInput.min(1), - description: zodInput.languageInput, - color: zodInput.string, - permissions: z.object({ - can_all_read: z.boolean(), - can_all_create: z.boolean(), - can_all_reply: z.boolean(), - can_all_download_files: z.boolean(), - groups: z.array( - z.object({ - group_id: z.number(), - can_read: z.boolean(), - can_create: z.boolean(), - can_reply: z.boolean(), - can_download_files: z.boolean(), - }), - ), - }), - }); - - const form = useForm>({ - resolver: zodResolver(formSchema), - defaultValues: { - name: data?.name ?? [], - description: data?.description ?? [], - color: '', - permissions: { - can_all_read: false, - can_all_create: false, - can_all_reply: false, - can_all_download_files: false, - groups: [], - }, - }, - }); - - const onSubmit = async (values: z.infer) => { - let error = false; - if (data) { - const mutation = await mutationCreateApi(values); - - if (mutation.error) { - error = true; - } - } else { - const mutation = await mutationCreateApi(values); - - if (mutation.error) { - error = true; - } - } - - if (error) { - toast.error(tCore('errors.title'), { - description: tCore('errors.internal_server_error'), - }); - - return; - } - - toast.success(t(data ? 'edit.success' : 'create.success'), { - description: convertText(values.name), - }); - - setOpen?.(false); - }; - - return { form, onSubmit }; -}; diff --git a/apps/frontend/plugins/blog/admin/views/categories/create-edit/tabs/main.tsx b/apps/frontend/plugins/blog/admin/views/categories/create-edit/tabs/main.tsx deleted file mode 100644 index 329fc10e6..000000000 --- a/apps/frontend/plugins/blog/admin/views/categories/create-edit/tabs/main.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import { useTranslations } from 'next-intl'; -import { useFormContext } from 'react-hook-form'; -import { - FormControl, - FormField, - FormItem, - FormLabel, - FormMessage, -} from 'vitnode-frontend/components/ui/form'; -import { ColorInput } from 'vitnode-frontend/components/ui/color-input'; -import { TextLanguageInput } from 'vitnode-frontend/components/ui/text-language-input'; - -export const MainTabCreateEditCategoryBlogAdmin = () => { - const t = useTranslations('blog.admin.categories'); - const form = useFormContext(); - - return ( - <> - ( - - {t('create.name.label')} - - - - - - )} - /> - - ( - - {t('create.description.label')} - - - - - - )} - /> - - ( - - {t('create.color.label')} - - - - - - )} - /> - - ); -}; diff --git a/apps/frontend/plugins/blog/admin/views/categories/create-edit/tabs/permissions.tsx b/apps/frontend/plugins/blog/admin/views/categories/create-edit/tabs/permissions.tsx deleted file mode 100644 index c697b2cfc..000000000 --- a/apps/frontend/plugins/blog/admin/views/categories/create-edit/tabs/permissions.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { useTranslations } from 'next-intl'; -import { useFormContext } from 'react-hook-form'; -import { FormField } from 'vitnode-frontend/components/ui/form'; -import { PermissionsTable } from 'vitnode-frontend/components/ui/permissions-table'; - -export const PermissionsTabCreateEditCategoryBlogAdmin = () => { - const t = useTranslations('blog.admin.categories'); - const form = useFormContext(); - - return ( - <> - { - return ( - - ); - }} - /> - - ); -}; diff --git a/apps/frontend/plugins/blog/admin/views/categories/item/item.tsx b/apps/frontend/plugins/blog/admin/views/categories/item/item.tsx deleted file mode 100644 index fe8b54da2..000000000 --- a/apps/frontend/plugins/blog/admin/views/categories/item/item.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { useTextLang } from 'vitnode-frontend/hooks/use-text-lang'; - -import { ShowBlogCategories } from '@/utils/graphql'; - -interface Props { - data: ShowBlogCategories; -} - -export const ItemCategoriesCategoryAdmin = ({ data }: Props) => { - const { convertText } = useTextLang(); - - return ( - <> - {convertText(data.name)} - {data.color} - - ); -}; diff --git a/apps/frontend/plugins/blog/graphql/mutations/admin/categories/admin__blog_categories__create.gql b/apps/frontend/plugins/blog/graphql/mutations/admin/categories/admin__blog_categories__create.gql deleted file mode 100644 index 622b5645c..000000000 --- a/apps/frontend/plugins/blog/graphql/mutations/admin/categories/admin__blog_categories__create.gql +++ /dev/null @@ -1,15 +0,0 @@ -mutation Admin__blog_categories__create( - $description: [TextLanguageInput!]! - $name: [TextLanguageInput!]! - $color: String! - $permissions: PermissionsCreatePluginCategories! -) { - admin__blog_categories__create( - description: $description - name: $name - color: $color - permissions: $permissions - ) { - id - } -} diff --git a/apps/frontend/plugins/blog/graphql/queries/admin/categories/admin_blog_categories__show.gql b/apps/frontend/plugins/blog/graphql/queries/admin/categories/admin_blog_categories__show.gql deleted file mode 100644 index 2c0b30025..000000000 --- a/apps/frontend/plugins/blog/graphql/queries/admin/categories/admin_blog_categories__show.gql +++ /dev/null @@ -1,17 +0,0 @@ -query Admin_blog_categories__show { - blog_categories__show { - edges { - color - description { - language_code - value - } - id - name { - language_code - value - } - position - } - } -} diff --git a/apps/frontend/plugins/blog/langs/en.json b/apps/frontend/plugins/blog/langs/en.json deleted file mode 100644 index ebbe3aa86..000000000 --- a/apps/frontend/plugins/blog/langs/en.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "blog": { - "admin": { - "nav": { - "title": "Blog", - "categories": "Categories" - }, - "categories": { - "title": "Categories", - "create": { - "tabs": { - "main": "Main", - "permissions": "Permissions" - }, - "title": "Create Category", - "name": { - "label": "Title" - }, - "description": { - "label": "Description" - }, - "color": { - "label": "Color" - }, - "success": "Category created successfully", - "submit": "Create Category" - }, - "edit": { - "title": "Edit Category", - "success": "Category updated successfully", - "submit": "Update Category" - } - } - } - } -} diff --git a/apps/frontend/plugins/blog/langs/pl.json b/apps/frontend/plugins/blog/langs/pl.json deleted file mode 100644 index 524b11706..000000000 --- a/apps/frontend/plugins/blog/langs/pl.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "blog": { - "admin": { - "nav": { - "title": "Blog", - "categories": "Kategorie" - }, - "categories": { - "title": "Kategorie", - "create": { - "tabs": { - "main": "GΕ‚Γ³wne", - "permissions": "Uprawnienia" - }, - "title": "Dodaj Kategorie", - "name": { - "label": "TytuΕ‚" - }, - "description": { - "label": "Opis" - }, - "color": { - "label": "Kolor" - }, - "submit": "Dodaj Kategorie" - }, - "edit": { - "title": "Edytuj Kategorie", - "submit": "Edytuj Kategorie" - } - } - } - } -} diff --git a/apps/frontend/plugins/blog/templates/default-page.tsx b/apps/frontend/plugins/blog/templates/default-page.tsx deleted file mode 100644 index 6107ee57c..000000000 --- a/apps/frontend/plugins/blog/templates/default-page.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function DefaultPage() { - return
Default Blog Page
; -} diff --git a/apps/frontend/plugins/welcome/langs/en.json b/apps/frontend/plugins/welcome/langs/en.json new file mode 100644 index 000000000..bfbf3a86d --- /dev/null +++ b/apps/frontend/plugins/welcome/langs/en.json @@ -0,0 +1,5 @@ +{ + "welcome": { + "admin": {} + } +} \ No newline at end of file diff --git a/apps/frontend/plugins/welcome/langs/pl.json b/apps/frontend/plugins/welcome/langs/pl.json new file mode 100644 index 000000000..bfbf3a86d --- /dev/null +++ b/apps/frontend/plugins/welcome/langs/pl.json @@ -0,0 +1,5 @@ +{ + "welcome": { + "admin": {} + } +} \ No newline at end of file diff --git a/apps/frontend/plugins/welcome/templates/default-page.tsx b/apps/frontend/plugins/welcome/templates/default-page.tsx new file mode 100644 index 000000000..e2896b3f3 --- /dev/null +++ b/apps/frontend/plugins/welcome/templates/default-page.tsx @@ -0,0 +1,3 @@ +export default function DefaultPage() { + return
Default Page for welcome
; +} diff --git a/package.json b/package.json index 0f96eba2c..5d06c506a 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,8 @@ "packages/*" ], "scripts": { + "config:init": "cd apps/backend && pnpm config:init && cd ../..", + "config:init:skip-database": "cd apps/backend && pnpm config:init --skip-database && cd ../..", "build:scripts": "turbo build:scripts && pnpm i", "build": "cross-env TURBO_TELEMETRY_DISABLED=1 turbo build", "dev": "pnpm build:scripts && turbo dev", @@ -25,7 +27,6 @@ "lint:fix": "turbo lint:fix", "start": "turbo start", "preinstall": "npx only-allow pnpm", - "config:init": "cd apps/frontend && pnpm config:init && cd ../..", "codegen": "cd apps/backend && pnpm codegen && cd ../..", "docker:dev": "docker-compose -f ./docker-compose-dev.yml -p vitnode-dev up -d", "docker:prod": "sh docker-prod.sh", diff --git a/packages/backend/.npmignore b/packages/backend/.npmignore index 4d8feaa94..cc3ebe220 100644 --- a/packages/backend/.npmignore +++ b/packages/backend/.npmignore @@ -1,4 +1,5 @@ -/src +/src/* +!/src/plugins /.turbo /node_modules /.eslintrc.json diff --git a/packages/backend/scripts/copy-database-core.ts b/packages/backend/scripts/copy-database-core.ts deleted file mode 100644 index 8d689da00..000000000 --- a/packages/backend/scripts/copy-database-core.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* eslint-disable no-console */ -import * as path from 'path'; -import * as fs from 'fs'; - -export const copyDatabaseSchema = ({ - corePluginPath, -}: { - corePluginPath: string; -}) => { - const currentPathToSchema = path.join( - __dirname, - '..', - '..', - 'src', - 'templates', - 'core', - 'admin', - 'database', - ); - if (!fs.existsSync(currentPathToSchema)) { - console.log( - `⛔️ Database schema not found in 'templates/core/admin/database' directory. "${currentPathToSchema}"`, - ); - process.exit(1); - } - - const userPathToSchema = path.join(corePluginPath, 'admin', 'database'); - fs.cpSync(currentPathToSchema, userPathToSchema, { recursive: true }); -}; diff --git a/packages/backend/scripts/copy-files.ts b/packages/backend/scripts/copy-files.ts new file mode 100644 index 000000000..020429993 --- /dev/null +++ b/packages/backend/scripts/copy-files.ts @@ -0,0 +1,22 @@ +/* eslint-disable no-console */ +import * as path from 'path'; +import * as fs from 'fs'; + +export const copyFiles = ({ pluginsPath }: { pluginsPath: string }) => { + // Copy core plugin + const currentPathToSchema = path.join( + __dirname, + '..', + '..', + 'src', + 'plugins', + ); + if (!fs.existsSync(currentPathToSchema)) { + console.log( + `⛔️ Plugins not found in 'src/plugins' directory. "${currentPathToSchema}"`, + ); + process.exit(1); + } + + fs.cpSync(currentPathToSchema, pluginsPath, { recursive: true }); +}; diff --git a/packages/backend/scripts/generate-database-migrations.ts b/packages/backend/scripts/generate-database-migrations.ts index 6fab74bfa..01cb6b7d8 100644 --- a/packages/backend/scripts/generate-database-migrations.ts +++ b/packages/backend/scripts/generate-database-migrations.ts @@ -1,5 +1,6 @@ import { exec } from 'child_process'; import * as fs from 'fs'; +import { join } from 'path'; const execShellCommand = async (cmd: string) => { return new Promise((resolve, reject) => { @@ -26,6 +27,16 @@ export const generateDatabaseMigrations = async ({ .readdirSync(pluginsPath) .filter(plugin => plugin !== 'plugins.module.ts') .map(async plugin => { + // Check if schema exists + const schemaPath = join( + pluginsPath, + plugin, + 'admin', + 'database', + 'schema', + ); + if (!fs.existsSync(schemaPath)) return; + await execShellCommand( `npx drizzle-kit up --config src/plugins/${plugin}/admin/database/drizzle.config.ts && npx drizzle-kit generate --config src/plugins/${plugin}/admin/database/drizzle.config.ts`, ); diff --git a/packages/backend/scripts/generate-migrations.ts b/packages/backend/scripts/generate-migrations.ts index ad6ee1744..01a4c1a78 100644 --- a/packages/backend/scripts/generate-migrations.ts +++ b/packages/backend/scripts/generate-migrations.ts @@ -3,7 +3,7 @@ import * as fs from 'fs'; import { NodePgDatabase } from 'drizzle-orm/node-postgres'; -import coreSchemaDatabase from '../src/templates/core/admin/database'; +import coreSchemaDatabase from '../src/plugins/core/admin/database'; import { migrate } from './helpers/migrate'; export const generateMigrations = async ({ diff --git a/packages/backend/scripts/helpers/migrate.ts b/packages/backend/scripts/helpers/migrate.ts index 7a0dfd3dc..9ce8aecbd 100644 --- a/packages/backend/scripts/helpers/migrate.ts +++ b/packages/backend/scripts/helpers/migrate.ts @@ -7,7 +7,7 @@ import { sql } from 'drizzle-orm'; import { MigrationMeta } from 'drizzle-orm/migrator'; import { NodePgDatabase } from 'drizzle-orm/node-postgres'; -import coreSchemaDatabase from '../../src/templates/core/admin/database'; +import coreSchemaDatabase from '../../src/plugins/core/admin/database'; // Source: https://github.com/drizzle-team/drizzle-orm/blob/main/drizzle-orm/src/migrator.ts const readMigrationFiles = ({ diff --git a/packages/backend/scripts/setup.ts b/packages/backend/scripts/setup.ts index bce14f50d..8805822d7 100755 --- a/packages/backend/scripts/setup.ts +++ b/packages/backend/scripts/setup.ts @@ -4,18 +4,27 @@ import * as fs from 'fs'; import { join } from 'path'; -import { copyDatabaseSchema } from './copy-database-core'; +import { copyFiles } from './copy-files'; import { generateManifest } from './generate-manifest'; import { generateMigrations } from './generate-migrations'; import { updatePlugins } from './update-plugins'; -import { DATABASE_ENVS, createClientDatabase } from '../src/database/client'; -import coreSchemaDatabase from '../src/templates/core/admin/database'; +import coreSchemaDatabase from '../src/plugins/core/admin/database'; import { generateDatabaseMigrations } from './generate-database-migrations'; import { generateConfig } from './generate-config'; +import { createClientDatabase, DATABASE_ENVS } from '@/utils/database/client'; const init = async () => { + let skipDatabase = false; + if (process.argv[3] === '--skip-database') { + console.log( + '\x1b[34m%s\x1b[0m', + '[VitNode]', + '`--skip-database` flag detected. Skipping database setup...', + ); + skipDatabase = true; + } + const pluginsPath = join(process.cwd(), 'src', 'plugins'); - const corePluginPath = join(pluginsPath, 'core'); if (!fs.existsSync(pluginsPath)) { console.log( `⛔️ Plugins not found in 'src/plugins' directory. "${pluginsPath}"`, @@ -23,24 +32,24 @@ const init = async () => { process.exit(1); } - const database = createClientDatabase({ - config: DATABASE_ENVS, - schemaDatabase: coreSchemaDatabase, - }); - console.log( '\x1b[34m%s\x1b[0m', '[VitNode]', - '[1/6] Setup the project. Generating the config file...', + `[1/${skipDatabase ? 2 : 6}] Setup the project. Generating the config file...`, ); generateConfig({ pluginsPath }); console.log( '\x1b[34m%s\x1b[0m', '[VitNode]', - '[2/6] Copying the database core schema...', + `[2/${skipDatabase ? 2 : 6}] Copying files into backend...`, ); - copyDatabaseSchema({ corePluginPath }); + copyFiles({ pluginsPath }); + + if (skipDatabase) { + console.log('\x1b[34m%s\x1b[0m', '[VitNode]', 'βœ… Project setup complete.'); + process.exit(0); + } console.log( '\x1b[34m%s\x1b[0m', @@ -56,6 +65,11 @@ const init = async () => { ); generateManifest(); + const database = createClientDatabase({ + config: DATABASE_ENVS, + schemaDatabase: coreSchemaDatabase, + }); + console.log( '\x1b[34m%s\x1b[0m', '[VitNode]', diff --git a/packages/backend/scripts/update-plugins.ts b/packages/backend/scripts/update-plugins.ts index 33608a5b5..b46111f3f 100644 --- a/packages/backend/scripts/update-plugins.ts +++ b/packages/backend/scripts/update-plugins.ts @@ -6,8 +6,8 @@ import { NodePgDatabase } from 'drizzle-orm/node-postgres'; import { eq } from 'drizzle-orm'; import { ConfigPlugin } from '../src/providers/plugins.type'; -import coreSchemaDatabase from '../src/templates/core/admin/database'; -import { core_plugins } from '../src/templates/core/admin/database/schema/plugins'; +import coreSchemaDatabase from '../src/plugins/core/admin/database'; +import { core_plugins } from '../src/plugins/core/admin/database/schema/plugins'; export const updatePlugins = async ({ pluginsPath, @@ -46,6 +46,8 @@ export const updatePlugins = async ({ }); if (plugin) { + if (!latestVersion) return; + await tx .update(core_plugins) .set({ diff --git a/packages/backend/src/app.module.ts b/packages/backend/src/app.module.ts index da1cc30a0..9dc9d4efb 100644 --- a/packages/backend/src/app.module.ts +++ b/packages/backend/src/app.module.ts @@ -13,9 +13,12 @@ import { APP_GUARD } from '@nestjs/core'; import { Ctx } from './utils'; import { CoreModule } from './core/core.module'; -import { DatabaseModule, DatabaseModuleArgs } from './database/database.module'; import { GlobalProvidersModule } from './providers/providers.module'; import { GqlThrottlerGuard } from './utils/guards/gql-throttler.guard'; +import { + DatabaseModule, + DatabaseModuleArgs, +} from './utils/database/database.module'; export interface VitNodePaths { envFile: string; diff --git a/packages/backend/src/core/admin/files/delete/delete.service.ts b/packages/backend/src/core/admin/files/delete/delete.service.ts index 87cd40901..3d45f0a41 100644 --- a/packages/backend/src/core/admin/files/delete/delete.service.ts +++ b/packages/backend/src/core/admin/files/delete/delete.service.ts @@ -3,10 +3,10 @@ import { eq } from 'drizzle-orm'; import { DeleteAdminFilesArgs } from './dto/delete.args'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { DeleteCoreFilesService } from '../../../files/helpers/delete/delete.service'; import { NotFoundError } from '@/errors'; -import { core_files } from '@/templates/core/admin/database/schema/files'; +import { core_files } from '@/plugins/core/admin/database/schema/files'; @Injectable() export class DeleteAdminFilesService { diff --git a/packages/backend/src/core/admin/files/download/download.controller.ts b/packages/backend/src/core/admin/files/download/download.controller.ts index c641d42ca..b91b089c8 100644 --- a/packages/backend/src/core/admin/files/download/download.controller.ts +++ b/packages/backend/src/core/admin/files/download/download.controller.ts @@ -13,7 +13,7 @@ import { Request, Response } from 'express'; import { InternalAuthorizationCoreSessionsService } from '../../../sessions/authorization/internal/internal_authorization.service'; import { AuthorizationAdminSessionsService } from '../../sessions/authorization/authorization.service'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { ABSOLUTE_PATHS_BACKEND } from '../../../..'; @Controller('files') diff --git a/packages/backend/src/core/admin/files/show/show.service.ts b/packages/backend/src/core/admin/files/show/show.service.ts index 84760e2fc..ab1afa0c5 100644 --- a/packages/backend/src/core/admin/files/show/show.service.ts +++ b/packages/backend/src/core/admin/files/show/show.service.ts @@ -4,12 +4,12 @@ import { and, count, eq, ilike, or } from 'drizzle-orm'; import { ShowAdminFilesArgs } from './dto/show.args'; import { ShowAdminFilesObj } from './dto/show.obj'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { inputPaginationCursor, outputPagination } from '@/functions'; import { core_files, core_files_using, -} from '@/templates/core/admin/database/schema/files'; +} from '@/plugins/core/admin/database/schema/files'; import { SortDirectionEnum } from '@/utils'; @Injectable() diff --git a/packages/backend/src/core/admin/groups/create/create.service.ts b/packages/backend/src/core/admin/groups/create/create.service.ts index 1efd8052c..a2f78d731 100644 --- a/packages/backend/src/core/admin/groups/create/create.service.ts +++ b/packages/backend/src/core/admin/groups/create/create.service.ts @@ -3,12 +3,12 @@ import { Injectable } from '@nestjs/common'; import { ShowAdminGroups } from '../show/dto/show.obj'; import { CreateAdminGroupsArgs } from './dto/create.args'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { ParserTextLanguageCoreHelpersService } from '../../../helpers/text_language/parser/parser.service'; import { core_groups, core_groups_names, -} from '@/templates/core/admin/database/schema/groups'; +} from '@/plugins/core/admin/database/schema/groups'; @Injectable() export class CreateAdminGroupsService { diff --git a/packages/backend/src/core/admin/groups/delete/delete.service.ts b/packages/backend/src/core/admin/groups/delete/delete.service.ts index 832dc7d09..c0db9ac0f 100644 --- a/packages/backend/src/core/admin/groups/delete/delete.service.ts +++ b/packages/backend/src/core/admin/groups/delete/delete.service.ts @@ -3,10 +3,10 @@ import { eq } from 'drizzle-orm'; import { DeleteAdminGroupsArgs } from './dto/delete.args'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { NotFoundError } from '@/errors'; -import { core_users } from '@/templates/core/admin/database/schema/users'; -import { core_groups } from '@/templates/core/admin/database/schema/groups'; +import { core_users } from '@/plugins/core/admin/database/schema/users'; +import { core_groups } from '@/plugins/core/admin/database/schema/groups'; @Injectable() export class DeleteAdminGroupsService { diff --git a/packages/backend/src/core/admin/groups/edit/edit.service.ts b/packages/backend/src/core/admin/groups/edit/edit.service.ts index 37eec9ccf..c2f9fb459 100644 --- a/packages/backend/src/core/admin/groups/edit/edit.service.ts +++ b/packages/backend/src/core/admin/groups/edit/edit.service.ts @@ -4,14 +4,14 @@ import { count, eq } from 'drizzle-orm'; import { EditAdminGroupsArgs } from './dto/edit.args'; import { ShowAdminGroups } from '../show/dto/show.obj'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { ParserTextLanguageCoreHelpersService } from '../../../helpers/text_language/parser/parser.service'; import { NotFoundError } from '@/errors'; import { core_groups, core_groups_names, -} from '@/templates/core/admin/database/schema/groups'; -import { core_users } from '@/templates/core/admin/database/schema/users'; +} from '@/plugins/core/admin/database/schema/groups'; +import { core_users } from '@/plugins/core/admin/database/schema/users'; @Injectable() export class EditAdminGroupsService { diff --git a/packages/backend/src/core/admin/groups/show/show.service.ts b/packages/backend/src/core/admin/groups/show/show.service.ts index fead8180c..875ec2652 100644 --- a/packages/backend/src/core/admin/groups/show/show.service.ts +++ b/packages/backend/src/core/admin/groups/show/show.service.ts @@ -7,11 +7,11 @@ import { ShowAdminGroupsObj } from './dto/show.obj'; import { core_groups, core_groups_names, -} from '@/templates/core/admin/database/schema/groups'; +} from '@/plugins/core/admin/database/schema/groups'; import { inputPaginationCursor, outputPagination } from '@/functions'; -import { core_users } from '@/templates/core/admin/database/schema/users'; +import { core_users } from '@/plugins/core/admin/database/schema/users'; import { SortDirectionEnum } from '@/utils'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; @Injectable() export class ShowAdminGroupsService { diff --git a/packages/backend/src/core/admin/install/create_database/create_database.service.ts b/packages/backend/src/core/admin/install/create_database/create_database.service.ts index 5e413ea09..a130c1088 100644 --- a/packages/backend/src/core/admin/install/create_database/create_database.service.ts +++ b/packages/backend/src/core/admin/install/create_database/create_database.service.ts @@ -1,19 +1,19 @@ import { Injectable } from '@nestjs/common'; import { count } from 'drizzle-orm'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { CustomError } from '@/errors'; -import { core_languages } from '@/templates/core/admin/database/schema/languages'; +import { core_languages } from '@/plugins/core/admin/database/schema/languages'; import { core_groups, core_groups_names, -} from '@/templates/core/admin/database/schema/groups'; -import { core_admin_permissions } from '@/templates/core/admin/database/schema/admins'; +} from '@/plugins/core/admin/database/schema/groups'; +import { core_admin_permissions } from '@/plugins/core/admin/database/schema/admins'; import { core_nav, core_nav_name, -} from '@/templates/core/admin/database/schema/nav'; -import { core_moderators_permissions } from '@/templates/core/admin/database/schema/moderators'; +} from '@/plugins/core/admin/database/schema/nav'; +import { core_moderators_permissions } from '@/plugins/core/admin/database/schema/moderators'; @Injectable() export class CreateDatabaseAdminInstallService { diff --git a/packages/backend/src/core/admin/install/layout/layout.service.ts b/packages/backend/src/core/admin/install/layout/layout.service.ts index 423e7ac5c..0fc80e8fc 100644 --- a/packages/backend/src/core/admin/install/layout/layout.service.ts +++ b/packages/backend/src/core/admin/install/layout/layout.service.ts @@ -6,12 +6,12 @@ import { LayoutAdminInstallObj, } from './dto/layout.obj'; -import { DatabaseService } from '@/database'; -import { core_users } from '@/templates/core/admin/database/schema/users'; -import { core_sessions } from '@/templates/core/admin/database/schema/sessions'; -import { core_admin_sessions } from '@/templates/core/admin/database/schema/admins'; +import { DatabaseService } from '@/utils/database/database.service'; +import { core_users } from '@/plugins/core/admin/database/schema/users'; +import { core_sessions } from '@/plugins/core/admin/database/schema/sessions'; +import { core_admin_sessions } from '@/plugins/core/admin/database/schema/admins'; import { AccessDeniedError } from '@/errors'; -import { core_languages } from '@/templates/core/admin/database/schema/languages'; +import { core_languages } from '@/plugins/core/admin/database/schema/languages'; @Injectable() export class LayoutAdminInstallService { diff --git a/packages/backend/src/core/admin/languages/create/create.service.ts b/packages/backend/src/core/admin/languages/create/create.service.ts index a695931b4..8d6c4e90c 100644 --- a/packages/backend/src/core/admin/languages/create/create.service.ts +++ b/packages/backend/src/core/admin/languages/create/create.service.ts @@ -5,9 +5,9 @@ import { Injectable } from '@nestjs/common'; import { CreateCoreAdminLanguagesArgs } from './dto/create.args'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { ABSOLUTE_PATHS_BACKEND, CustomError } from '../../../..'; -import { core_languages } from '@/templates/core/admin/database/schema/languages'; +import { core_languages } from '@/plugins/core/admin/database/schema/languages'; import { ShowCoreLanguages } from '../../../languages/show/dto/show.obj'; import { setRebuildRequired } from '@/functions/rebuild-required'; diff --git a/packages/backend/src/core/admin/languages/delete/delete.service.ts b/packages/backend/src/core/admin/languages/delete/delete.service.ts index 12cf50bfa..f0cf90c90 100644 --- a/packages/backend/src/core/admin/languages/delete/delete.service.ts +++ b/packages/backend/src/core/admin/languages/delete/delete.service.ts @@ -7,10 +7,10 @@ import { eq } from 'drizzle-orm'; import { DeleteCoreAdminLanguagesArgs } from './dto/delete.args'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { CustomError, NotFoundError } from '@/errors'; import { ABSOLUTE_PATHS_BACKEND } from '../../../..'; -import { core_languages } from '@/templates/core/admin/database/schema/languages'; +import { core_languages } from '@/plugins/core/admin/database/schema/languages'; import { setRebuildRequired } from '@/functions/rebuild-required'; @Injectable() export class DeleteAdminCoreLanguageService { diff --git a/packages/backend/src/core/admin/languages/download/download.service.ts b/packages/backend/src/core/admin/languages/download/download.service.ts index 8d085b1d1..31c5bb9cb 100644 --- a/packages/backend/src/core/admin/languages/download/download.service.ts +++ b/packages/backend/src/core/admin/languages/download/download.service.ts @@ -12,7 +12,7 @@ import { import { DownloadCoreAdminLanguagesArgs } from './dto/download.args'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { User } from '@/decorators'; import { CustomError, NotFoundError } from '@/errors'; import { ABSOLUTE_PATHS_BACKEND } from '../../../..'; diff --git a/packages/backend/src/core/admin/languages/edit/edit.service.ts b/packages/backend/src/core/admin/languages/edit/edit.service.ts index 18625ecc9..30187c20c 100644 --- a/packages/backend/src/core/admin/languages/edit/edit.service.ts +++ b/packages/backend/src/core/admin/languages/edit/edit.service.ts @@ -3,10 +3,10 @@ import { eq } from 'drizzle-orm'; import { EditCoreAdminLanguagesArgs } from './dto/edit.args'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { ShowCoreLanguages } from '../../../languages/show/dto/show.obj'; import { NotFoundError } from '@/errors'; -import { core_languages } from '@/templates/core/admin/database/schema/languages'; +import { core_languages } from '@/plugins/core/admin/database/schema/languages'; @Injectable() export class EditAdminCoreLanguagesService { diff --git a/packages/backend/src/core/admin/languages/update/update.service.ts b/packages/backend/src/core/admin/languages/update/update.service.ts index 237e27efe..00761750b 100644 --- a/packages/backend/src/core/admin/languages/update/update.service.ts +++ b/packages/backend/src/core/admin/languages/update/update.service.ts @@ -8,10 +8,10 @@ import { currentUnixDate, generateRandomString } from 'vitnode-shared'; import { UpdateCoreAdminLanguagesArgs } from './dto/update.args'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { NotFoundError } from '@/errors'; import { ABSOLUTE_PATHS_BACKEND } from '../../../..'; -import { core_languages } from '@/templates/core/admin/database/schema/languages'; +import { core_languages } from '@/plugins/core/admin/database/schema/languages'; import { setRebuildRequired } from '@/functions/rebuild-required'; @Injectable() diff --git a/packages/backend/src/core/admin/members/edit/edit.service.ts b/packages/backend/src/core/admin/members/edit/edit.service.ts index 43d8023c0..235ffe47a 100644 --- a/packages/backend/src/core/admin/members/edit/edit.service.ts +++ b/packages/backend/src/core/admin/members/edit/edit.service.ts @@ -4,8 +4,8 @@ import { eq } from 'drizzle-orm'; import { EditAdminMembersArgs } from './dto/edit.args'; import { EditAdminMembersObj } from './dto/edit.obj'; -import { DatabaseService } from '@/database'; -import { core_users } from '@/templates/core/admin/database/schema/users'; +import { DatabaseService } from '@/utils/database/database.service'; +import { core_users } from '@/plugins/core/admin/database/schema/users'; import { AccessDeniedError, NotFoundError } from '@/errors'; @Injectable() diff --git a/packages/backend/src/core/admin/members/show/show.service.ts b/packages/backend/src/core/admin/members/show/show.service.ts index 993e8e9bc..e8c3a7b95 100644 --- a/packages/backend/src/core/admin/members/show/show.service.ts +++ b/packages/backend/src/core/admin/members/show/show.service.ts @@ -5,8 +5,8 @@ import { ShowAdminMembersObj } from './dto/show.obj'; import { ShowAdminMembersArgs } from './dto/show.args'; import { inputPaginationCursor, outputPagination } from '@/functions'; -import { DatabaseService } from '@/database'; -import { core_users } from '@/templates/core/admin/database/schema/users'; +import { DatabaseService } from '@/utils/database/database.service'; +import { core_users } from '@/plugins/core/admin/database/schema/users'; import { SortDirectionEnum } from '@/utils'; @Injectable() diff --git a/packages/backend/src/core/admin/members/stats/stats.service.ts b/packages/backend/src/core/admin/members/stats/stats.service.ts index a2b737a03..1c1cdd386 100644 --- a/packages/backend/src/core/admin/members/stats/stats.service.ts +++ b/packages/backend/src/core/admin/members/stats/stats.service.ts @@ -3,7 +3,7 @@ import { sql } from 'drizzle-orm'; import { SignUpStatsAdminMembers } from './dto/stats.obj'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; @Injectable() export class StatsAdminMembersService { diff --git a/packages/backend/src/core/admin/metadata/manifest/edit/edit.service.ts b/packages/backend/src/core/admin/metadata/manifest/edit/edit.service.ts index bbc03e8bf..02e823157 100644 --- a/packages/backend/src/core/admin/metadata/manifest/edit/edit.service.ts +++ b/packages/backend/src/core/admin/metadata/manifest/edit/edit.service.ts @@ -8,9 +8,9 @@ import { EditAdminManifestMetadataObj } from './dto/edit.args'; import { ShowAdminManifestMetadataObj } from '../show/dto/show.obj'; import { getManifest } from '../functions'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { ABSOLUTE_PATHS_BACKEND } from '@/index'; -import { core_languages } from '@/templates/core/admin/database/schema/languages'; +import { core_languages } from '@/plugins/core/admin/database/schema/languages'; @Injectable() export class EditAdminManifestMetadataService { diff --git a/packages/backend/src/core/admin/plugins/create/create.service.ts b/packages/backend/src/core/admin/plugins/create/create.service.ts index 07d1015fc..89e69b8a7 100644 --- a/packages/backend/src/core/admin/plugins/create/create.service.ts +++ b/packages/backend/src/core/admin/plugins/create/create.service.ts @@ -8,10 +8,10 @@ import { ShowAdminPlugins } from '../show/dto/show.obj'; import { CreateFilesAdminPluginsService } from '../helpers/files/create/create-files.service'; import { ChangeFilesAdminPluginsService } from '../helpers/files/change/change.service'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { CustomError } from '@/errors'; import { ABSOLUTE_PATHS_BACKEND } from '../../../..'; -import { core_plugins } from '@/templates/core/admin/database/schema/plugins'; +import { core_plugins } from '@/plugins/core/admin/database/schema/plugins'; @Injectable() export class CreateAdminPluginsService { diff --git a/packages/backend/src/core/admin/plugins/delete/contents.ts b/packages/backend/src/core/admin/plugins/delete/contents.ts index 7810ff5a4..b5734b35b 100644 --- a/packages/backend/src/core/admin/plugins/delete/contents.ts +++ b/packages/backend/src/core/admin/plugins/delete/contents.ts @@ -11,7 +11,7 @@ export const removeModuleFromRootSchema = ({ return content .replace(`\n ${name}Module,`, '') - .replace(`\nimport { ${name}Module } from "./${code}/${code}.module";`, ''); + .replace(`\nimport { ${name}Module } from './${code}/${code}.module';`, ''); }; export const removeDatabaseFromService = ({ @@ -26,7 +26,7 @@ export const removeDatabaseFromService = ({ return content .replace(`\n ...table${name},`, '') .replace( - `\nimport table${name} from "../plugins/${code}/admin/database/index";`, + `\nimport table${name} from '@/plugins/${code}/admin/database/index';`, '', ); }; @@ -39,7 +39,7 @@ export const removeLangFromTypes = ({ content: string; }) => { return content.replace( - `\n typeof import("@/plugins/${code}/langs/en.json") &`, + `\n typeof import('@/plugins/${code}/langs/en.json') &`, '', ); }; diff --git a/packages/backend/src/core/admin/plugins/delete/delete.service.ts b/packages/backend/src/core/admin/plugins/delete/delete.service.ts index 0f49657b8..2676542f5 100644 --- a/packages/backend/src/core/admin/plugins/delete/delete.service.ts +++ b/packages/backend/src/core/admin/plugins/delete/delete.service.ts @@ -1,4 +1,5 @@ import * as fs from 'fs'; +import { join } from 'path'; import { Injectable } from '@nestjs/common'; import { eq, sql } from 'drizzle-orm'; @@ -6,11 +7,11 @@ import { eq, sql } from 'drizzle-orm'; import { DeleteAdminPluginsArgs } from './dto/delete.args'; import { ChangeFilesAdminPluginsService } from '../helpers/files/change/change.service'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { CustomError, NotFoundError } from '@/errors'; -import { core_migrations } from '@/templates/core/admin/database/schema/files'; -import { ABSOLUTE_PATHS_BACKEND } from '../../../..'; -import { core_plugins } from '@/templates/core/admin/database/schema/plugins'; +import { core_migrations } from '@/plugins/core/admin/database/schema/files'; +import { ABSOLUTE_PATHS_BACKEND } from '@/index'; +import { core_plugins } from '@/plugins/core/admin/database/schema/plugins'; import { setRebuildRequired } from '@/functions/rebuild-required'; @Injectable() @@ -44,14 +45,19 @@ export class DeleteAdminPluginsService { // Drop tables const tables: { getTables: () => string[] } = await import( - `../../../../${code}/admin/database/functions` + join( + process.cwd(), + 'dist', + 'plugins', + code, + 'admin', + 'database', + 'functions.js', + ) ); - const deleteQueries = tables - .getTables() - .filter(el => !el.endsWith('_relations')) - .map(table => { - return `DROP TABLE IF EXISTS ${table} CASCADE;`; - }); + const deleteQueries = tables.getTables().map(table => { + return `DROP TABLE IF EXISTS ${table} CASCADE;`; + }); try { await this.databaseService.db.execute(sql.raw(deleteQueries.join(' '))); @@ -61,9 +67,12 @@ export class DeleteAdminPluginsService { message: `Error deleting tables for plugin ${code}`, }); } + // Delete migrations await this.databaseService.db .delete(core_migrations) .where(eq(core_migrations.plugin, code)); + + // Change files when delete this.changeFilesService.changeFilesWhenDelete({ code }); const modulePath = ABSOLUTE_PATHS_BACKEND.plugin({ code }).root; diff --git a/packages/backend/src/core/admin/plugins/download/download.service.ts b/packages/backend/src/core/admin/plugins/download/download.service.ts index 5d3c33071..b21db0e6a 100644 --- a/packages/backend/src/core/admin/plugins/download/download.service.ts +++ b/packages/backend/src/core/admin/plugins/download/download.service.ts @@ -12,12 +12,12 @@ import { import { DownloadAdminPluginsArgs } from './dto/download.args'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { CustomError, NotFoundError } from '@/errors'; import { execShellCommand } from '@/functions'; import { User } from '@/decorators'; import { ABSOLUTE_PATHS_BACKEND, PluginInfoJSONType } from '../../../..'; -import { core_plugins } from '@/templates/core/admin/database/schema/plugins'; +import { core_plugins } from '@/plugins/core/admin/database/schema/plugins'; @Injectable() export class DownloadAdminPluginsService { diff --git a/packages/backend/src/core/admin/plugins/edit/edit.service.ts b/packages/backend/src/core/admin/plugins/edit/edit.service.ts index 79e42edf2..f429cf006 100644 --- a/packages/backend/src/core/admin/plugins/edit/edit.service.ts +++ b/packages/backend/src/core/admin/plugins/edit/edit.service.ts @@ -6,9 +6,9 @@ import { eq, ne } from 'drizzle-orm'; import { ShowAdminPlugins } from '../show/dto/show.obj'; import { EditAdminPluginsArgs } from './dto/edit.args'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { CustomError, NotFoundError } from '@/errors'; -import { core_plugins } from '@/templates/core/admin/database/schema/plugins'; +import { core_plugins } from '@/plugins/core/admin/database/schema/plugins'; import { ABSOLUTE_PATHS_BACKEND, ConfigPlugin } from '../../../..'; @Injectable() diff --git a/packages/backend/src/core/admin/plugins/files/files.service.ts b/packages/backend/src/core/admin/plugins/files/files.service.ts index 56fae4b2c..2e176971b 100644 --- a/packages/backend/src/core/admin/plugins/files/files.service.ts +++ b/packages/backend/src/core/admin/plugins/files/files.service.ts @@ -5,7 +5,7 @@ import { Injectable } from '@nestjs/common'; import { FilesAdminPluginsArgs } from './dto/files.args'; import { FilesAdminPluginsObj } from './dto/files.obj'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { NotFoundError } from '@/errors'; import { ABSOLUTE_PATHS_BACKEND } from '../../../..'; diff --git a/packages/backend/src/core/admin/plugins/helpers/files/change/change.service.ts b/packages/backend/src/core/admin/plugins/helpers/files/change/change.service.ts index c48309829..9401ae8c8 100644 --- a/packages/backend/src/core/admin/plugins/helpers/files/change/change.service.ts +++ b/packages/backend/src/core/admin/plugins/helpers/files/change/change.service.ts @@ -66,7 +66,7 @@ export class ChangeFilesAdminPluginsService { condition: content => !content.includes(`./${code}/${code}.module`), }, { - path: join(ABSOLUTE_PATHS_BACKEND.backend, 'database', 'schema.ts'), + path: join(ABSOLUTE_PATHS_BACKEND.backend, 'database.ts'), content: content => changeDatabaseService({ content, @@ -100,7 +100,7 @@ export class ChangeFilesAdminPluginsService { condition: () => true, }, { - path: join(ABSOLUTE_PATHS_BACKEND.backend, 'database', 'schema.ts'), + path: join(ABSOLUTE_PATHS_BACKEND.backend, 'database.ts'), content: content => removeDatabaseFromService({ content, diff --git a/packages/backend/src/core/admin/plugins/helpers/files/change/contents.ts b/packages/backend/src/core/admin/plugins/helpers/files/change/contents.ts index 9130c6d6c..7e99e5295 100644 --- a/packages/backend/src/core/admin/plugins/helpers/files/change/contents.ts +++ b/packages/backend/src/core/admin/plugins/helpers/files/change/contents.ts @@ -14,7 +14,7 @@ export const changeModuleRootSchema = ({ return content .replace( '// ! === IMPORT ===', - `import { ${name}Module } from "./${code}/${code}.module";\n// ! === IMPORT ===`, + `import { ${name}Module } from './${code}/${code}.module';\n// ! === IMPORT ===`, ) .replace( '\n // ! === MODULE ===', @@ -36,7 +36,7 @@ export const changeDatabaseService = ({ return content .replace( '// ! === IMPORT ===', - `import table${name} from "../plugins/${code}/admin/database/index";\n// ! === IMPORT ===`, + `import table${name} from '@/plugins/${code}/admin/database/index';\n// ! === IMPORT ===`, ) .replace( '\n // ! === MODULE ===', @@ -53,6 +53,6 @@ export const changeLangTypes = ({ }) => { return content.replace( '// ! === IMPORT ===', - `typeof import("@/plugins/${code}/langs/en.json") &\n // ! === IMPORT ===`, + `typeof import('@/plugins/${code}/langs/en.json') &\n // ! === IMPORT ===`, ); }; diff --git a/packages/backend/src/core/admin/plugins/helpers/files/create/contents.ts b/packages/backend/src/core/admin/plugins/helpers/files/create/contents.ts index 50713190c..a97663ec3 100644 --- a/packages/backend/src/core/admin/plugins/helpers/files/create/contents.ts +++ b/packages/backend/src/core/admin/plugins/helpers/files/create/contents.ts @@ -4,12 +4,12 @@ import { changeCodePluginToCapitalLetters } from '../../change-code-plugin-to-ca export const createModuleSchema = ({ code }: { code: string }) => { const name = changeCodePluginToCapitalLetters(code); - return `import { Module } from "@nestjs/common"; + return `import { Module } from '@nestjs/common'; -import { Admin${name}Module } from "./admin/admin.module"; +import { Admin${name}Module } from './admin/admin.module'; @Module({ - imports: [Admin${name}Module] + imports: [Admin${name}Module], }) export class ${name}Module {} `; @@ -18,7 +18,7 @@ export class ${name}Module {} export const createModuleAdminSchema = ({ code }: { code: string }) => { const name = changeCodePluginToCapitalLetters(code); - return `import { Module } from "@nestjs/common"; + return `import { Module } from '@nestjs/common'; @Module({}) export class Admin${name}Module {} @@ -27,7 +27,7 @@ export class Admin${name}Module {} export const createFunctionsDatabase = () => { return `// ! DO NOT REMOVE, MODIFY OR MOVE THIS FILE!!! -import { default as tables } from "./index"; +import { default as tables } from './index'; export const getTables = () => { return Object.keys(tables); @@ -37,19 +37,26 @@ export const getTables = () => { export const createConfigForDrizzle = ({ code }: { code: string }) => { return `// ! DO NOT REMOVE, MODIFY OR MOVE THIS FILE!!! -import { defineConfig } from "drizzle-kit"; +import { defineConfig } from 'drizzle-kit'; -import { DATABASE_ENVS } from "@/database/client"; +import { DATABASE_ENVS } from '@/database'; export default defineConfig({ - dialect: "postgresql", + dialect: 'postgresql', dbCredentials: DATABASE_ENVS, - schema: "./plugins/${code}/admin/database/schema/*.ts", - out: "./plugins/${code}/admin/database/migrations/" + schema: './plugins/${code}/admin/database/schema/*.ts', + out: './plugins/${code}/admin/database/migrations/', }); `; }; +export const createDefaultPage = ({ code }: { code: string }) => { + return `export default function DefaultPage() { + return
Default Page for ${code}
; +} +`; +}; + export const createInfoJSON = ({ allow_default, author, diff --git a/packages/backend/src/core/admin/plugins/helpers/files/create/create-files.service.ts b/packages/backend/src/core/admin/plugins/helpers/files/create/create-files.service.ts index a633d3d29..776c914cd 100644 --- a/packages/backend/src/core/admin/plugins/helpers/files/create/create-files.service.ts +++ b/packages/backend/src/core/admin/plugins/helpers/files/create/create-files.service.ts @@ -5,6 +5,7 @@ import { Injectable } from '@nestjs/common'; import { createConfigForDrizzle, + createDefaultPage, createFunctionsDatabase, createInfoJSON, createModuleAdminSchema, @@ -41,6 +42,15 @@ export class CreateFilesAdminPluginsService { }, ], }, + { + path: ABSOLUTE_PATHS_BACKEND.plugin({ code }).frontend.templates, + files: [ + { + name: 'default-page.tsx', + content: createDefaultPage({ code }), + }, + ], + }, { path: ABSOLUTE_PATHS_BACKEND.plugin({ code }).admin, files: [ diff --git a/packages/backend/src/core/admin/plugins/show/show.service.ts b/packages/backend/src/core/admin/plugins/show/show.service.ts index ac69e57a8..054337382 100644 --- a/packages/backend/src/core/admin/plugins/show/show.service.ts +++ b/packages/backend/src/core/admin/plugins/show/show.service.ts @@ -5,9 +5,9 @@ import { ShowAdminPluginsArgs } from './dto/show.args'; import { ShowAdminPluginsObj } from './dto/show.obj'; import { inputPaginationCursor, outputPagination } from '@/functions'; -import { core_plugins } from '@/templates/core/admin/database/schema/plugins'; +import { core_plugins } from '@/plugins/core/admin/database/schema/plugins'; import { SortDirectionEnum } from '@/utils'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; @Injectable() export class ShowAdminPluginsService { diff --git a/packages/backend/src/core/admin/plugins/upload/upload.service.ts b/packages/backend/src/core/admin/plugins/upload/upload.service.ts index cd5690ee0..d259e5d9d 100644 --- a/packages/backend/src/core/admin/plugins/upload/upload.service.ts +++ b/packages/backend/src/core/admin/plugins/upload/upload.service.ts @@ -10,8 +10,8 @@ import { ShowAdminPlugins } from '../show/dto/show.obj'; import { UploadAdminPluginsArgs } from './dto/upload.args'; import { ChangeFilesAdminPluginsService } from '../helpers/files/change/change.service'; -import { core_plugins } from '@/templates/core/admin/database/schema/plugins'; -import { DatabaseService } from '@/database'; +import { core_plugins } from '@/plugins/core/admin/database/schema/plugins'; +import { DatabaseService } from '@/utils/database/database.service'; import { ABSOLUTE_PATHS_BACKEND, ConfigPlugin, diff --git a/packages/backend/src/core/admin/sessions/authorization/authorization.service.ts b/packages/backend/src/core/admin/sessions/authorization/authorization.service.ts index dd5b8df6c..2e5c55ff7 100644 --- a/packages/backend/src/core/admin/sessions/authorization/authorization.service.ts +++ b/packages/backend/src/core/admin/sessions/authorization/authorization.service.ts @@ -12,7 +12,7 @@ import { NavAdminPluginsAuthorization, } from './dto/authorization.obj'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { DeviceSignInCoreSessionsService } from '../../../sessions/sign_in/device.service'; import { ABSOLUTE_PATHS_BACKEND, @@ -21,7 +21,7 @@ import { Ctx, } from '@/index'; import { AuthorizationCurrentUserObj } from '../../../sessions/authorization/dto/authorization.obj'; -import { core_sessions_known_devices } from '@/templates/core/admin/database/schema/sessions'; +import { core_sessions_known_devices } from '@/plugins/core/admin/database/schema/sessions'; import { getUserAgentData, getUserIp } from '@/functions'; @Injectable() diff --git a/packages/backend/src/core/admin/sessions/sign_out/sign_out.service.ts b/packages/backend/src/core/admin/sessions/sign_out/sign_out.service.ts index b5f86a2ba..84776a3e7 100644 --- a/packages/backend/src/core/admin/sessions/sign_out/sign_out.service.ts +++ b/packages/backend/src/core/admin/sessions/sign_out/sign_out.service.ts @@ -2,9 +2,9 @@ import { Injectable } from '@nestjs/common'; import { eq } from 'drizzle-orm'; import { ConfigService } from '@nestjs/config'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { Ctx } from '@/utils'; -import { core_admin_sessions } from '@/templates/core/admin/database/schema/admins'; +import { core_admin_sessions } from '@/plugins/core/admin/database/schema/admins'; @Injectable() export class SignOutAdminSessionsService { diff --git a/packages/backend/src/core/admin/settings/main/edit/edit.service.ts b/packages/backend/src/core/admin/settings/main/edit/edit.service.ts index 4350cb619..fd0328eb6 100644 --- a/packages/backend/src/core/admin/settings/main/edit/edit.service.ts +++ b/packages/backend/src/core/admin/settings/main/edit/edit.service.ts @@ -7,14 +7,14 @@ import { eq } from 'drizzle-orm'; import { EditAdminMainSettingsArgs } from './dto/edit.args'; import { EditAdminSettingsObj } from './dto/edit.obj'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { ABSOLUTE_PATHS_BACKEND, ConfigType, configPath, getConfigFile, } from '@/index'; -import { core_languages } from '@/templates/core/admin/database/schema/languages'; +import { core_languages } from '@/plugins/core/admin/database/schema/languages'; import { ManifestWithLang } from '@/core/settings/settings.module'; @Injectable() diff --git a/packages/backend/src/core/admin/staff/administrators/create/create.service.ts b/packages/backend/src/core/admin/staff/administrators/create/create.service.ts index 66c2d7cc3..fe5002267 100644 --- a/packages/backend/src/core/admin/staff/administrators/create/create.service.ts +++ b/packages/backend/src/core/admin/staff/administrators/create/create.service.ts @@ -4,8 +4,8 @@ import { ShowAdminStaffAdministrators } from '../show/dto/show.obj'; import { CreateAdminStaffAdministratorsArgs } from './dto/create.args'; import { CustomError } from '@/errors'; -import { DatabaseService } from '@/database'; -import { core_admin_permissions } from '@/templates/core/admin/database/schema/admins'; +import { DatabaseService } from '@/utils/database/database.service'; +import { core_admin_permissions } from '@/plugins/core/admin/database/schema/admins'; @Injectable() export class CreateAdminStaffAdministratorsService { diff --git a/packages/backend/src/core/admin/staff/administrators/delete/delete.service.ts b/packages/backend/src/core/admin/staff/administrators/delete/delete.service.ts index e23923c0c..3f005961b 100644 --- a/packages/backend/src/core/admin/staff/administrators/delete/delete.service.ts +++ b/packages/backend/src/core/admin/staff/administrators/delete/delete.service.ts @@ -3,9 +3,9 @@ import { eq } from 'drizzle-orm'; import { DeleteAdminStaffAdministratorsArgs } from './dto/delete.args'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { CustomError, NotFoundError } from '@/errors'; -import { core_admin_permissions } from '@/templates/core/admin/database/schema/admins'; +import { core_admin_permissions } from '@/plugins/core/admin/database/schema/admins'; @Injectable() export class DeleteAdminStaffAdministratorsService { diff --git a/packages/backend/src/core/admin/staff/administrators/show/show.service.ts b/packages/backend/src/core/admin/staff/administrators/show/show.service.ts index 59764bd49..c1961deed 100644 --- a/packages/backend/src/core/admin/staff/administrators/show/show.service.ts +++ b/packages/backend/src/core/admin/staff/administrators/show/show.service.ts @@ -4,9 +4,9 @@ import { count } from 'drizzle-orm'; import { ShowAdminStaffAdministratorsArgs } from './dto/show.args'; import { ShowAdminStaffAdministratorsObj } from './dto/show.obj'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { inputPaginationCursor, outputPagination } from '@/functions'; -import { core_admin_permissions } from '@/templates/core/admin/database/schema/admins'; +import { core_admin_permissions } from '@/plugins/core/admin/database/schema/admins'; import { SortDirectionEnum } from '@/utils'; @Injectable() diff --git a/packages/backend/src/core/admin/staff/moderators/create/create.service.ts b/packages/backend/src/core/admin/staff/moderators/create/create.service.ts index d2ff269fe..966b223e0 100644 --- a/packages/backend/src/core/admin/staff/moderators/create/create.service.ts +++ b/packages/backend/src/core/admin/staff/moderators/create/create.service.ts @@ -3,9 +3,9 @@ import { Injectable } from '@nestjs/common'; import { ShowAdminStaffModerators } from '../show/dto/show.obj'; import { CreateAdminStaffModeratorsArgs } from './dto/create.args'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { CustomError } from '@/errors'; -import { core_moderators_permissions } from '@/templates/core/admin/database/schema/moderators'; +import { core_moderators_permissions } from '@/plugins/core/admin/database/schema/moderators'; @Injectable() export class CreateAdminStaffModeratorsService { diff --git a/packages/backend/src/core/admin/staff/moderators/delete/delete.service.ts b/packages/backend/src/core/admin/staff/moderators/delete/delete.service.ts index d2f662e72..9e971af56 100644 --- a/packages/backend/src/core/admin/staff/moderators/delete/delete.service.ts +++ b/packages/backend/src/core/admin/staff/moderators/delete/delete.service.ts @@ -3,9 +3,9 @@ import { eq } from 'drizzle-orm'; import { DeleteAdminStaffModeratorsArgs } from './dto/delete.args'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { CustomError } from '@/errors'; -import { core_moderators_permissions } from '@/templates/core/admin/database/schema/moderators'; +import { core_moderators_permissions } from '@/plugins/core/admin/database/schema/moderators'; @Injectable() export class DeleteAdminStaffModeratorsService { diff --git a/packages/backend/src/core/admin/staff/moderators/show/show.service.ts b/packages/backend/src/core/admin/staff/moderators/show/show.service.ts index 7022b26fd..c844b3c32 100644 --- a/packages/backend/src/core/admin/staff/moderators/show/show.service.ts +++ b/packages/backend/src/core/admin/staff/moderators/show/show.service.ts @@ -4,9 +4,9 @@ import { count } from 'drizzle-orm'; import { ShowAdminStaffModeratorsArgs } from './dto/show.args'; import { ShowAdminStaffModeratorsObj } from './dto/show.obj'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { inputPaginationCursor, outputPagination } from '@/functions'; -import { core_moderators_permissions } from '@/templates/core/admin/database/schema/moderators'; +import { core_moderators_permissions } from '@/plugins/core/admin/database/schema/moderators'; import { SortDirectionEnum } from '@/utils'; @Injectable() diff --git a/packages/backend/src/core/admin/styles/nav/change_position/change_position.service.ts b/packages/backend/src/core/admin/styles/nav/change_position/change_position.service.ts index 2189431c0..a10b13cfa 100644 --- a/packages/backend/src/core/admin/styles/nav/change_position/change_position.service.ts +++ b/packages/backend/src/core/admin/styles/nav/change_position/change_position.service.ts @@ -3,9 +3,9 @@ import { eq } from 'drizzle-orm'; import { ChangePositionAdminNavStylesArgs } from './dto/change_position.args'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { NotFoundError } from '@/errors'; -import { core_nav } from '@/templates/core/admin/database/schema/nav'; +import { core_nav } from '@/plugins/core/admin/database/schema/nav'; @Injectable() export class ChangePositionAdminNavStylesService { diff --git a/packages/backend/src/core/admin/styles/nav/create/create.service.ts b/packages/backend/src/core/admin/styles/nav/create/create.service.ts index ac6ba28a3..6b194352b 100644 --- a/packages/backend/src/core/admin/styles/nav/create/create.service.ts +++ b/packages/backend/src/core/admin/styles/nav/create/create.service.ts @@ -2,12 +2,12 @@ import { Injectable } from '@nestjs/common'; import { CreateAdminNavStylesArgs } from './dto/create.args'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { core_nav, core_nav_description, core_nav_name, -} from '@/templates/core/admin/database/schema/nav'; +} from '@/plugins/core/admin/database/schema/nav'; import { ParserTextLanguageCoreHelpersService } from '@/core/helpers/text_language/parser/parser.service'; import { ShowCoreNav } from '@/core/nav/show/dto/show.obj'; diff --git a/packages/backend/src/core/admin/styles/nav/delete/delete.service.ts b/packages/backend/src/core/admin/styles/nav/delete/delete.service.ts index 90ba5984c..a7372be0f 100644 --- a/packages/backend/src/core/admin/styles/nav/delete/delete.service.ts +++ b/packages/backend/src/core/admin/styles/nav/delete/delete.service.ts @@ -3,13 +3,13 @@ import { eq } from 'drizzle-orm'; import { DeleteAdminNavStylesArgs } from './dto/delete.args'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { NotFoundError } from '@/errors'; import { core_nav, core_nav_description, core_nav_name, -} from '@/templates/core/admin/database/schema/nav'; +} from '@/plugins/core/admin/database/schema/nav'; import { ParserTextLanguageCoreHelpersService } from '@/core/helpers/text_language/parser/parser.service'; @Injectable() diff --git a/packages/backend/src/core/admin/styles/nav/edit/edit.service.ts b/packages/backend/src/core/admin/styles/nav/edit/edit.service.ts index de02a499e..a3bd206d9 100644 --- a/packages/backend/src/core/admin/styles/nav/edit/edit.service.ts +++ b/packages/backend/src/core/admin/styles/nav/edit/edit.service.ts @@ -3,13 +3,13 @@ import { eq } from 'drizzle-orm'; import { EditAdminNavStylesArgs } from './dto/edit.args'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { NotFoundError } from '@/errors'; import { core_nav, core_nav_description, core_nav_name, -} from '@/templates/core/admin/database/schema/nav'; +} from '@/plugins/core/admin/database/schema/nav'; import { ParserTextLanguageCoreHelpersService } from '@/core/helpers/text_language/parser/parser.service'; import { ShowCoreNav } from '@/core/nav/show/dto/show.obj'; diff --git a/packages/backend/src/core/editor/delete/delete.service.ts b/packages/backend/src/core/editor/delete/delete.service.ts index 74c3ff507..7a724e81a 100644 --- a/packages/backend/src/core/editor/delete/delete.service.ts +++ b/packages/backend/src/core/editor/delete/delete.service.ts @@ -4,13 +4,13 @@ import { count, eq } from 'drizzle-orm'; import { DeleteCoreEditorArgs } from './dto/delete.args'; import { DeleteCoreFilesService } from '../../files/helpers/delete/delete.service'; -import { DatabaseService } from '../../../database'; +import { DatabaseService } from '@/utils/database/database.service'; import { User } from '../../../decorators'; import { AccessDeniedError } from '../../../errors'; import { core_files, core_files_using, -} from '../../../templates/core/admin/database/schema/files'; +} from '../../../plugins/core/admin/database/schema/files'; @Injectable() export class DeleteCoreEditorService { diff --git a/packages/backend/src/core/editor/upload/upload.service.ts b/packages/backend/src/core/editor/upload/upload.service.ts index 3b0f15eef..f9e5993ce 100644 --- a/packages/backend/src/core/editor/upload/upload.service.ts +++ b/packages/backend/src/core/editor/upload/upload.service.ts @@ -12,10 +12,10 @@ import { } from '../../files/helpers/upload/helpers'; import { UploadCoreFilesArgs } from '../../files/helpers/upload/dto/upload.args'; import { ShowCoreFiles } from '../../files/show/dto/show.obj'; -import { DatabaseService } from '../../../database'; +import { DatabaseService } from '@/utils/database/database.service'; import { User } from '../../../decorators'; import { AccessDeniedError } from '../../../errors'; -import { core_files } from '../../../templates/core/admin/database/schema/files'; +import { core_files } from '../../../plugins/core/admin/database/schema/files'; import { getConfigFile } from '../../../providers/config'; interface GetFilesAfterUploadArgs extends UploadCoreEditorArgs { diff --git a/packages/backend/src/core/files/download/download.controller.ts b/packages/backend/src/core/files/download/download.controller.ts index d5e76c9a2..0049975be 100644 --- a/packages/backend/src/core/files/download/download.controller.ts +++ b/packages/backend/src/core/files/download/download.controller.ts @@ -11,7 +11,7 @@ import { } from '@nestjs/common'; import { Response } from 'express'; -import { DatabaseService } from '../../../database'; +import { DatabaseService } from '@/utils/database/database.service'; import { ABSOLUTE_PATHS_BACKEND } from '../../..'; @Controller('secure_files') diff --git a/packages/backend/src/core/files/files.cron.ts b/packages/backend/src/core/files/files.cron.ts index 4f8a8b2ad..42f046f34 100644 --- a/packages/backend/src/core/files/files.cron.ts +++ b/packages/backend/src/core/files/files.cron.ts @@ -4,11 +4,11 @@ import { desc, eq, lt, sql } from 'drizzle-orm'; import { DeleteCoreFilesService } from './helpers/delete/delete.service'; -import { DatabaseService } from '../../database'; import { core_files, core_files_using, -} from '../../templates/core/admin/database/schema/files'; +} from '../../plugins/core/admin/database/schema/files'; +import { DatabaseService } from '@/utils'; @Injectable() export class CoreFilesCron { diff --git a/packages/backend/src/core/files/helpers/upload/upload.service.ts b/packages/backend/src/core/files/helpers/upload/upload.service.ts index d3a949ca5..bd3377340 100644 --- a/packages/backend/src/core/files/helpers/upload/upload.service.ts +++ b/packages/backend/src/core/files/helpers/upload/upload.service.ts @@ -15,7 +15,7 @@ import { UploadCoreFilesArgs } from './dto/upload.args'; import { UploadCoreFilesObj } from './dto/upload.obj'; import { HelpersUploadCoreFilesService, acceptMimeTypeImage } from './helpers'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { CustomError } from '@/errors'; import { ABSOLUTE_PATHS_BACKEND } from '../../../..'; diff --git a/packages/backend/src/core/files/show/show.service.ts b/packages/backend/src/core/files/show/show.service.ts index 54be3d2e0..9411572e2 100644 --- a/packages/backend/src/core/files/show/show.service.ts +++ b/packages/backend/src/core/files/show/show.service.ts @@ -4,12 +4,12 @@ import { and, count, eq, ilike, or } from 'drizzle-orm'; import { ShowCoreFilesArgs } from './dto/show.args'; import { ShowCoreFilesObj } from './dto/show.obj'; -import { DatabaseService } from '../../../database'; +import { DatabaseService } from '@/utils/database/database.service'; import { inputPaginationCursor, outputPagination } from '../../../functions'; import { core_files, core_files_using, -} from '../../../templates/core/admin/database/schema/files'; +} from '../../../plugins/core/admin/database/schema/files'; import { User } from '../../../decorators'; import { SortDirectionEnum } from '../../../utils'; diff --git a/packages/backend/src/core/helpers/text_language/parser/helpers.service.ts b/packages/backend/src/core/helpers/text_language/parser/helpers.service.ts index 5b3bc3a56..a2ae773f6 100644 --- a/packages/backend/src/core/helpers/text_language/parser/helpers.service.ts +++ b/packages/backend/src/core/helpers/text_language/parser/helpers.service.ts @@ -1,8 +1,8 @@ import { Injectable } from '@nestjs/common'; import { eq } from 'drizzle-orm'; -import { DatabaseService } from '@/database'; -import { core_files_using } from '@/templates/core/admin/database/schema/files'; +import { DatabaseService } from '@/utils/database/database.service'; +import { core_files_using } from '@/plugins/core/admin/database/schema/files'; interface TextLanguageJSONContentType { type: string; attrs?: { id: number }; diff --git a/packages/backend/src/core/helpers/text_language/parser/parser.service.ts b/packages/backend/src/core/helpers/text_language/parser/parser.service.ts index 610c01f6a..d674118f3 100644 --- a/packages/backend/src/core/helpers/text_language/parser/parser.service.ts +++ b/packages/backend/src/core/helpers/text_language/parser/parser.service.ts @@ -8,7 +8,7 @@ import { } from './helpers.service'; import { TextLanguageInput } from '@/utils'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { CustomError } from '@/errors'; interface Args { diff --git a/packages/backend/src/core/languages/show/show.service.ts b/packages/backend/src/core/languages/show/show.service.ts index d4cadcdd8..e7f4f7b52 100644 --- a/packages/backend/src/core/languages/show/show.service.ts +++ b/packages/backend/src/core/languages/show/show.service.ts @@ -4,9 +4,9 @@ import { and, count, ilike } from 'drizzle-orm'; import { ShowCoreLanguagesArgs } from './dto/show.args'; import { ShowCoreLanguagesObj } from './dto/show.obj'; -import { DatabaseService } from '../../../database'; +import { DatabaseService } from '@/utils/database/database.service'; import { inputPaginationCursor, outputPagination } from '../../../functions'; -import { core_languages } from '../../../templates/core/admin/database/schema/languages'; +import { core_languages } from '../../../plugins/core/admin/database/schema/languages'; import { SortDirectionEnum } from '../../../utils'; @Injectable() diff --git a/packages/backend/src/core/members/avatar/delete/delete.service.ts b/packages/backend/src/core/members/avatar/delete/delete.service.ts index bea1567fd..8a96c1759 100644 --- a/packages/backend/src/core/members/avatar/delete/delete.service.ts +++ b/packages/backend/src/core/members/avatar/delete/delete.service.ts @@ -2,9 +2,9 @@ import { Injectable } from '@nestjs/common'; import { eq } from 'drizzle-orm'; import { DeleteCoreFilesService } from '../../../files/helpers/delete/delete.service'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { User } from '@/decorators'; -import { core_files_avatars } from '@/templates/core/admin/database/schema/users'; +import { core_files_avatars } from '@/plugins/core/admin/database/schema/users'; @Injectable() export class DeleteAvatarCoreMembersService { diff --git a/packages/backend/src/core/members/avatar/upload/upload.service.ts b/packages/backend/src/core/members/avatar/upload/upload.service.ts index ea6400c16..832c9da00 100644 --- a/packages/backend/src/core/members/avatar/upload/upload.service.ts +++ b/packages/backend/src/core/members/avatar/upload/upload.service.ts @@ -6,9 +6,9 @@ import { UploadAvatarCoreMembersObj } from './dto/upload.obj'; import { UploadCoreFilesService } from '../../../files/helpers/upload/upload.service'; import { DeleteCoreFilesService } from '../../../files/helpers/delete/delete.service'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { User } from '@/decorators'; -import { core_files_avatars } from '@/templates/core/admin/database/schema/users'; +import { core_files_avatars } from '@/plugins/core/admin/database/schema/users'; import { CustomError } from '@/errors'; @Injectable() diff --git a/packages/backend/src/core/members/delete/delete.service.ts b/packages/backend/src/core/members/delete/delete.service.ts index 2c3eb3a6f..ca08543f0 100644 --- a/packages/backend/src/core/members/delete/delete.service.ts +++ b/packages/backend/src/core/members/delete/delete.service.ts @@ -3,8 +3,8 @@ import { eq } from 'drizzle-orm'; import { DeleteCoreMembersArgs } from './dto/delete.args'; -import { core_users } from '../../../templates/core/admin/database/schema/users'; -import { DatabaseService } from '../../../database'; +import { core_users } from '../../../plugins/core/admin/database/schema/users'; +import { DatabaseService } from '@/utils/database/database.service'; import { AccessDeniedError, NotFoundError } from '../../../errors'; @Injectable() diff --git a/packages/backend/src/core/members/reset_password/change_password/change_password.service.ts b/packages/backend/src/core/members/reset_password/change_password/change_password.service.ts index d63001e55..dd4f3aa71 100644 --- a/packages/backend/src/core/members/reset_password/change_password/change_password.service.ts +++ b/packages/backend/src/core/members/reset_password/change_password/change_password.service.ts @@ -4,13 +4,13 @@ import { eq } from 'drizzle-orm'; import { ChangePasswordCoreMembersArgs } from './dto/change_password.args'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { User } from '@/decorators'; import { encryptPassword } from '@/core/sessions/encrypt_password'; import { core_users, core_users_pass_reset, -} from '@/templates/core/admin/database/schema/users'; +} from '@/plugins/core/admin/database/schema/users'; @Injectable() export class ChangePasswordCoreMembersService { diff --git a/packages/backend/src/core/members/reset_password/create_key/create_key.service.ts b/packages/backend/src/core/members/reset_password/create_key/create_key.service.ts index be4ef2acf..b9143459a 100644 --- a/packages/backend/src/core/members/reset_password/create_key/create_key.service.ts +++ b/packages/backend/src/core/members/reset_password/create_key/create_key.service.ts @@ -6,9 +6,9 @@ import { ConfigService } from '@nestjs/config'; import { CreateKeyResetPasswordCoreMembersArgs } from './dto/create_key.args'; import { ContentCreateKeyEmail } from './_email/content'; -import { DatabaseService } from '@/database/database.service'; +import { DatabaseService } from '@/utils/database/database.service'; import { NotFoundError } from '@/errors'; -import { core_users_pass_reset } from '@/templates/core/admin/database/schema/users'; +import { core_users_pass_reset } from '@/plugins/core/admin/database/schema/users'; import { SendAdminEmailService } from '../../../admin/email/send/send.service'; import { EmailHelpersServiceType, getTranslationForEmail } from '@/providers'; diff --git a/packages/backend/src/core/members/show/show.service.ts b/packages/backend/src/core/members/show/show.service.ts index 684dfa250..62702b95b 100644 --- a/packages/backend/src/core/members/show/show.service.ts +++ b/packages/backend/src/core/members/show/show.service.ts @@ -4,9 +4,9 @@ import { and, count, eq, ilike, or } from 'drizzle-orm'; import { ShowCoreMembersObj } from './dto/show.obj'; import { ShowCoreMembersArgs } from './dto/show.args'; -import { DatabaseService } from '../../../database'; +import { DatabaseService } from '@/utils/database/database.service'; import { inputPaginationCursor, outputPagination } from '../../../functions'; -import { core_users } from '../../../templates/core/admin/database/schema/users'; +import { core_users } from '../../../plugins/core/admin/database/schema/users'; import { SortDirectionEnum } from '../../../utils'; @Injectable() diff --git a/packages/backend/src/core/middleware/middleware.cron.ts b/packages/backend/src/core/middleware/middleware.cron.ts index 8eb5ddc58..602c9b21a 100644 --- a/packages/backend/src/core/middleware/middleware.cron.ts +++ b/packages/backend/src/core/middleware/middleware.cron.ts @@ -3,8 +3,8 @@ import { Cron, CronExpression } from '@nestjs/schedule'; import { lte } from 'drizzle-orm'; import { ConfigService } from '@nestjs/config'; -import { DatabaseService } from '../../database'; -import { core_sessions_known_devices } from '../../templates/core/admin/database/schema/sessions'; +import { core_sessions_known_devices } from '../../plugins/core/admin/database/schema/sessions'; +import { DatabaseService } from '@/utils'; @Injectable() export class CoreMiddlewareCron { diff --git a/packages/backend/src/core/nav/show/show.service.ts b/packages/backend/src/core/nav/show/show.service.ts index 34b8e695d..8afa1458a 100644 --- a/packages/backend/src/core/nav/show/show.service.ts +++ b/packages/backend/src/core/nav/show/show.service.ts @@ -4,9 +4,9 @@ import { and, count, eq } from 'drizzle-orm'; import { ShowCoreNavArgs } from './dto/show.args'; import { ShowCoreNavObj } from './dto/show.obj'; -import { DatabaseService } from '../../../database'; +import { DatabaseService } from '@/utils/database/database.service'; import { inputPaginationCursor, outputPagination } from '../../../functions'; -import { core_nav } from '../../../templates/core/admin/database/schema/nav'; +import { core_nav } from '../../../plugins/core/admin/database/schema/nav'; import { SortDirectionEnum } from '../../../utils'; @Injectable() diff --git a/packages/backend/src/core/plugins/show/show.service.ts b/packages/backend/src/core/plugins/show/show.service.ts index 5ab04c93b..a266d35e7 100644 --- a/packages/backend/src/core/plugins/show/show.service.ts +++ b/packages/backend/src/core/plugins/show/show.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import { ShowCorePluginsObj } from './dto/show.obj'; -import { DatabaseService } from '../../../database'; +import { DatabaseService } from '@/utils/database/database.service'; @Injectable() export class ShowCorePluginsService { diff --git a/packages/backend/src/core/sessions/authorization/authorization.service.ts b/packages/backend/src/core/sessions/authorization/authorization.service.ts index 77ad78eba..1953648e9 100644 --- a/packages/backend/src/core/sessions/authorization/authorization.service.ts +++ b/packages/backend/src/core/sessions/authorization/authorization.service.ts @@ -4,8 +4,8 @@ import { eq, sum } from 'drizzle-orm'; import { InternalAuthorizationCoreSessionsService } from './internal/internal_authorization.service'; import { AuthorizationCoreSessionsObj } from './dto/authorization.obj'; -import { DatabaseService } from '../../../database'; -import { core_files } from '../../../templates/core/admin/database/schema/files'; +import { DatabaseService } from '@/utils/database/database.service'; +import { core_files } from '../../../plugins/core/admin/database/schema/files'; import { Ctx } from '../../../utils'; @Injectable() diff --git a/packages/backend/src/core/sessions/authorization/internal/internal_authorization.service.ts b/packages/backend/src/core/sessions/authorization/internal/internal_authorization.service.ts index 4a5a41311..2b71967d0 100644 --- a/packages/backend/src/core/sessions/authorization/internal/internal_authorization.service.ts +++ b/packages/backend/src/core/sessions/authorization/internal/internal_authorization.service.ts @@ -5,12 +5,12 @@ import { eq } from 'drizzle-orm'; import { currentUnixDate } from 'vitnode-shared'; import { DeviceSignInCoreSessionsService } from '../../sign_in/device.service'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { User } from '@/decorators'; import { Ctx } from '@/utils'; import { AccessDeniedError } from '@/errors'; -import { core_users } from '@/templates/core/admin/database/schema/users'; -import { core_sessions_known_devices } from '@/templates/core/admin/database/schema/sessions'; +import { core_users } from '@/plugins/core/admin/database/schema/users'; +import { core_sessions_known_devices } from '@/plugins/core/admin/database/schema/sessions'; import { getUserAgentData, getUserIp } from '@/functions'; @Injectable() diff --git a/packages/backend/src/core/sessions/devices/show/show.service.ts b/packages/backend/src/core/sessions/devices/show/show.service.ts index 0b2a126d5..35cc09c8d 100644 --- a/packages/backend/src/core/sessions/devices/show/show.service.ts +++ b/packages/backend/src/core/sessions/devices/show/show.service.ts @@ -3,12 +3,12 @@ import { desc, eq } from 'drizzle-orm'; import { ShowCoreSessionDevicesObj } from './dto/show.obj'; -import { DatabaseService } from '@/database'; +import { DatabaseService } from '@/utils/database/database.service'; import { User } from '@/decorators'; import { core_sessions, core_sessions_known_devices, -} from '@/templates/core/admin/database/schema/sessions'; +} from '@/plugins/core/admin/database/schema/sessions'; @Injectable() export class ShowCoreSessionDevicesService { diff --git a/packages/backend/src/core/sessions/sessions.cron.ts b/packages/backend/src/core/sessions/sessions.cron.ts index b71c94a46..f3efb3f5f 100644 --- a/packages/backend/src/core/sessions/sessions.cron.ts +++ b/packages/backend/src/core/sessions/sessions.cron.ts @@ -3,9 +3,9 @@ import { Cron, CronExpression } from '@nestjs/schedule'; import { and, lte } from 'drizzle-orm'; import { ConfigService } from '@nestjs/config'; -import { DatabaseService } from '../../database'; -import { core_sessions } from '../../templates/core/admin/database/schema/sessions'; -import { core_admin_sessions } from '../../templates/core/admin/database/schema/admins'; +import { core_sessions } from '../../plugins/core/admin/database/schema/sessions'; +import { core_admin_sessions } from '../../plugins/core/admin/database/schema/admins'; +import { DatabaseService } from '@/utils'; @Injectable() export class CoreSessionsCron { diff --git a/packages/backend/src/core/sessions/sign_in/device.service.ts b/packages/backend/src/core/sessions/sign_in/device.service.ts index 42698300c..5d8678033 100644 --- a/packages/backend/src/core/sessions/sign_in/device.service.ts +++ b/packages/backend/src/core/sessions/sign_in/device.service.ts @@ -1,8 +1,8 @@ import { Injectable } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; -import { DatabaseService } from '../../../database'; -import { core_sessions_known_devices } from '../../../templates/core/admin/database/schema/sessions'; +import { DatabaseService } from '@/utils/database/database.service'; +import { core_sessions_known_devices } from '../../../plugins/core/admin/database/schema/sessions'; import { Ctx } from '../../../utils'; import { getUserIp, getUserAgentData } from '../../../functions'; diff --git a/packages/backend/src/core/sessions/sign_in/sign_in.service.ts b/packages/backend/src/core/sessions/sign_in/sign_in.service.ts index 2253b43a2..68ce5d2c0 100644 --- a/packages/backend/src/core/sessions/sign_in/sign_in.service.ts +++ b/packages/backend/src/core/sessions/sign_in/sign_in.service.ts @@ -8,10 +8,10 @@ import { SignInCoreSessionsArgs } from './dto/sign_in.args'; import { DeviceSignInCoreSessionsService } from './device.service'; import { Ctx } from '../../../utils'; -import { DatabaseService } from '../../../database'; +import { DatabaseService } from '@/utils/database/database.service'; import { AccessDeniedError, CustomError } from '../../../errors'; -import { core_admin_sessions } from '../../../templates/core/admin/database/schema/admins'; -import { core_sessions } from '../../../templates/core/admin/database/schema/sessions'; +import { core_admin_sessions } from '../../../plugins/core/admin/database/schema/admins'; +import { core_sessions } from '../../../plugins/core/admin/database/schema/sessions'; interface CreateSessionArgs extends Ctx { email: string; diff --git a/packages/backend/src/core/sessions/sign_out/sign_out.service.ts b/packages/backend/src/core/sessions/sign_out/sign_out.service.ts index c85806694..39e1feea6 100644 --- a/packages/backend/src/core/sessions/sign_out/sign_out.service.ts +++ b/packages/backend/src/core/sessions/sign_out/sign_out.service.ts @@ -2,9 +2,9 @@ import { Injectable } from '@nestjs/common'; import { eq } from 'drizzle-orm'; import { ConfigService } from '@nestjs/config'; -import { DatabaseService } from '../../../database'; +import { DatabaseService } from '@/utils/database/database.service'; import { Ctx } from '../../../utils'; -import { core_sessions } from '../../../templates/core/admin/database/schema/sessions'; +import { core_sessions } from '../../../plugins/core/admin/database/schema/sessions'; @Injectable() export class SignOutCoreSessionsService { diff --git a/packages/backend/src/core/sessions/sign_up/sign_up.service.ts b/packages/backend/src/core/sessions/sign_up/sign_up.service.ts index 73cd2d65f..54e43f383 100644 --- a/packages/backend/src/core/sessions/sign_up/sign_up.service.ts +++ b/packages/backend/src/core/sessions/sign_up/sign_up.service.ts @@ -9,8 +9,8 @@ import { AvatarColorService } from './helpers/avatar-color.service'; import { encryptPassword } from '../encrypt_password'; import { CaptchaCoreCaptchaSecurityService } from '@/core/admin/security/captcha/captcha.service'; -import { DatabaseService } from '../../../database'; -import { core_users } from '../../../templates/core/admin/database/schema/users'; +import { DatabaseService } from '@/utils/database/database.service'; +import { core_users } from '../../../plugins/core/admin/database/schema/users'; import { Ctx } from '@/utils'; import { CustomError } from '../../../errors'; import { getUserIp } from '../../../functions'; diff --git a/packages/backend/src/core/settings/show/show.service.ts b/packages/backend/src/core/settings/show/show.service.ts index da8d5a8a6..730ac22a5 100644 --- a/packages/backend/src/core/settings/show/show.service.ts +++ b/packages/backend/src/core/settings/show/show.service.ts @@ -6,9 +6,9 @@ import { Injectable } from '@nestjs/common'; import { ShowSettingsObj } from './dto/show.obj'; import { ManifestWithLang } from '../settings.module'; -import { DatabaseService } from '../../../database'; +import { DatabaseService } from '@/utils/database/database.service'; import { ABSOLUTE_PATHS_BACKEND, getConfigFile } from '../../..'; -import { core_languages } from '../../../templates/core/admin/database/schema/languages'; +import { core_languages } from '../../../plugins/core/admin/database/schema/languages'; @Injectable() export class ShowSettingsService { diff --git a/apps/backend/src/database/client.ts b/packages/backend/src/database.ts similarity index 100% rename from apps/backend/src/database/client.ts rename to packages/backend/src/database.ts diff --git a/packages/backend/src/database/index.ts b/packages/backend/src/database/index.ts deleted file mode 100644 index f47e9b4cb..000000000 --- a/packages/backend/src/database/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './client'; -export * from './database.module'; -export * from './database.service'; diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index d68149e8c..a843d953f 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -5,7 +5,6 @@ export * from './utils'; export * from './decorators'; export * from './main'; export * from './app.module'; -export * from './database'; // Services export * from './core/admin/sessions/authorization/authorization.service'; diff --git a/packages/backend/src/templates/core/admin/database/drizzle.config.ts b/packages/backend/src/plugins/core/admin/database/drizzle.config.ts similarity index 63% rename from packages/backend/src/templates/core/admin/database/drizzle.config.ts rename to packages/backend/src/plugins/core/admin/database/drizzle.config.ts index 5c3d66308..d2d21accf 100644 --- a/packages/backend/src/templates/core/admin/database/drizzle.config.ts +++ b/packages/backend/src/plugins/core/admin/database/drizzle.config.ts @@ -2,9 +2,7 @@ import { defineConfig } from 'drizzle-kit'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment, @typescript-eslint/prefer-ts-expect-error -// @ts-ignore -import { DATABASE_ENVS } from '@/database/client'; +import { DATABASE_ENVS } from '@/database'; export default defineConfig({ dialect: 'postgresql', diff --git a/apps/backend/src/plugins/core/admin/database/index.ts b/packages/backend/src/plugins/core/admin/database/index.ts similarity index 100% rename from apps/backend/src/plugins/core/admin/database/index.ts rename to packages/backend/src/plugins/core/admin/database/index.ts diff --git a/apps/backend/src/plugins/core/admin/database/schema/admins.ts b/packages/backend/src/plugins/core/admin/database/schema/admins.ts similarity index 100% rename from apps/backend/src/plugins/core/admin/database/schema/admins.ts rename to packages/backend/src/plugins/core/admin/database/schema/admins.ts diff --git a/apps/backend/src/plugins/core/admin/database/schema/files.ts b/packages/backend/src/plugins/core/admin/database/schema/files.ts similarity index 100% rename from apps/backend/src/plugins/core/admin/database/schema/files.ts rename to packages/backend/src/plugins/core/admin/database/schema/files.ts diff --git a/apps/backend/src/plugins/core/admin/database/schema/groups.ts b/packages/backend/src/plugins/core/admin/database/schema/groups.ts similarity index 100% rename from apps/backend/src/plugins/core/admin/database/schema/groups.ts rename to packages/backend/src/plugins/core/admin/database/schema/groups.ts diff --git a/apps/backend/src/plugins/core/admin/database/schema/languages.ts b/packages/backend/src/plugins/core/admin/database/schema/languages.ts similarity index 100% rename from apps/backend/src/plugins/core/admin/database/schema/languages.ts rename to packages/backend/src/plugins/core/admin/database/schema/languages.ts diff --git a/apps/backend/src/plugins/core/admin/database/schema/moderators.ts b/packages/backend/src/plugins/core/admin/database/schema/moderators.ts similarity index 100% rename from apps/backend/src/plugins/core/admin/database/schema/moderators.ts rename to packages/backend/src/plugins/core/admin/database/schema/moderators.ts diff --git a/apps/backend/src/plugins/core/admin/database/schema/nav.ts b/packages/backend/src/plugins/core/admin/database/schema/nav.ts similarity index 100% rename from apps/backend/src/plugins/core/admin/database/schema/nav.ts rename to packages/backend/src/plugins/core/admin/database/schema/nav.ts diff --git a/apps/backend/src/plugins/core/admin/database/schema/plugins.ts b/packages/backend/src/plugins/core/admin/database/schema/plugins.ts similarity index 100% rename from apps/backend/src/plugins/core/admin/database/schema/plugins.ts rename to packages/backend/src/plugins/core/admin/database/schema/plugins.ts diff --git a/apps/backend/src/plugins/core/admin/database/schema/sessions.ts b/packages/backend/src/plugins/core/admin/database/schema/sessions.ts similarity index 100% rename from apps/backend/src/plugins/core/admin/database/schema/sessions.ts rename to packages/backend/src/plugins/core/admin/database/schema/sessions.ts diff --git a/apps/backend/src/plugins/core/admin/database/schema/users.ts b/packages/backend/src/plugins/core/admin/database/schema/users.ts similarity index 100% rename from apps/backend/src/plugins/core/admin/database/schema/users.ts rename to packages/backend/src/plugins/core/admin/database/schema/users.ts diff --git a/packages/backend/src/templates/core/admin/database/index.ts b/packages/backend/src/templates/core/admin/database/index.ts deleted file mode 100644 index 8b23f87c9..000000000 --- a/packages/backend/src/templates/core/admin/database/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -import * as groups from './schema/groups'; -import * as languages from './schema/languages'; -import * as users from './schema/users'; -import * as sessions from './schema/sessions'; -import * as files from './schema/files'; -import * as admins from './schema/admins'; -import * as moderators from './schema/moderators'; -import * as plugins from './schema/plugins'; -import * as nav from './schema/nav'; - -export default { - ...groups, - ...languages, - ...users, - ...sessions, - ...files, - ...admins, - ...moderators, - ...plugins, - ...nav, -}; diff --git a/packages/backend/src/templates/core/admin/database/schema/admins.ts b/packages/backend/src/templates/core/admin/database/schema/admins.ts deleted file mode 100644 index d0a45c4bc..000000000 --- a/packages/backend/src/templates/core/admin/database/schema/admins.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { - boolean, - index, - integer, - jsonb, - pgTable, - serial, - timestamp, - varchar, -} from 'drizzle-orm/pg-core'; -import { relations } from 'drizzle-orm'; - -import { core_groups } from './groups'; -import { core_users } from './users'; -import { core_sessions_known_devices } from './sessions'; - -export const core_admin_permissions = pgTable( - 'core_admin_permissions', - { - id: serial('id').primaryKey(), - group_id: integer('group_id').references(() => core_groups.id, { - onDelete: 'cascade', - }), - user_id: integer('user_id').references(() => core_users.id, { - onDelete: 'cascade', - }), - unrestricted: boolean('unrestricted').notNull().default(false), - created: timestamp('created').notNull().defaultNow(), - updated: timestamp('updated').notNull().defaultNow(), - protected: boolean('protected').notNull().default(false), - permissions: jsonb('permissions').default('{}'), - }, - table => ({ - group_id_idx: index('core_admin_permissions_group_id_idx').on( - table.group_id, - ), - user_id_idx: index('core_admin_permissions_user_id_idx').on(table.user_id), - }), -); - -export const core_admin_permissions_relations = relations( - core_admin_permissions, - ({ one }) => ({ - group: one(core_groups, { - fields: [core_admin_permissions.group_id], - references: [core_groups.id], - }), - user: one(core_users, { - fields: [core_admin_permissions.user_id], - references: [core_users.id], - }), - }), -); - -export const core_admin_sessions = pgTable( - 'core_admin_sessions', - { - login_token: varchar('login_token', { length: 255 }).primaryKey(), - user_id: integer('user_id') - .notNull() - .references(() => core_users.id, { - onDelete: 'cascade', - }), - created: timestamp('created').notNull().defaultNow(), - last_seen: timestamp('last_seen').notNull().defaultNow(), - expires: timestamp('expires').notNull(), - device_id: integer('device_id') - .references(() => core_sessions_known_devices.id, { - onDelete: 'cascade', - }) - .notNull(), - }, - table => ({ - login_token_idx: index('core_admin_sessions_login_token_idx').on( - table.login_token, - ), - user_id_idx: index('core_admin_sessions_user_id_idx').on(table.user_id), - }), -); - -export const core_admin_sessions_relations = relations( - core_admin_sessions, - ({ one }) => ({ - user: one(core_users, { - fields: [core_admin_sessions.user_id], - references: [core_users.id], - }), - device: one(core_sessions_known_devices, { - fields: [core_admin_sessions.device_id], - references: [core_sessions_known_devices.id], - }), - }), -); diff --git a/packages/backend/src/templates/core/admin/database/schema/files.ts b/packages/backend/src/templates/core/admin/database/schema/files.ts deleted file mode 100644 index dda6ec8b7..000000000 --- a/packages/backend/src/templates/core/admin/database/schema/files.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { - bigint, - index, - integer, - pgTable, - serial, - text, - timestamp, - varchar, -} from 'drizzle-orm/pg-core'; -import { relations } from 'drizzle-orm'; - -import { core_users } from './users'; - -export const core_files = pgTable( - 'core_files', - { - id: serial('id').primaryKey(), - extension: varchar('extension', { length: 32 }).notNull(), - file_alt: varchar('file_alt', { length: 255 }), - file_name: varchar('file_name', { length: 255 }).notNull(), - file_name_original: varchar('file_name_original', { - length: 255, - }).notNull(), - dir_folder: varchar('dir_folder', { length: 255 }).notNull(), - user_id: integer('user_id') - .notNull() - .references(() => core_users.id, { - onDelete: 'cascade', - }), - created: timestamp('created').notNull().defaultNow(), - file_size: integer('file_size').notNull(), - mimetype: varchar('mimetype', { length: 255 }).notNull(), - width: integer('width'), - height: integer('height'), - security_key: varchar('security_key', { length: 255 }), - }, - table => ({ - user_id_idx: index('core_files_user_id_idx').on(table.user_id), - }), -); - -export const core_files_relations = relations(core_files, ({ many, one }) => ({ - user: one(core_users, { - fields: [core_files.user_id], - references: [core_users.id], - }), - using: many(core_files_using), -})); - -export const core_files_using = pgTable( - 'core_files_using', - { - id: serial('id').primaryKey(), - file_id: integer('file_id') - .notNull() - .references(() => core_files.id), - plugin: varchar('plugin', { length: 255 }).notNull(), - folder: varchar('folder', { length: 255 }).notNull(), - }, - table => ({ - file_id_idx: index('core_files_using_file_id_idx').on(table.file_id), - }), -); - -export const core_files_using_relations = relations( - core_files_using, - ({ one }) => ({ - file: one(core_files, { - fields: [core_files_using.file_id], - references: [core_files.id], - }), - }), -); - -export const core_migrations = pgTable('core_migrations', { - id: serial('id').primaryKey(), - hash: text('hash').notNull(), - plugin: varchar('plugin', { length: 255 }).notNull(), - created_migration: bigint('created_migration', { mode: 'bigint' }), - created: timestamp('created').notNull().defaultNow(), -}); diff --git a/packages/backend/src/templates/core/admin/database/schema/groups.ts b/packages/backend/src/templates/core/admin/database/schema/groups.ts deleted file mode 100644 index dd5b9f5e0..000000000 --- a/packages/backend/src/templates/core/admin/database/schema/groups.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { relations } from 'drizzle-orm'; -import { - boolean, - index, - integer, - pgTable, - serial, - timestamp, - varchar, -} from 'drizzle-orm/pg-core'; - -import { core_languages } from './languages'; - -export const core_groups = pgTable('core_groups', { - id: serial('id').primaryKey(), - created: timestamp('created').notNull().defaultNow(), - updated: timestamp('updated').notNull().defaultNow(), - protected: boolean('protected').notNull().default(false), - default: boolean('default').notNull().default(false), - root: boolean('root').notNull().default(false), - guest: boolean('guest').notNull().default(false), - files_allow_upload: boolean('files_allow_upload').notNull().default(true), - files_total_max_storage: integer('files_total_max_storage') - .notNull() - .default(500000), - files_max_storage_for_submit: integer('files_max_storage_for_submit') - .notNull() - .default(10000), -}); - -export const core_groups_relations = relations(core_groups, ({ many }) => ({ - name: many(core_groups_names), -})); - -export const core_groups_names = pgTable( - 'core_groups_names', - { - id: serial('id').primaryKey(), - item_id: integer('item_id') - .notNull() - .references(() => core_groups.id, { - onDelete: 'cascade', - }), - language_code: varchar('language_code') - .notNull() - .references(() => core_languages.code, { - onDelete: 'cascade', - }), - value: varchar('value', { length: 255 }).notNull(), - }, - table => ({ - item_id_idx: index('core_groups_names_item_id_idx').on(table.item_id), - language_code_idx: index('core_groups_names_language_code_idx').on( - table.language_code, - ), - }), -); - -export const core_groups_names_relations = relations( - core_groups_names, - ({ one }) => ({ - group: one(core_groups, { - fields: [core_groups_names.item_id], - references: [core_groups.id], - }), - }), -); diff --git a/packages/backend/src/templates/core/admin/database/schema/languages.ts b/packages/backend/src/templates/core/admin/database/schema/languages.ts deleted file mode 100644 index f43536db0..000000000 --- a/packages/backend/src/templates/core/admin/database/schema/languages.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { - boolean, - index, - pgTable, - serial, - timestamp, - varchar, -} from 'drizzle-orm/pg-core'; - -export const core_languages = pgTable( - 'core_languages', - { - id: serial('id').primaryKey(), - code: varchar('code', { length: 32 }).notNull().unique(), - name: varchar('name', { length: 255 }).notNull(), - timezone: varchar('timezone', { length: 255 }).notNull().default('UTC'), - protected: boolean('protected').notNull().default(false), - default: boolean('default').notNull().default(false), - enabled: boolean('enabled').notNull().default(true), - created: timestamp('created').notNull().defaultNow(), - updated: timestamp('updated').notNull().defaultNow(), - time_24: boolean('time_24').notNull().default(false), - locale: varchar('locale', { length: 50 }).notNull().default('enUS'), - allow_in_input: boolean('allow_in_input').default(true), - site_copyright: varchar('site_copyright', { - length: 255, - }).default(''), - }, - table => ({ - code_idx: index('core_languages_code_idx').on(table.code), - name_idx: index('core_languages_name_idx').on(table.name), - }), -); diff --git a/packages/backend/src/templates/core/admin/database/schema/moderators.ts b/packages/backend/src/templates/core/admin/database/schema/moderators.ts deleted file mode 100644 index 0c7cf03f1..000000000 --- a/packages/backend/src/templates/core/admin/database/schema/moderators.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { - boolean, - index, - integer, - pgTable, - serial, - timestamp, -} from 'drizzle-orm/pg-core'; -import { relations } from 'drizzle-orm'; - -import { core_groups } from './groups'; -import { core_users } from './users'; - -export const core_moderators_permissions = pgTable( - 'core_moderators_permissions', - { - id: serial('id').primaryKey(), - group_id: integer('group_id').references(() => core_groups.id, { - onDelete: 'cascade', - }), - user_id: integer('user_id').references(() => core_users.id, { - onDelete: 'cascade', - }), - unrestricted: boolean('unrestricted').notNull().default(false), - created: timestamp('created').notNull().defaultNow(), - updated: timestamp('updated').notNull().defaultNow(), - protected: boolean('protected').notNull().default(false), - }, - table => ({ - group_id_idx: index('core_moderators_permissions_group_id_idx').on( - table.group_id, - ), - user_id_idx: index('core_moderators_permissions_user_id_idx').on( - table.user_id, - ), - }), -); - -export const core_moderators_permissions_relations = relations( - core_moderators_permissions, - ({ one }) => ({ - group: one(core_groups, { - fields: [core_moderators_permissions.group_id], - references: [core_groups.id], - }), - user: one(core_users, { - fields: [core_moderators_permissions.user_id], - references: [core_users.id], - }), - }), -); diff --git a/packages/backend/src/templates/core/admin/database/schema/nav.ts b/packages/backend/src/templates/core/admin/database/schema/nav.ts deleted file mode 100644 index 002c4b053..000000000 --- a/packages/backend/src/templates/core/admin/database/schema/nav.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { relations } from 'drizzle-orm'; -import { - boolean, - index, - integer, - pgTable, - serial, - varchar, -} from 'drizzle-orm/pg-core'; - -import { core_languages } from './languages'; - -export const core_nav = pgTable( - 'core_nav', - { - id: serial('id').primaryKey(), - href: varchar('href', { length: 255 }).notNull(), - external: boolean('external').notNull().default(false), - position: integer('position').notNull().default(0), - // ! Warning: this is a recursive relation. It's not supported by drizzle-orm yet. - parent_id: integer('parent_id').notNull().default(0), - icon: varchar('icon', { length: 50 }), - }, - table => ({ - parent_id_idx: index('core_nav_parent_id_idx').on(table.parent_id), - }), -); - -export const core_nav_relations = relations(core_nav, ({ many, one }) => ({ - name: many(core_nav_name), - description: many(core_nav_description), - parent: one(core_nav, { - fields: [core_nav.parent_id], - references: [core_nav.id], - }), -})); - -export const core_nav_name = pgTable( - 'core_nav_name', - { - id: serial('id').primaryKey(), - item_id: serial('item_id') - .notNull() - .references(() => core_nav.id, { - onDelete: 'cascade', - }), - language_code: varchar('language_code') - .notNull() - .references(() => core_languages.code, { - onDelete: 'cascade', - }), - value: varchar('value', { length: 100 }).notNull(), - }, - table => ({ - item_id_idx: index('core_nav_name_item_id_idx').on(table.item_id), - language_code_idx: index('core_nav_name_language_code_idx').on( - table.language_code, - ), - }), -); - -export const core_nav_name_relations = relations(core_nav_name, ({ one }) => ({ - nav: one(core_nav, { - fields: [core_nav_name.item_id], - references: [core_nav.id], - }), - language: one(core_languages, { - fields: [core_nav_name.language_code], - references: [core_languages.code], - }), -})); - -export const core_nav_description = pgTable( - 'core_nav_description', - { - id: serial('id').primaryKey(), - item_id: serial('item_id') - .notNull() - .references(() => core_nav.id, { - onDelete: 'cascade', - }), - language_code: varchar('language_code') - .notNull() - .references(() => core_languages.code, { - onDelete: 'cascade', - }), - value: varchar('value', { length: 200 }).notNull(), - }, - table => ({ - item_id_idx: index('core_nav_description_item_id_idx').on(table.item_id), - language_code_idx: index('core_nav_description_language_code_idx').on( - table.language_code, - ), - }), -); - -export const core_nav_description_relations = relations( - core_nav_description, - ({ one }) => ({ - nav: one(core_nav, { - fields: [core_nav_description.item_id], - references: [core_nav.id], - }), - language: one(core_languages, { - fields: [core_nav_description.language_code], - references: [core_languages.code], - }), - }), -); diff --git a/packages/backend/src/templates/core/admin/database/schema/plugins.ts b/packages/backend/src/templates/core/admin/database/schema/plugins.ts deleted file mode 100644 index db240e9bd..000000000 --- a/packages/backend/src/templates/core/admin/database/schema/plugins.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { - boolean, - index, - integer, - pgTable, - serial, - timestamp, - varchar, -} from 'drizzle-orm/pg-core'; - -export const core_plugins = pgTable( - 'core_plugins', - { - id: serial('id').primaryKey(), - code: varchar('code', { length: 50 }).notNull(), - name: varchar('name', { length: 50 }).notNull(), - description: varchar('description', { length: 255 }), - version: varchar('version', { length: 255 }), - version_code: integer('version_code'), - enabled: boolean('enabled').notNull().default(true), - created: timestamp('created').notNull().defaultNow(), - updated: timestamp('updated').notNull().defaultNow(), - support_url: varchar('support_url', { length: 255 }).notNull(), - author: varchar('author', { length: 100 }).notNull(), - author_url: varchar('author_url', { length: 255 }), - default: boolean('default').notNull().default(false), - allow_default: boolean('allow_default').notNull().default(true), - }, - table => ({ - code_idx: index('core_plugins_code_idx').on(table.code), - name_idx: index('core_plugins_name_idx').on(table.name), - }), -); diff --git a/packages/backend/src/templates/core/admin/database/schema/sessions.ts b/packages/backend/src/templates/core/admin/database/schema/sessions.ts deleted file mode 100644 index 85030abf9..000000000 --- a/packages/backend/src/templates/core/admin/database/schema/sessions.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { - index, - integer, - pgTable, - serial, - text, - timestamp, - varchar, -} from 'drizzle-orm/pg-core'; -import { relations } from 'drizzle-orm'; - -import { core_users } from './users'; -import { core_admin_sessions } from './admins'; - -export const core_sessions = pgTable( - 'core_sessions', - { - login_token: varchar('login_token', { length: 255 }).primaryKey(), - user_id: integer('user_id') - .notNull() - .references(() => core_users.id, { - onDelete: 'cascade', - }), - created: timestamp('created').notNull().defaultNow(), - expires: timestamp('expires').notNull(), - device_id: integer('device_id') - .references(() => core_sessions_known_devices.id, { - onDelete: 'cascade', - }) - .notNull(), - }, - table => ({ - user_id_idx: index('core_sessions_user_id_idx').on(table.user_id), - }), -); - -export const core_sessions_relations = relations(core_sessions, ({ one }) => ({ - user: one(core_users, { - fields: [core_sessions.user_id], - references: [core_users.id], - }), - device: one(core_sessions_known_devices, { - fields: [core_sessions.device_id], - references: [core_sessions_known_devices.id], - }), -})); - -export const core_sessions_known_devices = pgTable( - 'core_sessions_known_devices', - { - id: serial('id').primaryKey(), - ip_address: varchar('ip_address', { length: 255 }).notNull(), - user_agent: text('user_agent').notNull(), - uagent_browser: varchar('uagent_browser', { length: 200 }).notNull(), - uagent_version: varchar('uagent_version', { length: 100 }).notNull(), - uagent_os: varchar('uagent_os', { length: 100 }).notNull(), - last_seen: timestamp('last_seen').notNull().defaultNow(), - }, - table => ({ - ip_address_idx: index('core_sessions_known_devices_ip_address_idx').on( - table.ip_address, - ), - }), -); - -export const core_sessions_known_devices_relations = relations( - core_sessions_known_devices, - ({ one }) => ({ - session: one(core_sessions, { - fields: [core_sessions_known_devices.id], - references: [core_sessions.device_id], - }), - admin_session: one(core_admin_sessions, { - fields: [core_sessions_known_devices.id], - references: [core_admin_sessions.device_id], - }), - }), -); diff --git a/packages/backend/src/templates/core/admin/database/schema/users.ts b/packages/backend/src/templates/core/admin/database/schema/users.ts deleted file mode 100644 index b859bc94f..000000000 --- a/packages/backend/src/templates/core/admin/database/schema/users.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { relations } from 'drizzle-orm'; -import { - boolean, - index, - integer, - pgTable, - serial, - text, - timestamp, - varchar, -} from 'drizzle-orm/pg-core'; - -import { core_groups } from './groups'; -import { core_languages } from './languages'; - -export const core_users = pgTable( - 'core_users', - { - id: serial('id').primaryKey(), - name_seo: varchar('name_seo', { length: 255 }).unique(), - name: varchar('name', { length: 255 }).notNull().unique(), - email: varchar('email', { length: 255 }).notNull().unique(), - password: text('password').notNull(), - joined: timestamp('joined').notNull().defaultNow(), - posts: integer('posts').notNull().default(0), - newsletter: boolean('newsletter').notNull().default(false), - avatar_color: varchar('avatar_color', { length: 6 }).notNull(), - group_id: integer('group_id').references(() => core_groups.id), - first_name: varchar('first_name', { length: 255 }), - last_name: varchar('last_name', { length: 255 }), - birthday: timestamp('birthday'), - ip_address: varchar('ip_address', { length: 255 }).notNull(), - language: varchar('language', { length: 5 }) - .notNull() - .default('en') - .references(() => core_languages.code, { - onDelete: 'set default', - }), - }, - table => ({ - name_seo_idx: index('core_users_name_seo_idx').on(table.name_seo), - name_idx: index('core_users_name_idx').on(table.name), - email_idx: index('core_users_email_idx').on(table.email), - }), -); - -export const core_users_relations = relations(core_users, ({ one }) => ({ - group: one(core_groups, { - fields: [core_users.group_id], - references: [core_groups.id], - }), - avatar: one(core_files_avatars, { - fields: [core_users.id], - references: [core_files_avatars.user_id], - }), - language: one(core_languages, { - fields: [core_users.language], - references: [core_languages.code], - }), -})); - -export const core_files_avatars = pgTable('core_files_avatars', { - id: serial('id').primaryKey(), - dir_folder: varchar('dir_folder', { length: 255 }).notNull(), - file_name: varchar('file_name', { length: 255 }).notNull(), - created: timestamp('created').notNull().defaultNow(), - file_size: integer('file_size').notNull(), - mimetype: varchar('mimetype', { length: 255 }).notNull(), - extension: varchar('extension', { length: 32 }).notNull(), - user_id: integer('user_id').references(() => core_users.id, { - onDelete: 'cascade', - }), -}); - -export const core_files_avatars_relations = relations( - core_files_avatars, - ({ one }) => ({ - user: one(core_users, { - fields: [core_files_avatars.user_id], - references: [core_users.id], - }), - }), -); - -export const core_users_pass_reset = pgTable('core_users_pass_reset', { - id: serial('id').primaryKey(), - user_id: integer('user_id').references(() => core_users.id, { - onDelete: 'cascade', - }), - key: varchar('key', { length: 100 }).notNull().unique(), - created: timestamp('created').notNull().defaultNow(), - expires: timestamp('expires').notNull(), -}); - -export const core_users_pass_reset_relations = relations( - core_users_pass_reset, - ({ one }) => ({ - user: one(core_users, { - fields: [core_users_pass_reset.user_id], - references: [core_users.id], - }), - }), -); diff --git a/packages/backend/src/database/client.ts b/packages/backend/src/utils/database/client.ts similarity index 100% rename from packages/backend/src/database/client.ts rename to packages/backend/src/utils/database/client.ts diff --git a/packages/backend/src/database/database.module.ts b/packages/backend/src/utils/database/database.module.ts similarity index 87% rename from packages/backend/src/database/database.module.ts rename to packages/backend/src/utils/database/database.module.ts index 86369eb81..b9a59b913 100644 --- a/packages/backend/src/database/database.module.ts +++ b/packages/backend/src/utils/database/database.module.ts @@ -2,9 +2,7 @@ import { DynamicModule, Global, Module } from '@nestjs/common'; import { registerEnumType } from '@nestjs/graphql'; import { PoolConfig } from 'pg'; -import { DatabaseService } from './database.service'; - -import { SortDirectionEnum } from '..'; +import { DatabaseService, SortDirectionEnum } from '..'; registerEnumType(SortDirectionEnum, { name: 'SortDirectionEnum', diff --git a/packages/backend/src/database/database.service.ts b/packages/backend/src/utils/database/database.service.ts similarity index 80% rename from packages/backend/src/database/database.service.ts rename to packages/backend/src/utils/database/database.service.ts index 3159ce3b1..9dc24ebb4 100644 --- a/packages/backend/src/database/database.service.ts +++ b/packages/backend/src/utils/database/database.service.ts @@ -1,9 +1,10 @@ import { Inject, Injectable } from '@nestjs/common'; import { NodePgDatabase } from 'drizzle-orm/node-postgres'; -import { DatabaseModuleArgs } from './database.module'; import { createClientDatabase } from './client'; -import coreSchemaDatabase from '../templates/core/admin/database'; + +import coreSchemaDatabase from '../../plugins/core/admin/database'; +import { DatabaseModuleArgs } from '@/utils/database/database.module'; @Injectable() export class DatabaseService { diff --git a/packages/backend/src/utils/index.ts b/packages/backend/src/utils/index.ts index dda15addb..88046d7f1 100644 --- a/packages/backend/src/utils/index.ts +++ b/packages/backend/src/utils/index.ts @@ -2,3 +2,4 @@ export * from './pagination'; export * from './text-language'; export * from './context'; export * from './guards'; +export * from './database/database.service'; diff --git a/packages/frontend/global.d.ts b/packages/frontend/global.d.ts index 354e1bc38..3dbe59ea9 100644 --- a/packages/frontend/global.d.ts +++ b/packages/frontend/global.d.ts @@ -2,5 +2,4 @@ type IntlMessages = typeof import('../../apps/frontend/plugins/admin/langs/en.json') & - typeof import('../../apps/frontend/plugins/blog/langs/en.json') & typeof import('../../apps/frontend/plugins/core/langs/en.json'); diff --git a/packages/frontend/src/views/admin/views/core/plugins/actions/create/hooks/mutation-create-api.ts b/packages/frontend/src/views/admin/views/core/plugins/actions/create/hooks/mutation-create-api.ts index 2733a80c5..bfce7f2a3 100644 --- a/packages/frontend/src/views/admin/views/core/plugins/actions/create/hooks/mutation-create-api.ts +++ b/packages/frontend/src/views/admin/views/core/plugins/actions/create/hooks/mutation-create-api.ts @@ -8,6 +8,7 @@ import { Admin__Core_Plugins__CreateMutation, Admin__Core_Plugins__CreateMutationVariables, } from '@/graphql/graphql'; +import { CONFIG } from '@/helpers/config-with-env'; export const mutationCreateApi = async ( variables: Admin__Core_Plugins__CreateMutationVariables, @@ -21,7 +22,15 @@ export const mutationCreateApi = async ( variables, }); - revalidatePath('/', 'layout'); + if (CONFIG.node_development) { + // Revalidate after 3 seconds in promise. Wait for fast refresh to compilation files. + await new Promise(resolve => + setTimeout(() => { + revalidatePath('/', 'layout'); + resolve(); + }, 3000), + ); + } return { data }; } catch (error) { diff --git a/packages/frontend/src/views/admin/views/core/plugins/actions/create/hooks/mutation-edit-api.ts b/packages/frontend/src/views/admin/views/core/plugins/actions/create/hooks/mutation-edit-api.ts index a06a6cd11..aaf7179ad 100644 --- a/packages/frontend/src/views/admin/views/core/plugins/actions/create/hooks/mutation-edit-api.ts +++ b/packages/frontend/src/views/admin/views/core/plugins/actions/create/hooks/mutation-edit-api.ts @@ -21,7 +21,7 @@ export const mutationEditApi = async ( variables, }); - revalidatePath('/admin/core/plugins/blog/dev/overview', 'page'); + revalidatePath('/', 'layout'); return { data }; } catch (error) { diff --git a/packages/frontend/src/views/admin/views/core/plugins/plugins-admin-view.tsx b/packages/frontend/src/views/admin/views/core/plugins/plugins-admin-view.tsx index 568aedd92..6f7a97114 100644 --- a/packages/frontend/src/views/admin/views/core/plugins/plugins-admin-view.tsx +++ b/packages/frontend/src/views/admin/views/core/plugins/plugins-admin-view.tsx @@ -29,6 +29,7 @@ const getData = async (variables: Admin__Core_Plugins__ShowQueryVariables) => { >({ query: Admin__Core_Plugins__Show, variables, + cache: 'force-cache', }); return data; diff --git a/packages/frontend/src/views/admin/views/core/plugins/table/actions/delete/hooks/mutation-api.ts b/packages/frontend/src/views/admin/views/core/plugins/table/actions/delete/hooks/mutation-api.ts index a2877eb80..bf1e39575 100644 --- a/packages/frontend/src/views/admin/views/core/plugins/table/actions/delete/hooks/mutation-api.ts +++ b/packages/frontend/src/views/admin/views/core/plugins/table/actions/delete/hooks/mutation-api.ts @@ -8,6 +8,7 @@ import { Admin__Core_Plugins__DeleteMutationVariables, } from '@/graphql/graphql'; import { fetcher } from '@/graphql/fetcher'; +import { CONFIG } from '@/helpers/config-with-env'; export const mutationApi = async ( variables: Admin__Core_Plugins__DeleteMutationVariables, @@ -21,7 +22,17 @@ export const mutationApi = async ( variables, }); - revalidatePath('/', 'page'); + if (CONFIG.node_development) { + // Revalidate after 3 seconds in promise. Wait for fast refresh to compilation files. + await new Promise(resolve => + setTimeout(() => { + revalidatePath('/', 'layout'); + resolve(); + }, 3000), + ); + } else { + revalidatePath('/', 'layout'); + } return { data }; } catch (error) { diff --git a/packages/frontend/src/views/admin/views/core/plugins/upload/hooks/mutation-api.ts b/packages/frontend/src/views/admin/views/core/plugins/upload/hooks/mutation-api.ts index bca41c62b..596fc722e 100644 --- a/packages/frontend/src/views/admin/views/core/plugins/upload/hooks/mutation-api.ts +++ b/packages/frontend/src/views/admin/views/core/plugins/upload/hooks/mutation-api.ts @@ -8,6 +8,7 @@ import { Admin__Core_Plugins__UploadMutation, Admin__Core_Plugins__UploadMutationVariables, } from '@/graphql/graphql'; +import { CONFIG } from '@/helpers/config-with-env'; export const mutationApi = async (formData: FormData) => { try { @@ -29,7 +30,17 @@ export const mutationApi = async (formData: FormData) => { ], }); - revalidatePath('/', 'layout'); + if (CONFIG.node_development) { + // Revalidate after 3 seconds in promise. Wait for fast refresh to compilation files. + await new Promise(resolve => + setTimeout(() => { + revalidatePath('/', 'layout'); + resolve(); + }, 3000), + ); + } else { + revalidatePath('/', 'layout'); + } return { data }; } catch (error) {