From 038e2b2420e2e6fbbccdd306b787e9271849d3ca Mon Sep 17 00:00:00 2001 From: Thomas Ruoff Date: Thu, 3 Sep 2020 23:27:30 +0200 Subject: [PATCH] another try to fix types for models --- db/booker.ts | 12 ++++++++---- db/booking.ts | 20 +++++++++++++------- pages/api/booking/[uuid].tsx | 4 ++-- pages/api/booking/index.tsx | 4 ++-- pages/booking/[uuid].tsx | 8 ++++---- 5 files changed, 29 insertions(+), 19 deletions(-) diff --git a/db/booker.ts b/db/booker.ts index 492818d..dbae651 100644 --- a/db/booker.ts +++ b/db/booker.ts @@ -1,6 +1,6 @@ import * as mongoose from 'mongoose' -export interface Booker +export interface BookerDocument extends mongoose.SchemaTimestampsConfig, mongoose.Document { name: string @@ -10,7 +10,9 @@ export interface Booker city: string } -const BookerSchema = new mongoose.Schema( +export interface BookerModel extends mongoose.Model {} + +const BookerSchema = new mongoose.Schema( { name: { type: String, required: true }, email: { type: String, required: true, unique: true, minlength: 5 }, @@ -21,6 +23,8 @@ const BookerSchema = new mongoose.Schema( { timestamps: true, collation: { locale: 'de', strength: 1 } } ) -const Model: mongoose.Model = - mongoose.models.Booker || mongoose.model('Booker', BookerSchema) +const Model = mongoose.model( + 'Booker', + BookerSchema +) export default Model diff --git a/db/booking.ts b/db/booking.ts index 463a66f..688e18f 100644 --- a/db/booking.ts +++ b/db/booking.ts @@ -1,14 +1,14 @@ import * as mongoose from 'mongoose' import { v4 as uuidv4 } from 'uuid' import { dateFormatBackend, getDays } from '../helpers/date' -import { Booker } from './booker' +import { BookerDocument } from './booker' import { BOOKING_STATUS } from './bookingStatus' -export interface Booking +export interface BookingDocument extends mongoose.Document, mongoose.SchemaTimestampsConfig { uuid: string - booker: Booker + booker: BookerDocument startDate: Date endDate: Date status: BOOKING_STATUS @@ -18,7 +18,11 @@ export interface Booking days?: string[] } -const BookingSchema = new mongoose.Schema( +export interface BookingModel extends mongoose.Model { + findBookedDays(): Promise +} + +const BookingSchema = new mongoose.Schema( { // need a seperate uuid to be able to target a booking anonimously uuid: { @@ -78,12 +82,14 @@ BookingSchema.static('findBookedDays', async function (): Promise { ).exec() return bookings - .map((booking: Booking) => booking.days) + .map((booking: BookingDocument) => booking.days) .flat() .sort() }) -const Model: mongoose.Model = - mongoose.models.Booking || mongoose.model('Booking', BookingSchema) +const Model: BookingModel = mongoose.model( + 'Booking', + BookingSchema +) export default Model diff --git a/pages/api/booking/[uuid].tsx b/pages/api/booking/[uuid].tsx index 707a28f..2009748 100644 --- a/pages/api/booking/[uuid].tsx +++ b/pages/api/booking/[uuid].tsx @@ -1,5 +1,5 @@ import { NextApiRequest, NextApiResponse } from 'next' -import { Booking } from '../../../db/booking' +import { BookingDocument } from '../../../db/booking' import { BOOKING_STATUS } from '../../../db/bookingStatus' import { getBookingByUUID } from '../../../db/index' @@ -14,7 +14,7 @@ export default async function userHandler( const uuid = Array.isArray(uuids) ? uuids[0] : uuids - let booking: Booking + let booking: BookingDocument switch (method) { case 'PATCH': diff --git a/pages/api/booking/index.tsx b/pages/api/booking/index.tsx index 702969e..639943a 100644 --- a/pages/api/booking/index.tsx +++ b/pages/api/booking/index.tsx @@ -1,6 +1,6 @@ import { Error } from 'mongoose' import { NextApiRequest, NextApiResponse } from 'next' -import { Booking } from '../../../db/booking' +import { BookingDocument } from '../../../db/booking' import { createBooking } from '../../../db/index' import { sendReceivedBookingMail } from '../../../helpers/mail' @@ -10,7 +10,7 @@ export default async function userHandler( ) { const { method } = req - let booking: Booking + let booking: BookingDocument switch (method) { case 'POST': diff --git a/pages/booking/[uuid].tsx b/pages/booking/[uuid].tsx index 698f830..22fbbae 100644 --- a/pages/booking/[uuid].tsx +++ b/pages/booking/[uuid].tsx @@ -2,7 +2,7 @@ import { GetServerSideProps } from 'next' import React, { useEffect, useState } from 'react' import Footer from '../../components/footer' import Header from '../../components/header' -import { Booking } from '../../db/booking' +import { BookingDocument } from '../../db/booking' import { BOOKING_STATUS } from '../../db/bookingStatus' import { getBookingByUUID } from '../../db/index' import { dateFormatFrontend } from '../../helpers/date' @@ -28,7 +28,7 @@ export const getServerSideProps: GetServerSideProps = async (context) => { } } -function getBookingStatus(booking: Booking) { +function getBookingStatus(booking: BookingDocument) { switch (booking.status) { case BOOKING_STATUS.REQUESTED: return 'In Bearbeitung' @@ -43,7 +43,7 @@ function getBookingStatus(booking: Booking) { } } -async function cancelBooking(booking: Booking) { +async function cancelBooking(booking: BookingDocument) { const response = await fetch(`/api/booking/${booking.uuid}`, { method: 'PATCH', mode: 'cors', @@ -61,7 +61,7 @@ async function cancelBooking(booking: Booking) { export default function ShowBooking({ booking: bookingProp, }: { - booking: Booking + booking: BookingDocument }) { const [booking, setBooking] = useState(bookingProp)