register user one start

This commit is contained in:
romantarkin 2025-07-30 10:09:56 +05:00
parent 9fa3e76810
commit 1e0b56e7f7
2 changed files with 109 additions and 1 deletions

62
auth-service/README.md Normal file
View File

@ -0,0 +1,62 @@
# Auth Service
Сервис аутентификации для системы управления рекламой.
## Установка и настройка
1. Установите зависимости:
```bash
npm install
```
2. Создайте файл `.env` в корне проекта со следующими переменными:
```env
# Database configuration
DB_HOST=localhost
DB_PORT=3306
DB_NAME=auth_service
DB_USER=root
DB_PASSWORD=password
# JWT configuration
JWT_SECRET=your-secret-key-here
# Admin configuration (optional)
ADMIN_PASSWORD=admin123
# Server configuration
PORT=3000
```
3. Запустите сервис:
```bash
npm start
```
## Инициализация базы данных
При первом запуске сервиса, если таблица пользователей пуста, автоматически создается учетная запись администратора:
- **Email**: admin@example.com
- **Пароль**: значение из переменной `ADMIN_PASSWORD` или `admin123` по умолчанию
- **Роль**: admin
**Важно**: После первого входа обязательно измените пароль администратора!
## API Endpoints
- `POST /api/auth/login` - Вход в систему
- `GET /api/auth/users` - Получить список пользователей
- `POST /api/auth/users` - Создать пользователя
- `PUT /api/auth/users/:id` - Обновить пользователя
- `DELETE /api/auth/users/:id` - Удалить пользователя
## Структура проекта
```
src/
├── controllers/ # Контроллеры для обработки запросов
├── models/ # Модели Sequelize
├── routes/ # Маршруты API
└── index.js # Точка входа приложения
```

View File

@ -1,8 +1,9 @@
import dotenv from 'dotenv';
dotenv.config();
import express from 'express';
import { sequelize } from './models/index.js';
import { sequelize, User, Role } from './models/index.js';
import routes from './routes/index.js';
import bcrypt from 'bcrypt';
const app = express();
app.use(express.json());
@ -12,11 +13,56 @@ app.get('/', (req, res) => {
res.send('Auth Service is running');
});
// Функция для инициализации базы данных
async function initializeDatabase() {
try {
// Проверяем, есть ли пользователи в базе данных
const userCount = await User.count();
if (userCount === 0) {
console.log('База данных пуста. Создаю администратора...');
// Создаем роль администратора, если её нет
let adminRole = await Role.findOne({ where: { name: 'admin' } });
if (!adminRole) {
adminRole = await Role.create({
name: 'admin',
description: 'Администратор системы'
});
console.log('Роль администратора создана');
}
// Создаем пользователя администратора
const adminPassword = process.env.ADMIN_PASSWORD || 'admin123';
const passwordHash = await bcrypt.hash(adminPassword, 10);
await User.create({
email: 'admin@example.com',
name: 'Администратор',
password_hash: passwordHash,
role_id: adminRole.id
});
console.log('Администратор создан:');
console.log('Email: admin@example.com');
console.log('Пароль:', adminPassword);
console.log('Пожалуйста, измените пароль после первого входа!');
} else {
console.log(`В базе данных найдено ${userCount} пользователей`);
}
} catch (error) {
console.error('Ошибка при инициализации базы данных:', error);
}
}
(async () => {
try {
await sequelize.authenticate();
await sequelize.sync({ alter: true });
console.log('Database connected and models synced');
// Инициализируем базу данных
await initializeDatabase();
} catch (err) {
console.error('Unable to connect to the database:', err);
process.exit(1);