diff --git a/db/bill.ts b/db/bill.ts index 8c47808..6baf960 100644 --- a/db/bill.ts +++ b/db/bill.ts @@ -18,10 +18,10 @@ export interface Bill { export interface BillDocument extends Bill, - mongoose.SchemaTimestampsConfig, - mongoose.Document {} + mongoose.SchemaTimestampsConfig, + mongoose.Document { } -export interface BillModel extends mongoose.Model {} +export interface BillModel extends mongoose.Model { } const BillSchema = new mongoose.Schema( { @@ -29,7 +29,7 @@ const BillSchema = new mongoose.Schema( type: Number, required: true, validate: { - validator: function (v: number) { + validator: function(v: number): boolean { const bill = this as BillDocument return v <= bill.milageEnd @@ -43,7 +43,7 @@ const BillSchema = new mongoose.Schema( required: true, validate: { - validator: function (v: number) { + validator: function(v: number): boolean { const bill = this as BillDocument return v >= bill.milageStart @@ -77,12 +77,12 @@ const BillSchema = new mongoose.Schema( } ) -BillSchema.virtual('milage').get(function () { +BillSchema.virtual('milage').get(function(): number { const bill = this as BillDocument return bill.milageEnd - bill.milageStart }) -BillSchema.virtual('total').get(function () { +BillSchema.virtual('total').get(function(): number { const bill = this as BillDocument return getBillTotal(bill) diff --git a/db/booking.ts b/db/booking.ts index 2fb585e..4dc8f77 100644 --- a/db/booking.ts +++ b/db/booking.ts @@ -22,8 +22,8 @@ export interface Booking { export interface BookingDocument extends Booking, - mongoose.Document, - mongoose.SchemaTimestampsConfig {} + mongoose.Document, + mongoose.SchemaTimestampsConfig { } export interface BookingModel extends mongoose.Model { findBookedDays(uuidsToIngore?: string[]): Promise @@ -52,10 +52,10 @@ const BookingSchema = new mongoose.Schema( required: true, get: dateFormatBackend, validate: { - validator: function (v: Date) { + validator: function(v: Date): boolean { return v >= nowInTz() }, - message: (props: { value: Date }) => `${props.value} is in the past`, + message: (props: { value: Date }): string => `${props.value} is in the past`, }, }, endDate: { @@ -63,27 +63,27 @@ const BookingSchema = new mongoose.Schema( required: false, get: dateFormatBackend, validate: { - validator: function (v: Date) { + validator: function(v: Date): boolean { return v >= nowInTz() }, - message: (props: { value: Date }) => `${props.value} is in the past`, + message: (props: { value: Date }): string => `${props.value} is in the past`, }, }, days: { type: [String], required: true, validate: { - validator: async function (days: string[]) { + validator: async function(days: string[]): Promise { const booking = this as Booking const uuid = booking.uuid && [booking.uuid] const bookedDays = await getBookedDays(uuid) - const doubleBookedDays = days.filter((day: string) => + const doubleBookedDays = days.filter((day: string): boolean => bookedDays.includes(day) ) return doubleBookedDays.length === 0 }, - message: (props: { value: string[] }) => + message: (props: { value: string[] }): string => `At least one day is of ${props.value.join(',')} is already booked`, type: VALIDATION_ERRORS.AT_LEAST_ONE_DAY_BOOKED, }, @@ -105,7 +105,7 @@ const BookingSchema = new mongoose.Schema( } ) -BookingSchema.pre('validate', function (next: () => void) { +BookingSchema.pre('validate', function(next: () => void): void { const booking = this as BookingDocument booking.days = getDays({ startDate: new Date(booking.startDate), @@ -114,7 +114,7 @@ BookingSchema.pre('validate', function (next: () => void) { next() }) -BookingSchema.static('findBookedDays', async function ( +BookingSchema.static('findBookedDays', async function( uuidsToIngore: string[] = [] ): Promise { const model = this as BookingModel diff --git a/db/index.ts b/db/index.ts index b4e0679..78d2e12 100644 --- a/db/index.ts +++ b/db/index.ts @@ -1,12 +1,12 @@ import * as mongoose from 'mongoose' import BookerModel, { Booker } from './booker' -import BookingModel, { Booking } from './booking' +import BookingModel, { Booking, BookingDocument } from './booking' import BillModel, { Bill } from './bill' import { BOOKING_STATUS } from './enums' let connectedPromise: Promise -function connect() { +function connect(): Promise { if (connectedPromise) { return } @@ -20,12 +20,12 @@ function connect() { return connectedPromise } -export async function getBookedDays(uuidsToIngore?: string[]) { +export async function getBookedDays(uuidsToIngore?: string[]): Promise { await connect() return BookingModel.findBookedDays(uuidsToIngore) } -export async function getBookingByUUID(uuid: string) { +export async function getBookingByUUID(uuid: string): Promise { await connect() return BookingModel.findOne({ uuid }) } @@ -33,7 +33,7 @@ export async function getBookingByUUID(uuid: string) { export async function getBookings({ status = [BOOKING_STATUS.CONFIRMED, BOOKING_STATUS.REQUESTED], startDateGreaterThan = '2000-01-01T00:00:00Z', -}: { status?: BOOKING_STATUS[]; startDateGreaterThan?: string } = {}) { +}: { status?: BOOKING_STATUS[]; startDateGreaterThan?: string } = {}): Promise { await connect() return await BookingModel.find({ status: { $in: status }, diff --git a/helpers/array.ts b/helpers/array.ts index c89a615..8ac2e20 100644 --- a/helpers/array.ts +++ b/helpers/array.ts @@ -1,4 +1,4 @@ -export function getNextSmaller(array: T[], pivot: T) { +export function getNextSmaller(array: T[], pivot: T): T { if (!array || !Array.isArray(array) || !array.length) { return null } @@ -9,7 +9,7 @@ export function getNextSmaller(array: T[], pivot: T) { .find((item) => item < pivot) } -export function getNextBigger(array: T[], pivot: T) { +export function getNextBigger(array: T[], pivot: T): T { if (!array || !Array.isArray(array) || !array.length) { return null } diff --git a/helpers/bill.ts b/helpers/bill.ts index d809072..bea0b2e 100644 --- a/helpers/bill.ts +++ b/helpers/bill.ts @@ -1,11 +1,11 @@ import { MILAGE_TARIFS } from '../db/enums' import { AdditionalCost } from '../db/bill' -function roundToCent(amount: number) { +function roundToCent(amount: number): number { return Math.round(amount * 100) / 100 } -export function getMilageCosts(tarif: MILAGE_TARIFS, km: number): number { +export function getMilageCosts({ tarif, km }: { tarif: MILAGE_TARIFS; km: number }): number { if (tarif === MILAGE_TARIFS.NOCHARGE) { return 0 } @@ -56,7 +56,7 @@ export function getBillTotal({ milage?: number additionalCosts: AdditionalCost[] }): number { - const milageCosts = getMilageCosts(tarif, milage) + const milageCosts = getMilageCosts({ tarif, km: milage }) const additionalCostsSum = additionalCosts .map(({ value }) => value) .reduce((acc: number, value: number) => acc + value, 0) diff --git a/helpers/date.ts b/helpers/date.ts index a4cccfd..99bd5a4 100644 --- a/helpers/date.ts +++ b/helpers/date.ts @@ -4,7 +4,7 @@ import { utcToZonedTime } from 'date-fns-tz' const FRONTEND_FORMAT = 'dd.MM.yyyy' const BACKEND_FORMAT = 'yyyy-MM-dd' -export function daysFormatFrontend(days: string[]) { +export function daysFormatFrontend(days: string[]): string { if (days.length === 0) { return '' } @@ -24,7 +24,7 @@ export function getDays({ }: { startDate: Date endDate: Date -}) { +}): string[] { let currentDay = new Date(startDate.getTime()) const days = [dateFormatBackend(currentDay)] @@ -40,22 +40,22 @@ export function getDays({ return days } -function dateFormat(date: Date, formatString: string) { +function dateFormat(date: Date, formatString: string): string { if (!date) { return null } return format(date, formatString) } -export function dateFormatBackend(date: Date) { +export function dateFormatBackend(date: Date): string { return dateFormat(date, BACKEND_FORMAT) } -export function dateFormatFrontend(date: Date) { +export function dateFormatFrontend(date: Date): string { return dateFormat(date, FRONTEND_FORMAT) } -function dateParse(input: string, formatString: string) { +function dateParse(input: string, formatString: string): Date { const date = parse(input, formatString, new Date()) if (date.getTime() !== NaN) { return date @@ -64,11 +64,11 @@ function dateParse(input: string, formatString: string) { return null } -export function dateParseFrontend(input: string) { +export function dateParseFrontend(input: string): Date { return dateParse(input, FRONTEND_FORMAT) } -export function nowInTz(timezone = 'Europe/Berlin') { +export function nowInTz(timezone = 'Europe/Berlin'): Date { const now = new Date() return utcToZonedTime(now, timezone) } diff --git a/helpers/ical.ts b/helpers/ical.ts index d942000..61c704c 100644 --- a/helpers/ical.ts +++ b/helpers/ical.ts @@ -38,7 +38,7 @@ Buchungs-Link: ${getBaseURL()}/booking/${booking.uuid} return value } -export function generateBookedCalendar(bookings: Booking[]) { +export function generateBookedCalendar(bookings: Booking[]): string { const events = bookings.map((booking) => ({ productId: 'app.vercel.pfadi-bussle/ics', calName: 'Pfadi-Bussle Buchungen', diff --git a/helpers/mail.ts b/helpers/mail.ts index 0c3b291..e0b0601 100644 --- a/helpers/mail.ts +++ b/helpers/mail.ts @@ -31,7 +31,7 @@ Pfadi Bussle Wart Tel. 0151/212 253 62 ` -function getReceivedBookingBookerText(booking: Booking) { +function getReceivedBookingBookerText(booking: Booking): string { return `Hallo liebe/r ${booking.booker.name}, Vielen Dank für Deine Buchungsanfrage zum ${daysFormatFrontend(booking.days)}! @@ -48,7 +48,7 @@ ${footer} ` } -function getBookingConfirmedText(booking: Booking) { +function getBookingConfirmedText(booking: Booking): string { return `Hallo liebe/r ${booking.booker.name}, deine Buchunganfrage zum ${daysFormatFrontend( @@ -64,7 +64,7 @@ einsehen und stornieren. ${footer} ` } -function getBookingRejectedText(booking: Booking) { +function getBookingRejectedText(booking: Booking): string { return `Hallo liebe/r ${booking.booker.name}, es tut uns leid aber deine Buchungsanfrage zum ${daysFormatFrontend( @@ -78,7 +78,7 @@ ${footer} ` } -function getReceivedBookingAdminText(booking: { uuid: string }) { +function getReceivedBookingAdminText(booking: { uuid: string }): string { return `Hallo lieber Admin, es ging folgende Buchung ein: ${getBaseURL()}/admin/booking/${booking.uuid} @@ -86,7 +86,7 @@ es ging folgende Buchung ein: ${getBaseURL()}/admin/booking/${booking.uuid} MfG` } -export async function sendReceivedBookingAdminMail(booking: Booking) { +export async function sendReceivedBookingAdminMail(booking: Booking): Promise { try { await sendMail({ to: [{ email: ADMIN_EMAIL }], @@ -102,7 +102,7 @@ export async function sendReceivedBookingAdminMail(booking: Booking) { } } -export async function sendReceivedBookingBookerMail(booking: Booking) { +export async function sendReceivedBookingBookerMail(booking: Booking): Promise { try { await sendMail({ to: [{ email: booking.booker.email, name: booking.booker.name }], @@ -118,7 +118,7 @@ export async function sendReceivedBookingBookerMail(booking: Booking) { } } -export async function sendBookingConfirmed(booking: Booking) { +export async function sendBookingConfirmed(booking: Booking): Promise { try { await sendMail({ to: [{ email: booking.booker.email, name: booking.booker.name }], @@ -143,7 +143,7 @@ export async function sendBookingConfirmed(booking: Booking) { } } -export async function sendBookingRejected(booking: Booking) { +export async function sendBookingRejected(booking: Booking): Promise { try { await sendMail({ to: [{ email: booking.booker.email, name: booking.booker.name }], @@ -175,7 +175,7 @@ async function sendMail({ type?: string filename: string }[] -}) { +}): Promise { const data = { personalizations: [ { diff --git a/lib/authenticate.ts b/lib/authenticate.ts index 9df5003..e6aea45 100644 --- a/lib/authenticate.ts +++ b/lib/authenticate.ts @@ -6,7 +6,7 @@ export function authenticateAdmin({ }: { username: string password: string -}) { +}): boolean { if (username !== 'admin') { return false } diff --git a/pages/api/admin/booking/[uuid]/bill.ts b/pages/api/admin/booking/[uuid]/bill.ts index c01ad40..9463659 100644 --- a/pages/api/admin/booking/[uuid]/bill.ts +++ b/pages/api/admin/booking/[uuid]/bill.ts @@ -2,7 +2,7 @@ import { Bill } from '../../../../../db/bill' import { createBill, patchBill } from '../../../../../db/index' import withSession, { isAdminSession } from '../../../../../lib/session' -export default withSession(async function billHandler(req, res) { +export default withSession(async function billHandler(req, res): Promise { if (!isAdminSession(req)) { res.status(403).send({ message: 'Not Authorized' }) return diff --git a/pages/api/admin/booking/[uuid]/index.ts b/pages/api/admin/booking/[uuid]/index.ts index 7393d13..49699de 100644 --- a/pages/api/admin/booking/[uuid]/index.ts +++ b/pages/api/admin/booking/[uuid]/index.ts @@ -7,7 +7,7 @@ import { } from '../../../../../helpers/mail' import { BOOKING_STATUS } from '../../../../../db/enums' -export default withSession(async function bookingHandler(req, res) { +export default withSession(async function bookingHandler(req, res): Promise { if (!isAdminSession(req)) { res.status(403).send({ message: 'Not Authorized' }) return diff --git a/pages/api/admin/login.ts b/pages/api/admin/login.ts index 9319b1a..897cec3 100644 --- a/pages/api/admin/login.ts +++ b/pages/api/admin/login.ts @@ -1,7 +1,7 @@ import { authenticateAdmin } from '../../../lib/authenticate' import withSession from '../../../lib/session' -async function loginHandler(req: any, res: any) { +async function loginHandler(req: any, res: any): Promise { const { method } = req switch (method) { diff --git a/pages/api/booking/[uuid]/index.ts b/pages/api/booking/[uuid]/index.ts index 7dc49d3..0db5ee4 100644 --- a/pages/api/booking/[uuid]/index.ts +++ b/pages/api/booking/[uuid]/index.ts @@ -6,7 +6,7 @@ import { getBookingByUUID } from '../../../../db/index' export default async function userHandler( req: NextApiRequest, res: NextApiResponse -) { +): Promise { const { method, query: { uuid: uuids }, diff --git a/pages/api/booking/index.ts b/pages/api/booking/index.ts index a6632f8..4d9ff83 100644 --- a/pages/api/booking/index.ts +++ b/pages/api/booking/index.ts @@ -10,7 +10,7 @@ import { export default async function userHandler( req: NextApiRequest, res: NextApiResponse -) { +): Promise { const { method } = req let booking: Booking diff --git a/pages/api/daysbooked.ics.ts b/pages/api/daysbooked.ics.ts index 5694956..cc693d2 100644 --- a/pages/api/daysbooked.ics.ts +++ b/pages/api/daysbooked.ics.ts @@ -5,7 +5,7 @@ import { generateBookedCalendar } from '../../helpers/ical' export default async function useHandler( req: NextApiRequest, res: NextApiResponse -) { +): Promise { const { method } = req switch (method) { diff --git a/pages/api/daysbooked.ts b/pages/api/daysbooked.ts index 9bbde4d..8b4efd4 100644 --- a/pages/api/daysbooked.ts +++ b/pages/api/daysbooked.ts @@ -4,7 +4,7 @@ import { getBookedDays } from '../../db/index' export default async function useHandler( req: NextApiRequest, res: NextApiResponse -) { +): Promise { const { method } = req switch (method) {