95 lines
2.3 KiB
JavaScript
95 lines
2.3 KiB
JavaScript
const Player = require("../models/Player");
|
|
const { Op } = require("sequelize");
|
|
const Message = require("../models/Message.js");
|
|
|
|
class ChatManager {
|
|
async getGlobalHistory(limit = 50) {
|
|
try {
|
|
return await Message.findAll({
|
|
where: { type: "global" },
|
|
limit,
|
|
order: [["createdAt", "ASC"]],
|
|
include: [
|
|
{
|
|
model: Player,
|
|
as: "sender",
|
|
attributes: ["username"],
|
|
},
|
|
],
|
|
});
|
|
} catch (error) {
|
|
console.error("History Error:", error);
|
|
return [];
|
|
}
|
|
}
|
|
|
|
async saveMessage({ content, type, senderId, receiverId = null }) {
|
|
try {
|
|
const newMessage = await Message.create({
|
|
content,
|
|
type,
|
|
senderId,
|
|
receiverId,
|
|
});
|
|
const sender = await Player.findByPk(senderId, {
|
|
attributes: ["username"],
|
|
});
|
|
|
|
return {
|
|
id: newMessage.id,
|
|
content: newMessage.content,
|
|
type: newMessage.type,
|
|
senderId: newMessage.senderId,
|
|
senderName: sender ? sender.username : "Unknown",
|
|
receiverId: newMessage.receiverId,
|
|
createdAt: newMessage.createdAt,
|
|
};
|
|
} catch (error) {
|
|
console.error("Save Message Error:", error);
|
|
throw error;
|
|
}
|
|
}
|
|
async getPrivateHistory(myId, friendId, limit = 50) {
|
|
try {
|
|
return await Message.findAll({
|
|
where: {
|
|
type: "private",
|
|
[Op.or]: [
|
|
{ senderId: myId, receiverId: friendId },
|
|
{ senderId: friendId, receiverId: myId },
|
|
],
|
|
},
|
|
limit,
|
|
order: [["createdAt", "ASC"]],
|
|
include: [
|
|
{
|
|
model: Player,
|
|
as: "sender",
|
|
attributes: ["username"],
|
|
},
|
|
],
|
|
});
|
|
} catch (error) {
|
|
console.error("Private History Error:", error);
|
|
return [];
|
|
}
|
|
}
|
|
async searchPlayers(query, excludeId) {
|
|
try {
|
|
return await Player.findAll({
|
|
where: {
|
|
username: { [Op.like]: `%${query}%` },
|
|
id: { [Op.ne]: excludeId },
|
|
},
|
|
attributes: ["id", "username", "level"],
|
|
limit: 10,
|
|
});
|
|
} catch (error) {
|
|
console.error("Search Error:", error);
|
|
return [];
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = new ChatManager();
|