@replyke/express
Version:
Replyke: Build interactive apps with social features like comments, votes, feeds, user lists, notifications, and more.
55 lines (54 loc) • 1.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const models_1 = require("../../../models");
const sequelize_1 = require("sequelize");
const config_1 = require("../../../config");
exports.default = async (req, res) => {
try {
const { query } = req.query;
const projectId = req.project.id;
const { sequelize } = (0, config_1.getCoreConfig)();
if (!query || typeof query !== "string") {
res.status(400).json({
error: "Missing or invalid query parameter",
code: "user/invalid-query",
});
return;
}
const suggestions = await models_1.User.findAll({
where: {
projectId,
username: {
[sequelize_1.Op.iLike]: `%${query}%`, // Case-insensitive search for usernames containing the query
},
},
order: [
[
sequelize.literal(`"username" ILIKE '${query}%'`), // Prioritize usernames starting with the query
"DESC",
],
["username", "ASC"], // Secondary alphabetical ordering
],
limit: 5,
attributes: {
exclude: [
"hash",
"salt",
"email",
"isVerified",
"isActive",
"lastActive",
],
},
});
res.status(200).json(suggestions.map((i) => i.toJSON()));
}
catch (err) {
console.error("Error fetching user suggestions: ", err);
res.status(500).json({
error: "Internal server error",
code: "user/server-error",
details: err.message,
});
}
};