как написать запрос к монгодб?

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);


Ответы (0 шт):