- Deleted obsolete service architecture templates in both English and Vietnamese to streamline content. - Updated the Vietnamese architecture documentation with improved Mermaid diagrams for better visual clarity. - Enhanced color coding in diagrams to improve readability and consistency across documentation. - Added a new section detailing visual indicators for better understanding of architecture components.
111 lines
3.3 KiB
TypeScript
111 lines
3.3 KiB
TypeScript
import { PrismaClient } from '@prisma/client';
|
|
import { logger } from '@goodgo/logger';
|
|
|
|
// EN: Initialize Prisma client for seeding
|
|
// VI: Khởi tạo Prisma client cho seeding
|
|
const prisma = new PrismaClient();
|
|
|
|
async function main() {
|
|
logger.info('Starting database seeding / Bắt đầu seeding database');
|
|
|
|
// EN: Seed initial features
|
|
// VI: Seed các tính năng ban đầu
|
|
const features = [
|
|
{
|
|
name: 'health-checks',
|
|
title: 'Health Checks',
|
|
description: 'EN: System health monitoring endpoints / VI: Endpoints giám sát sức khỏe hệ thống',
|
|
enabled: true,
|
|
version: '1.0.0',
|
|
tags: ['system', 'monitoring'],
|
|
config: {
|
|
endpoints: ['/health', '/health/ready', '/health/live'],
|
|
interval: 30000, // 30 seconds
|
|
},
|
|
},
|
|
{
|
|
name: 'metrics',
|
|
title: 'Prometheus Metrics',
|
|
description: 'EN: Application metrics collection / VI: Thu thập metrics ứng dụng',
|
|
enabled: true,
|
|
version: '1.0.0',
|
|
tags: ['observability', 'monitoring'],
|
|
config: {
|
|
endpoint: '/metrics',
|
|
format: 'prometheus',
|
|
defaultMetrics: true,
|
|
},
|
|
},
|
|
{
|
|
name: 'rate-limiting',
|
|
title: 'Rate Limiting',
|
|
description: 'EN: API rate limiting protection / VI: Bảo vệ giới hạn tốc độ API',
|
|
enabled: true,
|
|
version: '1.0.0',
|
|
tags: ['security', 'performance'],
|
|
config: {
|
|
windowMs: 900000, // 15 minutes
|
|
max: 100, // limit each IP to 100 requests per windowMs
|
|
standardHeaders: true,
|
|
legacyHeaders: false,
|
|
},
|
|
},
|
|
{
|
|
name: 'cors',
|
|
title: 'CORS Protection',
|
|
description: 'EN: Cross-Origin Resource Sharing configuration / VI: Cấu hình Cross-Origin Resource Sharing',
|
|
enabled: true,
|
|
version: '1.0.0',
|
|
tags: ['security', 'api'],
|
|
config: {
|
|
origins: ['http://localhost:3000'],
|
|
credentials: true,
|
|
methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
|
|
},
|
|
},
|
|
{
|
|
name: 'tracing',
|
|
title: 'Distributed Tracing',
|
|
description: 'EN: Jaeger/OpenTelemetry distributed tracing / VI: Distributed tracing với Jaeger/OpenTelemetry',
|
|
enabled: false,
|
|
version: '1.0.0',
|
|
tags: ['observability', 'tracing'],
|
|
config: {
|
|
serviceName: 'microservice-template',
|
|
jaegerEndpoint: 'http://localhost:14268/api/traces',
|
|
samplingRate: 1.0,
|
|
},
|
|
},
|
|
];
|
|
|
|
// EN: Create features in database
|
|
// VI: Tạo features trong database
|
|
for (const feature of features) {
|
|
await prisma.feature.upsert({
|
|
where: { name: feature.name },
|
|
update: {
|
|
title: feature.title,
|
|
description: feature.description,
|
|
enabled: feature.enabled,
|
|
version: feature.version,
|
|
tags: feature.tags,
|
|
config: feature.config,
|
|
updatedAt: new Date(),
|
|
},
|
|
create: feature,
|
|
});
|
|
|
|
logger.info(`Seeded feature: ${feature.name} / Đã seed feature: ${feature.name}`);
|
|
}
|
|
|
|
logger.info('Database seeding completed / Hoàn thành seeding database');
|
|
}
|
|
|
|
main()
|
|
.catch((e) => {
|
|
logger.error('Error during database seeding / Lỗi trong quá trình seeding database', { error: e });
|
|
process.exit(1);
|
|
})
|
|
.finally(async () => {
|
|
await prisma.$disconnect();
|
|
}); |