Skip to content
Open
Show file tree
Hide file tree
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
55 changes: 37 additions & 18 deletions app/api/auth/register/route.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,41 +2,60 @@ import { connectToDB } from "@db/connect";
import User from "@models/UserModel";
import { hash } from "bcryptjs";

export const POST = async (req, res) => {
export const POST = async (req) => {
try {
await connectToDB();

const { username, email, password } = await req.json();

// Validate input fields
if (!username || !email || !password) {
return new Response(
JSON.stringify({ message: "All fields are required" }),
{
status: 400,
headers: {
"Content-Type": "application/json",
},
}
);
}

const existingUser = await User.findOne({ email });

if (existingUser) {
return new Response(JSON.stringify({ message: "User already exists" }), {
status: 400,
headers: {
"Content-Type": "application/json",
},
});
return new Response(
JSON.stringify({ message: "User already exists" }),
{
status: 400,
headers: {
"Content-Type": "application/json",
},
}
);
}

const hashedPass = await hash(password, 10);
const hashedPassword = await hash(password, 10);

const newUser = await User.create({
const newUser = new User({
username,
email,
password: hashedPass,
password: hashedPassword,
});

await newUser.save();

return new Response(JSON.stringify(newUser), {
status: 200,
headers: {
"Content-Type": "application/json",
},
});
} catch (e) {
console.log(e);
return new Response(
JSON.stringify({ message: "User created successfully", user: newUser }),
{
status: 201,
headers: {
"Content-Type": "application/json",
},
}
);
} catch (error) {
console.error("Error creating user:", error);
return new Response(
JSON.stringify({ message: "Failed to create the new user" }),
{
Expand Down
49 changes: 15 additions & 34 deletions app/api/chats/route.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,62 +6,43 @@ export const POST = async (req) => {
try {
await connectToDB();

const body = await req.json();

// console.log(body);

const { currentUserID, isGroup, members, groupPhoto, groupName } = body;
const {
currentUserID,
isGroup,
members,
groupPhoto,
groupName,
} = await req.json();

const query = isGroup
? { isGroup, groupPhoto, groupName, members: [currentUserID, ...members] }
: { members: { $all: [currentUserID, ...members] }, $size: 2 };
console.log(query);

let chat = await Chat.findOne(query);
console.log("CHAT - ", chat);

if (!chat) {
chat = await Chat.create(
isGroup ? query : { members: [currentUserID, ...members] }
);

// PUSH THE CHAT TO THE USER MODEL "CHAT" ARRAY -

const updateAllMembers = chat.members.map(
async (memberID) =>
await User.findByIdAndUpdate(
// Update all members' chat arrays
await Promise.all(
chat.members.map((memberID) =>
User.findByIdAndUpdate(
memberID,
{
$addToSet: { chats: chat._id },
},
{ $addToSet: { chats: chat._id } },
{ new: true }
)
)
);
await Promise.all(updateAllMembers);
}

return new Response(JSON.stringify(chat), { status: 200 });

// if (!chat) {
// // THIS IS NOT CORRECT IG, WILL FIX IT LATER
// return new Response(JSON.stringify({ message: "Chat already exists" }));
// } else {
// chat = await Chat.create(
// isGroup ? query : { members: [currentUserID, ...members] }
// );

// // PUSH THE CHAT TO THE USER MODEL "CHAT" ARRAY -
// await User.findByIdAndUpdate(currentUserID, {
// $addToSet: { chats: chat._id },
// });

// return new Response(JSON.stringify(chat), { status: 200 });
// }
} catch (err) {
console.log(err);
console.error("Error creating chat:", err);
return new Response(
JSON.stringify({ message: "Failed to create new chat" }),
{ status: 500 }
{ status: 500, headers: { "Content-Type": "application/json" } }
);
}
};
37 changes: 13 additions & 24 deletions app/api/messages/route.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,47 +8,35 @@ export const POST = async (req) => {
try {
await connectToDB();

const body = await req.json();

const { chatID, currentUserID, text, photo } = body;
const { chatID, currentUserID, text, photo } = await req.json();

const currentUser = await User.findById(currentUserID);

// console.log(body);
// console.log(chatID, currentUserID, text, photo);
if (!currentUser) {
return new Response(JSON.stringify({ message: "User not found" }), { status: 404 });
}

const newMessage = await Message.create({
chat: chatID,
sender: currentUser,
sender: currentUser._id,
text,
photos: photo,
seenBy: [currentUserID],
});

// console.log(newMessage);

const updatedChat = await Chat.findByIdAndUpdate(
chatID,
{
$push: { messages: newMessage._id },
$set: {
lastMessage: newMessage.createdAt,
},
$set: { lastMessage: newMessage.createdAt },
},
{ new: true }
)
.populate({
path: "messages",
model: Message,
populate: [
{
path: "sender",
model: "User",
},
{
path: "seenBy",
model: "User",
},
{ path: "sender", model: "User" },
{ path: "seenBy", model: "User" },
],
})
.populate({
Expand All @@ -57,13 +45,14 @@ export const POST = async (req) => {
})
.exec();

// console.log(updatedChat);

await pusherServer.trigger(chatID, "new-message", newMessage);

return new Response(JSON.stringify(newMessage), { status: 200 });
} catch (error) {
console.log(error);
return new Response("Failed to create new message", { status: 500 });
console.error("Error creating message:", error);
return new Response(
JSON.stringify({ message: "Failed to create new message" }),
{ status: 500, headers: { "Content-Type": "application/json" } }
);
}
};