Skip to content

Commit

Permalink
add ES6 import and fix few errors
Browse files Browse the repository at this point in the history
  • Loading branch information
VolleyLord committed Nov 13, 2024
1 parent d23bd0d commit d79e819
Show file tree
Hide file tree
Showing 16 changed files with 82 additions and 89 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
auth-service/node_modules/
auth-service/.env
meetup-service/.env
.env
6 changes: 4 additions & 2 deletions auth-service/.env
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
PORT=5000
DATABASE_URL=postgres://postgres:rootroot@localhost:5432/meetups
JWT_SECRET=your_jwt_secret_key
DATABASE_URL=postgres://postgres:rootroot@localhost:5000/meetups #localhost:5432
JWT_SECRET=secret_key
SALT_ROUNDS=10
SESSION_EXPIRY='7d'
2 changes: 1 addition & 1 deletion auth-service/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ require('dotenv').config(); // Подключаем переменные из .e
const express = require('express');
const sequelize = require('./src/config/database');
const initDatabase = require('./initDatabase');
const authRoutes = require('./src/routes/authRoutes'); // Подключаем ваши маршруты
const authRoutes = require('./src/routes/authRoutes'); // Подключаем маршруты

const app = express();
const PORT = process.env.PORT || 5000;
Expand Down
3 changes: 2 additions & 1 deletion auth-service/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
"nodemon": "^2.0.15"
},
"author": "Artem",
"license": "MIT"
"license": "MIT",
"type": "module"
}

4 changes: 2 additions & 2 deletions auth-service/src/config/database.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// config/database.js
const { Sequelize } = require('sequelize');
import {Sequelize} from 'sequelize';

const sequelize = new Sequelize(process.env.DATABASE_URL, {
dialect: 'postgres',
Expand All @@ -15,4 +15,4 @@ const sequelize = new Sequelize(process.env.DATABASE_URL, {
}
})();

module.exports = sequelize;
export {sequelize}
16 changes: 11 additions & 5 deletions auth-service/src/controllers/authController.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const authService = require('../services/authService');
import * as authService from '../services/authService.js';

exports.registerUser = async (req, res) => {
export const registerUser = async (req, res) => {
try {
const user = await authService.registerUser(req.body);
res.status(201).json(user);
Expand All @@ -9,16 +9,22 @@ exports.registerUser = async (req, res) => {
}
};

exports.loginUser = async (req, res) => {
export const loginUser = async (req, res) => {
try {
const token = await authService.loginUser(req.body);
res.status(200).json({ token });
res.cookie('token', token, { httpOnly: true, maxAge: 604800000 }); // 7 days in ms
res.status(200).json({ message: 'Login successful' });
} catch (error) {
res.status(401).json({ message: error.message });
}
};

exports.updateProfile = async (req, res) => {
export const logoutUser = async (req, res) => {
res.clearCookie('token');
res.status(200).json({ message: 'Logout successful' });
};

export const updateProfile = async (req, res) => {
try {
const updatedUser = await authService.updateProfile(req.user.id, req.body);
res.status(200).json(updatedUser);
Expand Down
5 changes: 3 additions & 2 deletions auth-service/src/middleware/authMiddleware.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
const jwt = require('jsonwebtoken');
import {jwt} from 'jsonwebtoken';
const { JWT_SECRET } = process.env;

module.exports = (req, res, next) => {

export default (req, res, next) => {
const token = req.headers['authorization'];
if (!token) return res.status(403).json({ message: 'Token required' });

Expand Down
18 changes: 0 additions & 18 deletions auth-service/src/models/profileModel.js

This file was deleted.

21 changes: 12 additions & 9 deletions auth-service/src/models/userModel.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
const { DataTypes } = require('sequelize');
const sequelize = require('../config/database');
import { DataTypes } from 'sequelize';
import sequelize from '../config/database.js';

const User = sequelize.define('User', {
id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true },
id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
username: { type: DataTypes.STRING, unique: true, allowNull: false },
email: { type: DataTypes.STRING, unique: true, allowNull: false },
password: { type: DataTypes.STRING, allowNull: false },
createdAt: { type: DataTypes.DATE, defaultValue: DataTypes.NOW },
updatedAt: { type: DataTypes.DATE, defaultValue: DataTypes.NOW },
},
{ tableName: 'users' }
);
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
avatarUrl: DataTypes.STRING,
bio: DataTypes.TEXT,
}, {
tableName: 'users',
timestamps: true,
});

module.exports = User;
export default User;
8 changes: 4 additions & 4 deletions auth-service/src/repositories/userRepository.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
const User = require('../models/userModel');
import User from '../models/userModel.js';

exports.createUser = async (userData) => {
export const createUser = async (userData) => {
return await User.create(userData);
};

exports.findUserByEmail = async (email) => {
export const findUserByEmail = async (email) => {
return await User.findOne({ where: { email } });
};

exports.updateUser = async (userId, updatedData) => {
export const updateUser = async (userId, updatedData) => {
await User.update(updatedData, { where: { id: userId } });
return await User.findByPk(userId);
};
5 changes: 3 additions & 2 deletions auth-service/src/routes/authRoutes.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const express = require('express');
import {express} from 'express';

const router = express.Router();
const authController = require('../controllers/authController');
const validateToken = require('../middleware/authMiddleware');
Expand All @@ -12,4 +13,4 @@ router.post('/login', authController.loginUser);
// Обновление профиля
router.put('/profile', validateToken, authController.updateProfile);

module.exports = router;
export default router;
19 changes: 10 additions & 9 deletions auth-service/src/services/authService.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const userRepository = require('../repositories/userRepository');
const { JWT_SECRET } = process.env;
import bcrypt from 'bcryptjs';
import jwt from 'jsonwebtoken';
import * as userRepository from '../repositories/userRepository.js';

exports.registerUser = async (userData) => {
const hashedPassword = await bcrypt.hash(userData.password, 10);
const { JWT_SECRET, SALT_ROUNDS, SESSION_EXPIRY } = process.env;

export const registerUser = async (userData) => {
const hashedPassword = await bcrypt.hash(userData.password, parseInt(SALT_ROUNDS));
const user = await userRepository.createUser({ ...userData, password: hashedPassword });
return { id: user.id, email: user.email };
};

exports.loginUser = async ({ email, password }) => {
export const loginUser = async ({ email, password }) => {
const user = await userRepository.findUserByEmail(email);
if (!user || !(await bcrypt.compare(password, user.password))) {
throw new Error('Invalid credentials');
}
return jwt.sign({ id: user.id, email: user.email }, JWT_SECRET, { expiresIn: '1h' });
return jwt.sign({ id: user.id, email: user.email }, JWT_SECRET, { expiresIn: SESSION_EXPIRY });
};

exports.updateProfile = async (userId, newProfileData) => {
export const updateProfile = async (userId, newProfileData) => {
return await userRepository.updateUser(userId, newProfileData);
};
19 changes: 6 additions & 13 deletions database/init.sql
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,6 @@ CREATE TABLE users (
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Создание таблицы профилей пользователей
CREATE TABLE profiles (
id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(id) ON DELETE CASCADE,
first_name VARCHAR(50),
last_name VARCHAR(50),
avatar_url VARCHAR(255),
Expand All @@ -25,20 +17,21 @@ CREATE TABLE meetups (
id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
description TEXT,
tags TEXT[], -- Массив строк для тегов
tags TEXT[],
event_date TIMESTAMP,
latitude FLOAT, -- Широта
longitude FLOAT, -- Долгота
latitude FLOAT,
longitude FLOAT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Создание таблицы участников митапов (связь многие-ко-многим)
-- Создание таблицы участников митапов
CREATE TABLE meetup_attendees (
meetup_id INT REFERENCES meetups(id) ON DELETE CASCADE,
user_id INT REFERENCES users(id) ON DELETE CASCADE,
status VARCHAR(20), -- Статус участия
PRIMARY KEY (meetup_id, user_id)
);

-- Индекс для улучшения поиска по тегам
-- Индекс для поиска по тегам
CREATE INDEX idx_meetups_tags ON meetups USING GIN (tags);
10 changes: 5 additions & 5 deletions meetup-service/src/models/meetupAttendeeModel.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const { DataTypes } = require('sequelize');
const sequelize = require('../config/database');
const User = require('./userModel');
const Meetup = require('./meetupModel');
import { sequelize } from '../config/database';
import User from './auth-service/src/userModel';
import Meetup from './meetupModel';
import {DataTypes } from'sequelize';

const MeetupAttendee = sequelize.define('MeetupAttendee', {
meetupId: { type: DataTypes.INTEGER, references: { model: Meetup, key: 'id' }, primaryKey: true },
Expand All @@ -12,4 +12,4 @@ const MeetupAttendee = sequelize.define('MeetupAttendee', {
Meetup.belongsToMany(User, { through: MeetupAttendee, foreignKey: 'meetupId' });
User.belongsToMany(Meetup, { through: MeetupAttendee, foreignKey: 'userId' });

module.exports = MeetupAttendee;
export default MeetupAttendee;
7 changes: 3 additions & 4 deletions meetup-service/src/models/meetupModel.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const { DataTypes } = require('sequelize');
const sequelize = require('../config/database');
import {DataTypes } from'sequelize';
import { sequelize } from '../config/database';

const Meetup = sequelize.define('Meetup', {
id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true },
Expand All @@ -12,5 +12,4 @@ const Meetup = sequelize.define('Meetup', {
createdAt: { type: DataTypes.DATE, defaultValue: DataTypes.NOW },
updatedAt: { type: DataTypes.DATE, defaultValue: DataTypes.NOW }
});

module.exports = Meetup;
export default Meetup;
24 changes: 12 additions & 12 deletions meetup-service/src/services/meetupService.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
const Meetup = require('../models/meetupModel');
const MeetupAttendee = require('../models/meetupAttendeeModel');
import MeetupAttendee from '../models/meetupAttendeeModel.js';
import Meetup from '../models/meetupModel.js';


async function createMeetup(data) {
return await Meetup.create(data);
Expand All @@ -13,17 +14,16 @@ async function registerAttendee(meetupId, userId) {
return await MeetupAttendee.create({ meetupId, userId, status: 'registered' });
}

async function updateAttendeeStatus(meetupId, userId, status) {
const attendee = await MeetupAttendee.findOne({
where: { meetupId, userId },
});
if (attendee) {
attendee.status = status;
await attendee.save();
return attendee;

export const updateAttendeeStatus = async (meetupId, userId, status) => {
const attendee = await MeetupAttendee.findOne({ where: { meetupId, userId } });
if (!attendee) {
throw new Error(`No attendee found for meetup ${meetupId} and user ${userId}`);
}
return null;
}
attendee.status = status;
await attendee.save();
return attendee;
};

module.exports = {
createMeetup,
Expand Down

0 comments on commit d79e819

Please sign in to comment.