как написать запрос к монгодб?
id:602ea51xxxxxxxxx2df3b2c09b
email: "[email protected]"
gitlab:
_id:602ea51axxxxxxxx2df3b2c09c
name:"Lena Savina"
username:"lesav"
avatar_url:"https://atlas.ru/uploads/-/system/user/avatar/115/avatar.png"
web_url:"https://atlas.ru/lesav"
email:"[email protected]"
slack:
_id:602ea51a40xxxxxxxxcc4e2df3b2c09d
name:"lesav"
real_name:"Лена Савина"
profile:
image_original:
"https://avatars.sl.com/2021-01-20/119_4a7514fe15fb7b..."
email:
""[email protected]""
jira:
_id:602ea5xxxxxxx2df3b2c09e
name:"lesav"
emailAddress:""[email protected]""
timeZone:
"Europe/Moscow"
locale:
"ru_RU"
__v:0
в таком виде информация лежит в моей МонгоДБ. Изначально я всю информацию о пользователях собирала и складывала в жсон, теперь хочу перейти на базу: как сделать так, чтобы информация о пользователе по его емейлу подтягивалась из базы, а не из жсона?
router.get(
'/api/v1/users',
async (
req: Request<
Record<string, unknown>,
Record<string, unknown>,
Record<string, unknown>,
{ email?: string | undefined }
>,
res: Response,
) => {
const { email } = req.query;
if (!email) {
res.status(400).send('Error! Email not specified!');
return;
}
//все эти три функции выглядят аналогично
const gitlab = await getOneGitlabUserByHisEmail(email);
const jira = await getOneJiraUserByHisEmail(email);
const slack = await getOneSlackUserByHisEmail(email);
const response = {
gitlab,
jira,
slack,
};
res.send(response);
},
);
export const getOneJiraUserByHisEmail = async (email: string): Promise<JiraUserOutput | null> => {
const getUsers = await getJiraUsers();
const thatOneUser = getUsers.find((it: JiraUser) => it.emailAddress === email);
if (thatOneUser === undefined) {
return null;
}
return {
self: thatOneUser.self,
key: thatOneUser.key,
name: thatOneUser.name,
emailAddress: thatOneUser.emailAddress,
displayName: thatOneUser.displayName,
timeZone: thatOneUser.timeZone,
locale: thatOneUser.locale,
};
};
import mongoose, { Document, Schema, Types } from 'mongoose';
import { JiraUser } from '../integration/jira';
import { GitlabUser } from '../integration/gitlab';
import { SlackUser } from '../integration/slack';
export interface GitlabUserDocument extends GitlabUser, Types.Subdocument {}
export interface SlackUserDocument extends SlackUser, Types.Subdocument {}
export interface JiraUserDocument extends JiraUser, Types.Subdocument {}
const GitlabSchema = new Schema<GitlabUserDocument>({
uid: { type: Number },
name: { type: String },
username: { type: String },
// state: { type: Boolean },
// eslint-disable-next-line camelcase
avatar_url: { type: String },
// eslint-disable-next-line camelcase
web_url: { type: String },
email: { type: String },
});
const JiraSchema = new Schema<JiraUserDocument>({
name: { type: String },
state: { type: Boolean },
emailAddress: { type: String },
locale: { type: String },
timeZone: { type: String },
});
const SlackSchema = new Schema<SlackUserDocument>({
uid: { type: String },
name: { type: String },
// eslint-disable-next-line camelcase
real_name: { type: String },
profile: {
email: { type: String },
// eslint-disable-next-line camelcase
image_original: { type: String },
},
});
interface User extends Document {
email: string;
gitlab: Types.Array<GitlabUserDocument>;
jira: Types.Array<JiraUserDocument>;
slack: Types.Array<SlackUserDocument>;
}
const CommonSchema = new Schema<User>({
email: { type: String, index: true },
gitlab: GitlabSchema,
slack: SlackSchema,
jira: JiraSchema,
});
export const Users = mongoose.model('Users', CommonSchema);