diff --git a/pages/api/[date].js b/pages/api/[date].js
new file mode 100644
index 0000000..5e0beb4
--- /dev/null
+++ b/pages/api/[date].js
@@ -0,0 +1,58 @@
+import database from '../../services/database';
+import Day from '../../models/Day';
+
+export default async function days(req, res) {
+ //
+
+ // Connect to the Database
+ database.connect();
+
+ switch (req.method) {
+ //
+ case 'GET':
+ let getResult;
+ if (req.query.date == '*') getResult = await getAllDays();
+ else getResult = await getDayWith(req.query.date);
+ await res.status(getResult.status).json(getResult.data);
+ break;
+ //
+ default:
+ res.setHeader('Allow', ['GET']);
+ res.status(405).end(`Method ${req.method} Not Allowed`);
+ break;
+ }
+}
+
+/* * */
+/* REST: GET */
+async function getAllDays() {
+ // Fetch all documents from the database and sort them
+ const allDays = await Day.find({});
+
+ const filteredDays = allDays.filter((item) => {
+ const today = new Date();
+ today.setHours(0, 0, 0, 0);
+ const itemDate = new Date(item.date);
+ itemDate.setHours(0, 0, 0, 0);
+ const isBetweenDates = today.getTime() <= itemDate.getTime();
+ return isBetweenDates && item.is_public;
+ });
+
+ const sortedDays = filteredDays.sort((a, b) => new Date(a.date) - new Date(b.date));
+ return { status: 200, data: sortedDays };
+}
+
+/* * */
+/* REST: GET */
+async function getDayWith(date) {
+ // Fetch documents from the database that match the requested 'date'
+ const foundDay = await Day.find({ date: date });
+
+ if (foundDay.length > 0) {
+ // If document with date exists
+ return { status: 200, data: foundDay[0] };
+ } else {
+ // If document with date does not exist
+ return { status: 404, data: { message: `Day with date: ${date} not found.` } };
+ }
+}
diff --git a/pages/index.js b/pages/index.js
index 99d26c5..d2a53ce 100644
--- a/pages/index.js
+++ b/pages/index.js
@@ -1,21 +1,14 @@
+import useSWR from 'swr';
import Image from 'next/image';
import Day from '../components/day/Day';
import IconButton from '../components/iconButton/IconButton';
-import menu from '../data/menu.json';
+import Info from '../components/info/Info';
import styles from '../styles/Home.module.css';
export default function Home() {
//
- const filterMenu = menu.filter((item) => {
- const today = new Date();
- today.setHours(0, 0, 0, 0);
-
- const itemDate = new Date(item.date);
- itemDate.setHours(0, 0, 0, 0);
-
- return today.getTime() <= itemDate.getTime();
- });
+ const { data: menu } = useSWR('/api/*');
return (
@@ -31,9 +24,15 @@ export default function Home() {
- {filterMenu.map((item, index) => (
-
- ))}
+ {menu ? (
+ menu.length ? (
+ menu.map((item, index) => )
+ ) : (
+
+ )
+ ) : (
+
+ )}
);
diff --git a/pages/tv/index.js b/pages/tv/index.js
index 9d48469..bfc2185 100644
--- a/pages/tv/index.js
+++ b/pages/tv/index.js
@@ -1,4 +1,4 @@
-import menu from '../../data/menu.json';
+import useSWR from 'swr';
import Day from '../../components/day/Day';
import Image from 'next/image';
import styles from '../../styles/Tv.module.css';
@@ -6,15 +6,7 @@ import styles from '../../styles/Tv.module.css';
export default function Home() {
//
- const filterMenu = menu.filter((item) => {
- const today = new Date();
- today.setHours(0, 0, 0, 0);
-
- const itemDate = new Date(item.date);
- itemDate.setHours(0, 0, 0, 0);
-
- return today.getTime() === itemDate.getTime();
- });
+ const { data: menu } = useSWR('/api/*');
return (
@@ -24,11 +16,7 @@ export default function Home() {
Full month available at menu.chefpoint.pt
-
- {filterMenu.map((item, index) => (
-
- ))}
-
+ {menu ? menu.map((item, index) => ) : null}
);
}
diff --git a/services/database.js b/services/database.js
new file mode 100644
index 0000000..30d22b8
--- /dev/null
+++ b/services/database.js
@@ -0,0 +1,30 @@
+/* * * * * */
+/* DATABASE */
+/* * */
+
+/* * */
+/* IMPORTS */
+import mongoose from 'mongoose';
+
+module.exports.connect = async function () {
+ await mongoose
+ .connect(process.env.MONGODB_CONNECTION_STRING)
+ // .then(() => console.log('Connected to MongoDB.'))
+ .catch((error) => {
+ console.log('Connection to MongoDB failed.');
+ console.log('At database.js > mongoose.connect()');
+ console.log(error);
+ process.exit();
+ });
+};
+
+module.exports.disconnect = async function () {
+ await mongoose
+ .disconnect()
+ // .then(() => console.log('Disconnected from MongoDB.'))
+ .catch((error) => {
+ console.log('Failed closing connection to MongoDB.');
+ console.log('At database.js > mongoose.disconnect()');
+ console.log(error);
+ });
+};