Skip to content

Commit eaefc8d

Browse files
committed
feat(packages/api-core): implemented shared db connection module
1 parent 9c9a281 commit eaefc8d

File tree

21 files changed

+552
-85
lines changed

21 files changed

+552
-85
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ docker:
66

77
# Target to build Docker containers
88
dev-docker:
9-
docker compose -f docker-compose.yml --env-file ./.env.development up --build -V
9+
docker-compose -f docker-compose.yml --env-file ./.env.development up --build -V
1010

1111
docker-clean:
1212
docker compose rm -f

apps/api-gateway/Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ COPY tooling ./tooling
1818
COPY packages ./packages
1919

2020
RUN pnpm install && \
21+
pnpm add -w -D dotenv-cli && \
2122
pnpm -r prebuild && \
2223
pnpm -r build && \
2324
pnpm i && \

apps/api-gateway/turbo.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"$schema": "https://turborepo.org/schema.json",
3+
"extends": ["//"],
4+
"tasks": {
5+
"start:prod": {
6+
"persistent": true
7+
}
8+
}
9+
}

apps/users-microservice/Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ COPY tooling ./tooling
1818
COPY packages ./packages
1919

2020
RUN pnpm install && \
21+
pnpm add -w -D dotenv-cli && \
2122
pnpm -r prebuild && \
2223
pnpm -r build && \
2324
pnpm i && \

apps/users-microservice/package.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,13 @@
5353
"class-transformer": "catalog:nestjs",
5454
"class-validator": "catalog:nestjs",
5555
"dotenv-cli": "catalog:",
56+
"drizzle-kit": "catalog:nestjs",
57+
"drizzle-orm": "catalog:nestjs",
58+
"drizzle-zod": "catalog:nestjs",
59+
"eslint-plugin-drizzle": "catalog:nestjs",
5660
"nats": "catalog:nestjs",
61+
"pg": "catalog:nestjs",
62+
"postgres": "catalog:nestjs",
5763
"reflect-metadata": "catalog:nestjs",
5864
"rxjs": "catalog:nestjs",
5965
"zod": "catalog:"
Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,23 @@
11
import { Module } from "@nestjs/common";
22

3-
import { APICoreModule } from "@app/api-core";
3+
import {
4+
APICoreModule,
5+
DATABASE_CONNECTION,
6+
DatabaseModule,
7+
} from "@app/api-core";
48

59
import { AppController } from "./app.controller";
10+
import { users } from "./schema/users";
611

712
@Module({
8-
imports: [APICoreModule],
13+
imports: [
14+
APICoreModule,
15+
DatabaseModule.forRootAsync({
16+
dbName: "USER",
17+
connectionName: DATABASE_CONNECTION.USERS_DATABASE_CONNECTION,
18+
schema: { users },
19+
}),
20+
],
921
controllers: [AppController],
1022
})
1123
export class AppModule {}

apps/users-microservice/src/main.ts

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,36 @@ import { ConfigService } from "@nestjs/config";
22
import { NestFactory } from "@nestjs/core";
33
import { MicroserviceOptions, Transport } from "@nestjs/microservices";
44

5+
import { logger } from "@app/api-core";
6+
57
import { AppModule } from "./app.module";
68

79
async function bootstrap() {
8-
const appContext = await NestFactory.createApplicationContext(AppModule);
9-
const configService = appContext.get(ConfigService);
10-
const natsPort = configService.get<number>("app.NATS_PORT");
11-
const natsHost = configService.get<string>("app.NATS_HOST");
12-
13-
const app = await NestFactory.createMicroservice<MicroserviceOptions>(
14-
AppModule,
15-
{
16-
transport: Transport.NATS,
17-
options: {
18-
servers: [`nats://${natsHost}:${natsPort}`],
10+
try {
11+
const app = await NestFactory.createMicroservice<MicroserviceOptions>(
12+
AppModule,
13+
{
14+
transport: Transport.NATS,
15+
options: (configService: ConfigService) => ({
16+
servers: [
17+
`nats://${configService.get("app.NATS_HOST")}:${configService.get("app.NATS_PORT")}`,
18+
],
19+
}),
1920
},
20-
},
21-
);
21+
);
2222

23-
await app.listen();
23+
await app.listen();
24+
logger.info(`User Microservice is listening`);
25+
26+
// Дополнительное логирование конфигурации
27+
const configService = app.get(ConfigService);
28+
logger.info(
29+
`Connected to NATS server at ${configService.get("app.NATS_HOST")}:${configService.get("app.NATS_PORT")}`,
30+
);
31+
} catch (error) {
32+
logger.error(`Failed to start microservice`, error);
33+
process.exit(1);
34+
}
2435
}
36+
2537
bootstrap();
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { pgTable, serial, text, varchar } from "drizzle-orm/pg-core";
2+
3+
export const users = pgTable("users", {
4+
id: serial("id").primaryKey(),
5+
name: text("name").notNull(),
6+
email: varchar("email", { length: 255 }).notNull().unique(),
7+
});

apps/webapp/src/app/layout.tsx

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import type { Metadata, Viewport } from "next";
22

33
import { cn } from "@app/ui";
4-
import { ThemeProvider, ThemeToggle } from "@app/ui/theme";
5-
import { Toaster } from "@app/ui/toast";
64

75
import "~/app/globals.css";
86

@@ -23,13 +21,14 @@ export default function RootLayout(props: { children: React.ReactNode }) {
2321
"min-h-screen bg-background font-sans text-foreground antialiased",
2422
)}
2523
>
26-
<ThemeProvider attribute="class" defaultTheme="system" enableSystem>
27-
{props.children}
28-
<div className="absolute bottom-4 right-4">
29-
<ThemeToggle />
30-
</div>
31-
<Toaster />
32-
</ThemeProvider>
24+
{props.children}
25+
{/*<ThemeProvider attribute="class" defaultTheme="system" enableSystem>*/}
26+
{/* {props.children}*/}
27+
{/* <div className="absolute bottom-4 right-4">*/}
28+
{/* <ThemeToggle />*/}
29+
{/* </div>*/}
30+
{/* <Toaster />*/}
31+
{/*</ThemeProvider>*/}
3332
</body>
3433
</html>
3534
);

docker-compose.yml

Lines changed: 50 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -12,44 +12,60 @@ services:
1212
image: redis:latest
1313
ports:
1414
- "${REDIS_PORT}:6379"
15+
postgres:
16+
image: postgres:latest
17+
environment:
18+
POSTGRES_USER: ${POSTGRES_USER:-admin}
19+
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-admin123}
20+
POSTGRES_MULTIPLE_DATABASES: ${POSTGRES_MULTIPLE_DATABASES:-users_db,tasks_db}
21+
ports:
22+
- "${POSTGRES_PORT:-5432}:5432"
23+
volumes:
24+
- postgres_data:/var/lib/postgresql/data
25+
- ./scripts/docker-postgresql-multiple-databases:/docker-entrypoint-initdb.d
26+
healthcheck:
27+
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-admin}"]
28+
interval: 10s
29+
timeout: 5s
30+
retries: 5
1531

1632
# DEV
33+
# dev-api-gateway:
34+
# build:
35+
# context: .
36+
# dockerfile: apps/api-gateway/Dockerfile
37+
# target: dev
38+
# ports:
39+
# - "8080:8080"
40+
# volumes:
41+
# - .:/app
42+
# - /app/node_modules
43+
# env_file:
44+
# - .env.development
45+
# environment:
46+
# - NATS_HOST=nats
47+
# depends_on:
48+
# - nats
49+
# command: ["pnpm", "run", "-C", "apps/api-gateway", "start"]
1750

18-
dev-api-gateway:
19-
build:
20-
context: .
21-
dockerfile: apps/api-gateway/Dockerfile
22-
target: dev
23-
image: api-gateway:latest
24-
ports:
25-
- "8080:8080"
26-
volumes:
27-
- .:/app
28-
- /app/node_modules
29-
env_file:
30-
- .env.development
31-
environment:
32-
- NATS_HOST=nats
33-
depends_on:
34-
- nats
35-
command: ["pnpm", "run", "-C", "apps/api-gateway", "start"]
51+
# dev-users-microservice:
52+
# build:
53+
# context: .
54+
# dockerfile: apps/users-microservice/Dockerfile
55+
# target: dev
56+
# volumes:
57+
# - .:/app
58+
# - /app/node_modules
59+
# env_file:
60+
# - .env.development
61+
# environment:
62+
# - NATS_HOST=nats
63+
# depends_on:
64+
# - nats
65+
# command: ["pnpm", "run", "-C", "apps/users-microservice", "start"]
3666

37-
dev-users-microservice:
38-
build:
39-
context: .
40-
dockerfile: apps/users-microservice/Dockerfile
41-
target: dev
42-
image: users-microservice:latest
43-
volumes:
44-
- .:/app
45-
- /app/node_modules
46-
env_file:
47-
- .env.development
48-
environment:
49-
- NATS_HOST=nats
50-
depends_on:
51-
- nats
52-
command: ["pnpm", "run", "-C", "apps/users-microservice", "start"]
67+
volumes:
68+
postgres_data:
5369

5470
networks:
5571
default:

0 commit comments

Comments
 (0)