80 lines
2.3 KiB
JavaScript
80 lines
2.3 KiB
JavaScript
const express = require("express");
|
||
const bcrypt = require("bcryptjs");
|
||
const jwt = require("jsonwebtoken");
|
||
const { PrismaClient } = require("@prisma/client");
|
||
const generateToken = require("../utils/generateToken");
|
||
const authMiddleware = require("../middleware/authMiddleware");
|
||
|
||
const router = express.Router();
|
||
const prisma = new PrismaClient();
|
||
|
||
|
||
// Kayıt ol
|
||
router.post("/register", async (req, res) => {
|
||
try {
|
||
const { username, email, password } = req.body;
|
||
|
||
const existingUser = await prisma.user.findUnique({ where: { email } });
|
||
if (existingUser) return res.status(400).json({ message: "Bu e-posta zaten kayıtlı." });
|
||
|
||
const hashedPassword = await bcrypt.hash(password, 10);
|
||
|
||
const user = await prisma.user.create({
|
||
data: { username, email, passwordHash: hashedPassword },
|
||
});
|
||
|
||
const token = generateToken(user.id);
|
||
|
||
res.json({ token, user: { id: user.id, username: user.username, email: user.email } });
|
||
} catch (err) {
|
||
res.status(500).json({ message: "Kayıt işlemi başarısız.", error: err.message });
|
||
}
|
||
});
|
||
|
||
|
||
// Giriş yap
|
||
router.post("/login", async (req, res) => {
|
||
try {
|
||
const { email, password } = req.body;
|
||
|
||
const user = await prisma.user.findUnique({ where: { email } });
|
||
if (!user)
|
||
return res.status(400).json({ message: "Kullanıcı bulunamadı." });
|
||
|
||
const isMatch = await bcrypt.compare(password, user.passwordHash);
|
||
if (!isMatch)
|
||
return res.status(401).json({ message: "Şifre hatalı." });
|
||
|
||
// userId olarak imzala
|
||
const token = generateToken(user.id);
|
||
|
||
res.json({
|
||
token,
|
||
user: { id: user.id, username: user.username, email: user.email,avatarUrl:user.avatarUrl },
|
||
});
|
||
} catch (err) {
|
||
console.error(err);
|
||
res
|
||
.status(500)
|
||
.json({ message: "Giriş işlemi başarısız.", error: err.message });
|
||
}
|
||
});
|
||
|
||
|
||
router.get("/me", authMiddleware, async (req, res) => {
|
||
try {
|
||
const user = await prisma.user.findUnique({
|
||
where: { id: req.user.userId },
|
||
select: { id: true, username: true, email: true },
|
||
})
|
||
|
||
if (!user) return res.status(404).json({ error: "Kullanıcı bulunamadı" })
|
||
res.json(user)
|
||
} catch (err) {
|
||
console.error(err)
|
||
res.status(500).json({ error: "Sunucu hatası" })
|
||
}
|
||
})
|
||
|
||
module.exports = router;
|