From 7c5fd43e07584d39f7c2627a817a90b63d736e89 Mon Sep 17 00:00:00 2001 From: crha-spec Date: Fri, 19 Sep 2025 10:39:21 +0300 Subject: [PATCH] Create Node.js --- Node.js | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 Node.js diff --git a/Node.js b/Node.js new file mode 100644 index 0000000..a514005 --- /dev/null +++ b/Node.js @@ -0,0 +1,73 @@ +// server.js +const express = require('express'); +const mongoose = require('mongoose'); +const cors = require('cors'); +const bodyParser = require('body-parser'); +const jwt = require('jsonwebtoken'); +const path = require('path'); +const AgoraRTM = require('agora-access-token'); + +const APP_ID = "3962323028604aeaa62ef04c08298341"; +const APP_CERTIFICATE = "d84778cf575a41d3aee9cfdd0f6b308c"; +const JWT_SECRET = "supersecret123"; // kendi belirle +const MONGO_URI = "mongodb+srv://crissahahhaha_db_user:t88C05ypHKMmWfEh@cluster0.mongodb.net/instachat?retryWrites=true&w=majority"; + +const app = express(); +app.use(cors()); +app.use(bodyParser.json()); +app.use(express.static(path.join(__dirname,'public'))); + +// MongoDB Bağlantısı +mongoose.connect(MONGO_URI, {useNewUrlParser:true, useUnifiedTopology:true}) +.then(()=>console.log("MongoDB connected")) +.catch(err=>console.error(err)); + +// Modeller +const UserSchema = new mongoose.Schema({ email:String, name:String, online:Boolean, lastSeen:Date }); +const User = mongoose.model('User',UserSchema); + +const MessageSchema = new mongoose.Schema({ sender:String, receiver:String, text:String, timestamp:Date }); +const Message = mongoose.model('Message',MessageSchema); + +// Token üretim fonksiyonu +function generateRTMToken(uid){ + const expirationTimeInSeconds = 3600; + const currentTimestamp = Math.floor(Date.now()/1000); + const privilegeExpiredTs = currentTimestamp + expirationTimeInSeconds; + return AgoraRTM.RtmTokenBuilder.buildToken(APP_ID, APP_CERTIFICATE, uid, AgoraRTM.RtmRole.Rtm_User, privilegeExpiredTs); +} + +// Login demo +app.post('/login', async (req,res)=>{ + const {email,name} = req.body; + let user = await User.findOne({email}); + if(!user) user = await User.create({email,name,online:true,lastSeen:new Date()}); + else { user.online=true; user.lastSeen=new Date(); await user.save(); } + const token = jwt.sign({email},JWT_SECRET); + const rtmToken = generateRTMToken(user._id.toString()); + res.json({token,userId:user._id,rtmToken}); +}); + +// Online kullanıcılar +app.get('/users/online', async (req,res)=>{ + const users = await User.find({online:true}); + res.json(users); +}); + +// Mesaj gönder / kaydet +app.post('/messages', async (req,res)=>{ + const {sender,receiver,text} = req.body; + const msg = await Message.create({sender,receiver,text,timestamp:new Date()}); + res.json(msg); +}); + +// Mesaj geçmişi +app.get('/messages/:user1/:user2', async (req,res)=>{ + const {user1,user2} = req.params; + const messages = await Message.find({$or:[{sender:user1,receiver:user2},{sender:user2,receiver:user1}]}).sort({timestamp:1}); + res.json(messages); +}); + +// Sunucu başlat +const PORT = process.env.PORT || 3000; +app.listen(PORT,()=>console.log(`Server running on port ${PORT}`));