update
This commit is contained in:
		
							parent
							
								
									fa01d3c04c
								
							
						
					
					
						commit
						99401e713c
					
				@ -7,6 +7,7 @@
 | 
			
		||||
    "license": "UNLICENSED",
 | 
			
		||||
    "scripts": {
 | 
			
		||||
        "cli": "nest",
 | 
			
		||||
        "db": "mikro-orm",
 | 
			
		||||
        "dev": "pnpm start:dev",
 | 
			
		||||
        "build": "nest build",
 | 
			
		||||
        "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
 | 
			
		||||
@ -22,13 +23,17 @@
 | 
			
		||||
        "test:e2e": "jest --config ./test/jest-e2e.json"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@mikro-orm/cli": "^6.2.5",
 | 
			
		||||
        "@mikro-orm/core": "^6.2.5",
 | 
			
		||||
        "@mikro-orm/migrations": "^6.2.5",
 | 
			
		||||
        "@mikro-orm/nestjs": "^5.2.3",
 | 
			
		||||
        "@mikro-orm/postgresql": "^6.2.5",
 | 
			
		||||
        "@mikro-orm/seeder": "^6.2.5",
 | 
			
		||||
        "@nestjs/common": "^10.3.8",
 | 
			
		||||
        "@nestjs/core": "^10.3.8",
 | 
			
		||||
        "@nestjs/platform-fastify": "^10.3.8",
 | 
			
		||||
        "fastify": "^4.26.2",
 | 
			
		||||
        "lodash": "^4.17.21",
 | 
			
		||||
        "reflect-metadata": "^0.2.2",
 | 
			
		||||
        "rxjs": "^7.8.1",
 | 
			
		||||
        "uuid": "^9.0.1"
 | 
			
		||||
@ -41,6 +46,7 @@
 | 
			
		||||
        "@swc/cli": "^0.3.12",
 | 
			
		||||
        "@swc/core": "^1.5.3",
 | 
			
		||||
        "@types/jest": "^29.5.12",
 | 
			
		||||
        "@types/lodash": "^4.17.1",
 | 
			
		||||
        "@types/node": "^20.12.8",
 | 
			
		||||
        "@types/supertest": "^6.0.2",
 | 
			
		||||
        "@types/uuid": "^9.0.8",
 | 
			
		||||
@ -71,5 +77,12 @@
 | 
			
		||||
        ],
 | 
			
		||||
        "coverageDirectory": "../coverage",
 | 
			
		||||
        "testEnvironment": "node"
 | 
			
		||||
    },
 | 
			
		||||
    "mikro-orm": {
 | 
			
		||||
        "useTsNode": true,
 | 
			
		||||
        "configPaths": [
 | 
			
		||||
            "./src/config/database.config.ts",
 | 
			
		||||
            "./dist/config/database.config.js"
 | 
			
		||||
        ]
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,24 +1,19 @@
 | 
			
		||||
import { MikroOrmModule } from '@mikro-orm/nestjs';
 | 
			
		||||
import { PostgreSqlDriver } from '@mikro-orm/postgresql';
 | 
			
		||||
import { Module } from '@nestjs/common';
 | 
			
		||||
 | 
			
		||||
import { AppController } from './app.controller';
 | 
			
		||||
import { AppService } from './app.service';
 | 
			
		||||
import { ContentModule } from './modules/content/content.module';
 | 
			
		||||
import { UserModule } from './modules/user/user.module';
 | 
			
		||||
import { database } from './config/database.config';
 | 
			
		||||
import { moduleImports } from './module.list';
 | 
			
		||||
 | 
			
		||||
@Module({
 | 
			
		||||
    imports: [
 | 
			
		||||
        MikroOrmModule.forRoot({
 | 
			
		||||
            host: '127.0.0.1',
 | 
			
		||||
            user: 'postgres',
 | 
			
		||||
            password: '123456',
 | 
			
		||||
            dbName: '3rapp',
 | 
			
		||||
            driver: PostgreSqlDriver,
 | 
			
		||||
            autoLoadEntities: true,
 | 
			
		||||
            ...database(),
 | 
			
		||||
            registerRequestContext: true,
 | 
			
		||||
            // autoLoadEntities: true,
 | 
			
		||||
        }),
 | 
			
		||||
        UserModule,
 | 
			
		||||
        ContentModule,
 | 
			
		||||
        ...moduleImports,
 | 
			
		||||
    ],
 | 
			
		||||
    controllers: [AppController],
 | 
			
		||||
    providers: [AppService],
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										20
									
								
								apps/api/src/config/database.config.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								apps/api/src/config/database.config.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,20 @@
 | 
			
		||||
import { Migrator } from '@mikro-orm/migrations';
 | 
			
		||||
import { defineConfig, Utils } from '@mikro-orm/postgresql';
 | 
			
		||||
 | 
			
		||||
import { moduleImports } from '@/module.list';
 | 
			
		||||
import { getEntities } from '@/modules/database/helpers';
 | 
			
		||||
 | 
			
		||||
export const database = () =>
 | 
			
		||||
    defineConfig({
 | 
			
		||||
        host: '127.0.0.1',
 | 
			
		||||
        user: 'postgres',
 | 
			
		||||
        password: '123456',
 | 
			
		||||
        dbName: '3rapp',
 | 
			
		||||
        entities: getEntities(moduleImports),
 | 
			
		||||
        extensions: [Migrator, SeedManager],
 | 
			
		||||
        migrations: {
 | 
			
		||||
            tableName: 'migrations',
 | 
			
		||||
            path: Utils.detectTsNode() ? 'src/database/migrations' : 'dist/database/migrations',
 | 
			
		||||
        },
 | 
			
		||||
    });
 | 
			
		||||
export default database();
 | 
			
		||||
							
								
								
									
										90
									
								
								apps/api/src/database/migrations/.snapshot-3rapp.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								apps/api/src/database/migrations/.snapshot-3rapp.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,90 @@
 | 
			
		||||
{
 | 
			
		||||
    "namespaces": ["public"],
 | 
			
		||||
    "name": "public",
 | 
			
		||||
    "tables": [
 | 
			
		||||
        {
 | 
			
		||||
            "columns": {
 | 
			
		||||
                "id": {
 | 
			
		||||
                    "name": "id",
 | 
			
		||||
                    "type": "uuid",
 | 
			
		||||
                    "unsigned": false,
 | 
			
		||||
                    "autoincrement": false,
 | 
			
		||||
                    "primary": false,
 | 
			
		||||
                    "nullable": false,
 | 
			
		||||
                    "mappedType": "uuid"
 | 
			
		||||
                },
 | 
			
		||||
                "title": {
 | 
			
		||||
                    "name": "title",
 | 
			
		||||
                    "type": "varchar(255)",
 | 
			
		||||
                    "unsigned": false,
 | 
			
		||||
                    "autoincrement": false,
 | 
			
		||||
                    "primary": false,
 | 
			
		||||
                    "nullable": false,
 | 
			
		||||
                    "mappedType": "string"
 | 
			
		||||
                },
 | 
			
		||||
                "body": {
 | 
			
		||||
                    "name": "body",
 | 
			
		||||
                    "type": "text",
 | 
			
		||||
                    "unsigned": false,
 | 
			
		||||
                    "autoincrement": false,
 | 
			
		||||
                    "primary": false,
 | 
			
		||||
                    "nullable": false,
 | 
			
		||||
                    "mappedType": "text"
 | 
			
		||||
                },
 | 
			
		||||
                "keywords": {
 | 
			
		||||
                    "name": "keywords",
 | 
			
		||||
                    "type": "text[]",
 | 
			
		||||
                    "unsigned": false,
 | 
			
		||||
                    "autoincrement": false,
 | 
			
		||||
                    "primary": false,
 | 
			
		||||
                    "nullable": true,
 | 
			
		||||
                    "mappedType": "array"
 | 
			
		||||
                },
 | 
			
		||||
                "created_at": {
 | 
			
		||||
                    "name": "created_at",
 | 
			
		||||
                    "type": "timestamptz",
 | 
			
		||||
                    "unsigned": false,
 | 
			
		||||
                    "autoincrement": false,
 | 
			
		||||
                    "primary": false,
 | 
			
		||||
                    "nullable": false,
 | 
			
		||||
                    "length": 6,
 | 
			
		||||
                    "mappedType": "datetime"
 | 
			
		||||
                },
 | 
			
		||||
                "updated_at": {
 | 
			
		||||
                    "name": "updated_at",
 | 
			
		||||
                    "type": "timestamptz",
 | 
			
		||||
                    "unsigned": false,
 | 
			
		||||
                    "autoincrement": false,
 | 
			
		||||
                    "primary": false,
 | 
			
		||||
                    "nullable": false,
 | 
			
		||||
                    "length": 6,
 | 
			
		||||
                    "mappedType": "datetime"
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "name": "3rapp_posts",
 | 
			
		||||
            "schema": "public",
 | 
			
		||||
            "indexes": [
 | 
			
		||||
                {
 | 
			
		||||
                    "columnNames": ["title"],
 | 
			
		||||
                    "composite": false,
 | 
			
		||||
                    "keyName": "3rapp_posts_title_index",
 | 
			
		||||
                    "constraint": false,
 | 
			
		||||
                    "primary": false,
 | 
			
		||||
                    "unique": false
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "keyName": "3rapp_posts_pkey",
 | 
			
		||||
                    "columnNames": ["id"],
 | 
			
		||||
                    "composite": false,
 | 
			
		||||
                    "constraint": true,
 | 
			
		||||
                    "primary": true,
 | 
			
		||||
                    "unique": true
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "checks": [],
 | 
			
		||||
            "foreignKeys": {},
 | 
			
		||||
            "nativeEnums": {}
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "nativeEnums": {}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								apps/api/src/database/migrations/Migration20240508080237.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								apps/api/src/database/migrations/Migration20240508080237.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,14 @@
 | 
			
		||||
import { Migration } from '@mikro-orm/migrations';
 | 
			
		||||
 | 
			
		||||
export class Migration20240508080237 extends Migration {
 | 
			
		||||
    async up(): Promise<void> {
 | 
			
		||||
        this.addSql(
 | 
			
		||||
            'create table "3rapp_posts" ("id" uuid not null, "title" varchar(255) not null, "body" text not null, "keywords" text[] null, "created_at" timestamptz not null, "updated_at" timestamptz not null, constraint "3rapp_posts_pkey" primary key ("id"));',
 | 
			
		||||
        );
 | 
			
		||||
        this.addSql('create index "3rapp_posts_title_index" on "3rapp_posts" ("title");');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    async down(): Promise<void> {
 | 
			
		||||
        this.addSql('drop table if exists "3rapp_posts" cascade;');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -15,8 +15,9 @@ async function bootstrap() {
 | 
			
		||||
    // 设置全局访问前缀
 | 
			
		||||
    app.setGlobalPrefix('api');
 | 
			
		||||
    // 启动后的输出
 | 
			
		||||
    await app.listen(3100, () => {
 | 
			
		||||
        console.log('api: http://localhost:3100');
 | 
			
		||||
    await app.listen(3001, () => {
 | 
			
		||||
        console.log();
 | 
			
		||||
        console.log('api: http://localhost:3001/api');
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
bootstrap();
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6
									
								
								apps/api/src/module.list.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								apps/api/src/module.list.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
			
		||||
import { ModuleMetadata } from '@nestjs/common';
 | 
			
		||||
 | 
			
		||||
import { ContentModule } from './modules/content/content.module';
 | 
			
		||||
import { UserModule } from './modules/user/user.module';
 | 
			
		||||
 | 
			
		||||
export const moduleImports: ModuleMetadata['imports'] = [UserModule, ContentModule];
 | 
			
		||||
@ -1,4 +1,11 @@
 | 
			
		||||
import { AnyEntity, EntityName } from '@mikro-orm/core';
 | 
			
		||||
import { Module } from '@nestjs/common';
 | 
			
		||||
 | 
			
		||||
import { PostEntity } from './entities/post.entity';
 | 
			
		||||
 | 
			
		||||
@Module({})
 | 
			
		||||
export class ContentModule {}
 | 
			
		||||
export class ContentModule {
 | 
			
		||||
    static entities(): EntityName<AnyEntity>[] {
 | 
			
		||||
        return [PostEntity];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,27 @@
 | 
			
		||||
import { Entity, PrimaryKey } from '@mikro-orm/core';
 | 
			
		||||
import { ArrayType, Entity, EntityRepositoryType, PrimaryKey, Property } from '@mikro-orm/core';
 | 
			
		||||
import { v4 } from 'uuid';
 | 
			
		||||
 | 
			
		||||
@Entity()
 | 
			
		||||
import { PostRepository } from '../repositories/post.repository';
 | 
			
		||||
 | 
			
		||||
@Entity({ repository: () => PostRepository, tableName: '3rapp_posts' })
 | 
			
		||||
export class PostEntity {
 | 
			
		||||
    @PrimaryKey()
 | 
			
		||||
    [EntityRepositoryType]?: PostRepository;
 | 
			
		||||
 | 
			
		||||
    @PrimaryKey({ type: 'uuid' })
 | 
			
		||||
    id = v4();
 | 
			
		||||
 | 
			
		||||
    @Property({ index: true })
 | 
			
		||||
    title: string;
 | 
			
		||||
 | 
			
		||||
    @Property({ type: 'text', lazy: true })
 | 
			
		||||
    body: string;
 | 
			
		||||
 | 
			
		||||
    @Property({ type: ArrayType, nullable: true })
 | 
			
		||||
    keywords?: string[];
 | 
			
		||||
 | 
			
		||||
    @Property()
 | 
			
		||||
    createdAt = new Date();
 | 
			
		||||
 | 
			
		||||
    @Property({ onUpdate: () => new Date() })
 | 
			
		||||
    updatedAt = new Date();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -8,5 +8,7 @@ export class PostService {
 | 
			
		||||
    constructor(protected postRepo: PostRepository) {}
 | 
			
		||||
 | 
			
		||||
    @CreateRequestContext<PostService>((t) => t.postRepo)
 | 
			
		||||
    async doSomething() {}
 | 
			
		||||
    async doSomething() {
 | 
			
		||||
        console.log('test');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										8
									
								
								apps/api/src/modules/database/helpers.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								apps/api/src/modules/database/helpers.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
			
		||||
import { ModuleMetadata } from '@nestjs/common';
 | 
			
		||||
import { isFunction } from 'lodash';
 | 
			
		||||
 | 
			
		||||
export const getEntities = (modules: ModuleMetadata['imports'] = []) =>
 | 
			
		||||
    modules
 | 
			
		||||
        .map((m) => ('entities' in m && isFunction(m.entities) ? m.entities() : []))
 | 
			
		||||
        .reduce((o, n) => [...o, ...n], []);
 | 
			
		||||
export const resolveConfig = () => {};
 | 
			
		||||
@ -6,6 +6,7 @@
 | 
			
		||||
        "dev": "turbo dev",
 | 
			
		||||
        "api:dev": "turbo dev --filter=api",
 | 
			
		||||
        "api:cli": "turbo cli --cwd=./apps/api --",
 | 
			
		||||
        "db": "turbo db --cwd=./apps/api --",
 | 
			
		||||
        "admin:dev": "turbo dev --filter=admin --filter=api",
 | 
			
		||||
        "web:dev": "turbo dev --filter=web --filter=api",
 | 
			
		||||
        "lint": "turbo lint",
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1069
									
								
								pnpm-lock.yaml
									
									
									
									
									
								
							
							
						
						
									
										1069
									
								
								pnpm-lock.yaml
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -23,6 +23,10 @@
 | 
			
		||||
        },
 | 
			
		||||
        "@3rapp/admin#dev": {
 | 
			
		||||
            "dependsOn": ["@3rapp/utils#build"]
 | 
			
		||||
        },
 | 
			
		||||
        "@3rapp/api#db": {
 | 
			
		||||
            "cache": false,
 | 
			
		||||
            "persistent": true
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user