import express from "express";
import appointmentController from "../controllers/appointmentController.js";

const router = express.Router();

router.get("/list", appointmentController.getVisitList);
router.post("/visits", appointmentController.addVisit);   
router.delete("/visits/:id", appointmentController.deleteVisit);
router.get("/doctors", appointmentController.getDoctors);
router.get("/patients", appointmentController.getPatients);

export default router;

Это маршруты

const Patient = (sequelize, DataTypes) => {
  const patientModel = sequelize.define(
    "tblpatient",
    {
      patientid: {
        type: DataTypes.INTEGER,
        autoIncrement: true,
        primaryKey: true,
      },
      patientfirstname: {
        type: DataTypes.STRING,
        allowNull: false,
      },
      patientlastname: {
        type: DataTypes.STRING,
        allowNull: false,
      },
      patientpatronymic: {
        type: DataTypes.STRING,
      },
    },
    {
      tableName: "tblpatient",
      timestamps: false,
    }
  );

  patientModel.associate = (models) => {
    patientModel.hasMany(models.tblcontract, {
      foreignKey: "patientid",
      sourceKey: "patientid",
    });
  };

  return patientModel;
};

export default Patient;

const Doctor = (sequelize, DataTypes) => {
  const doctorModel = sequelize.define(
    "tbldoctor",
    {
      doctorid: {
        type: DataTypes.INTEGER,
        autoIncrement: true,
        primaryKey: true,
      },
      doctorfirstname: {
        type: DataTypes.STRING,
        allowNull: false,
      },
      doctorlastname: {
        type: DataTypes.STRING,
        allowNull: false,
      },
      doctorpatronymic: {
        type: DataTypes.STRING,
      },
    },
    {
      tableName: "tbldoctor",
      timestamps: false,
    }
  );

  doctorModel.associate = (models) => {
    doctorModel.hasMany(models.tblvisit, {
      foreignKey: "doctorid",
      sourceKey: "doctorid",
    });
  };

  return doctorModel;
};

export default Doctor;


const Visit = (sequelize, DataTypes) => {
  const visitModel = sequelize.define(
    "tblvisit",
    {
      visitid: {
        type: DataTypes.INTEGER,
        autoIncrement: true,
        primaryKey: true,
      },
      visitdate: {
        type: DataTypes.DATEONLY,
        allowNull: false,
      },
      visittime: {
        type: DataTypes.TIME,
        allowNull: false,
      },
      doctorid: {
        type: DataTypes.INTEGER,
        allowNull: false,
      },
      patientid: {
        type: DataTypes.INTEGER,
        allowNull: false,
      },
      visitcomment: {
        type: DataTypes.TEXT,
      },
    },
    {
      tableName: "tblvisit",
      timestamps: false,
    }
  );

  visitModel.associate = (models) => {
    visitModel.belongsTo(models.tbldoctor, {
      foreignKey: "doctorid",
      targetKey: "doctorid",
    });
    visitModel.belongsTo(models.tblpatient, {
      foreignKey: "patientid",
      targetKey: "patientid",
    });
    visitModel.hasMany(models.tblprovidedservice, {
      foreignKey: "visitid",
      sourceKey: "visitid",
    });
    visitModel.hasMany(models.tblpayment, {
      foreignKey: "visitid",
      sourceKey: "visitid",
      as: "payments" // Явно задаем имя ассоциации
    });
  };

  return visitModel;
};

export default Visit;


Это модели

Нужно написать AppointmentController.js для страницы визитов. На ней должен быть список всех визитов, для каждого визита - дата, время, фио врача, фио пациента
И кнопка "создать запись". При нажатии открывается окно, в котором можно ввести дату, время, выбрать врача из выпадающего списка из бд, выбрать пациента так же из выпадающего списка. После нажатия "сохранить" создается новая запись в таблице visit в бд. Нужно, чтобы если у этого врача на это же время есть запись в таблице, то выводилось бы предупреждение и запись не создавалась. 

Также для этой страницы нужно написать AppointmentsPage.tsx. Просто минимальный фронт, чтобы видеть, что все работает