update
This commit is contained in:
parent
fa01d3c04c
commit
99401e713c
@ -7,6 +7,7 @@
|
|||||||
"license": "UNLICENSED",
|
"license": "UNLICENSED",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"cli": "nest",
|
"cli": "nest",
|
||||||
|
"db": "mikro-orm",
|
||||||
"dev": "pnpm start:dev",
|
"dev": "pnpm start:dev",
|
||||||
"build": "nest build",
|
"build": "nest build",
|
||||||
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
||||||
@ -22,13 +23,17 @@
|
|||||||
"test:e2e": "jest --config ./test/jest-e2e.json"
|
"test:e2e": "jest --config ./test/jest-e2e.json"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@mikro-orm/cli": "^6.2.5",
|
||||||
"@mikro-orm/core": "^6.2.5",
|
"@mikro-orm/core": "^6.2.5",
|
||||||
|
"@mikro-orm/migrations": "^6.2.5",
|
||||||
"@mikro-orm/nestjs": "^5.2.3",
|
"@mikro-orm/nestjs": "^5.2.3",
|
||||||
"@mikro-orm/postgresql": "^6.2.5",
|
"@mikro-orm/postgresql": "^6.2.5",
|
||||||
|
"@mikro-orm/seeder": "^6.2.5",
|
||||||
"@nestjs/common": "^10.3.8",
|
"@nestjs/common": "^10.3.8",
|
||||||
"@nestjs/core": "^10.3.8",
|
"@nestjs/core": "^10.3.8",
|
||||||
"@nestjs/platform-fastify": "^10.3.8",
|
"@nestjs/platform-fastify": "^10.3.8",
|
||||||
"fastify": "^4.26.2",
|
"fastify": "^4.26.2",
|
||||||
|
"lodash": "^4.17.21",
|
||||||
"reflect-metadata": "^0.2.2",
|
"reflect-metadata": "^0.2.2",
|
||||||
"rxjs": "^7.8.1",
|
"rxjs": "^7.8.1",
|
||||||
"uuid": "^9.0.1"
|
"uuid": "^9.0.1"
|
||||||
@ -41,6 +46,7 @@
|
|||||||
"@swc/cli": "^0.3.12",
|
"@swc/cli": "^0.3.12",
|
||||||
"@swc/core": "^1.5.3",
|
"@swc/core": "^1.5.3",
|
||||||
"@types/jest": "^29.5.12",
|
"@types/jest": "^29.5.12",
|
||||||
|
"@types/lodash": "^4.17.1",
|
||||||
"@types/node": "^20.12.8",
|
"@types/node": "^20.12.8",
|
||||||
"@types/supertest": "^6.0.2",
|
"@types/supertest": "^6.0.2",
|
||||||
"@types/uuid": "^9.0.8",
|
"@types/uuid": "^9.0.8",
|
||||||
@ -71,5 +77,12 @@
|
|||||||
],
|
],
|
||||||
"coverageDirectory": "../coverage",
|
"coverageDirectory": "../coverage",
|
||||||
"testEnvironment": "node"
|
"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 { MikroOrmModule } from '@mikro-orm/nestjs';
|
||||||
import { PostgreSqlDriver } from '@mikro-orm/postgresql';
|
|
||||||
import { Module } from '@nestjs/common';
|
import { Module } from '@nestjs/common';
|
||||||
|
|
||||||
import { AppController } from './app.controller';
|
import { AppController } from './app.controller';
|
||||||
import { AppService } from './app.service';
|
import { AppService } from './app.service';
|
||||||
import { ContentModule } from './modules/content/content.module';
|
import { database } from './config/database.config';
|
||||||
import { UserModule } from './modules/user/user.module';
|
import { moduleImports } from './module.list';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
MikroOrmModule.forRoot({
|
MikroOrmModule.forRoot({
|
||||||
host: '127.0.0.1',
|
...database(),
|
||||||
user: 'postgres',
|
registerRequestContext: true,
|
||||||
password: '123456',
|
// autoLoadEntities: true,
|
||||||
dbName: '3rapp',
|
|
||||||
driver: PostgreSqlDriver,
|
|
||||||
autoLoadEntities: true,
|
|
||||||
}),
|
}),
|
||||||
UserModule,
|
...moduleImports,
|
||||||
ContentModule,
|
|
||||||
],
|
],
|
||||||
controllers: [AppController],
|
controllers: [AppController],
|
||||||
providers: [AppService],
|
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');
|
app.setGlobalPrefix('api');
|
||||||
// 启动后的输出
|
// 启动后的输出
|
||||||
await app.listen(3100, () => {
|
await app.listen(3001, () => {
|
||||||
console.log('api: http://localhost:3100');
|
console.log();
|
||||||
|
console.log('api: http://localhost:3001/api');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
bootstrap();
|
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 { Module } from '@nestjs/common';
|
||||||
|
|
||||||
|
import { PostEntity } from './entities/post.entity';
|
||||||
|
|
||||||
@Module({})
|
@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';
|
import { v4 } from 'uuid';
|
||||||
|
|
||||||
@Entity()
|
import { PostRepository } from '../repositories/post.repository';
|
||||||
|
|
||||||
|
@Entity({ repository: () => PostRepository, tableName: '3rapp_posts' })
|
||||||
export class PostEntity {
|
export class PostEntity {
|
||||||
@PrimaryKey()
|
[EntityRepositoryType]?: PostRepository;
|
||||||
|
|
||||||
|
@PrimaryKey({ type: 'uuid' })
|
||||||
id = v4();
|
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) {}
|
constructor(protected postRepo: PostRepository) {}
|
||||||
|
|
||||||
@CreateRequestContext<PostService>((t) => t.postRepo)
|
@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",
|
"dev": "turbo dev",
|
||||||
"api:dev": "turbo dev --filter=api",
|
"api:dev": "turbo dev --filter=api",
|
||||||
"api:cli": "turbo cli --cwd=./apps/api --",
|
"api:cli": "turbo cli --cwd=./apps/api --",
|
||||||
|
"db": "turbo db --cwd=./apps/api --",
|
||||||
"admin:dev": "turbo dev --filter=admin --filter=api",
|
"admin:dev": "turbo dev --filter=admin --filter=api",
|
||||||
"web:dev": "turbo dev --filter=web --filter=api",
|
"web:dev": "turbo dev --filter=web --filter=api",
|
||||||
"lint": "turbo lint",
|
"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": {
|
"@3rapp/admin#dev": {
|
||||||
"dependsOn": ["@3rapp/utils#build"]
|
"dependsOn": ["@3rapp/utils#build"]
|
||||||
|
},
|
||||||
|
"@3rapp/api#db": {
|
||||||
|
"cache": false,
|
||||||
|
"persistent": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user