Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions Node.js
Original file line number Diff line number Diff line change
@@ -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:[email protected]/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}`));