diff --git a/client/package.json b/client/package.json index a99e08d2d..b90f62462 100644 --- a/client/package.json +++ b/client/package.json @@ -38,8 +38,7 @@ "use-immer": "^0.11.0", "uuid": "^8.3.2", "vite": "^7.1.11", - "vite-plugin-eslint2": "^5.0.4", - "web-vitals": "^2.1.4" + "vite-plugin-eslint2": "^5.0.4" }, "scripts": { "start": "vite", @@ -85,4 +84,4 @@ "typescript-eslint": "^8.39.0", "vite-bundle-analyzer": "^1.2.0" } -} \ No newline at end of file +} diff --git a/client/src/AppRouter.tsx b/client/src/AppRouter.tsx index de399d2cd..56c92a7c9 100644 --- a/client/src/AppRouter.tsx +++ b/client/src/AppRouter.tsx @@ -8,8 +8,6 @@ import LogoutPromptPage from "./pages/both/logout/LogoutPromptPage"; import TermsPage from "./pages/both/policy/TermsPage"; import UserSettingsPage from "./pages/both/user_page/user_settings/UserSettingsPage"; import UserTraingingsPage from "./pages/both/user_page/user_trainings/UserTrainingsPage"; -import StorefrontPage from "./pages/lab_management/storefront/StorefrontPage"; -import StorefrontPreviewPage from "./pages/lab_management/storefront_preview/StorefrontPreviewPage"; import HelpPage from "./pages/maker/signup/HelpPage"; import SignupPage from "./pages/maker/signup/SignupPage"; import MakerspacePage from "./pages/makerspace_page/MakerspacePage"; @@ -26,7 +24,6 @@ import NewAnnouncementPage from "./pages/lab_management/announcements/NewAnnounc import StaffBar from "./pages/makerspace_page/StaffBar"; import UsersPage from "./pages/lab_management/users/UsersPage"; import UserPage from "./pages/lab_management/users/UserPage"; -import { CartListPage } from "./pages/lab_management/storefront/internal/CartListPage"; import TrainingModulesPage from "./pages/lab_management/training_modules/TrainingModulesPage"; import NewModulePage from "./pages/lab_management/edit_module/NewModulePage"; import EditActiveModulePage from "./pages/lab_management/edit_module/EditActiveModulePage"; @@ -37,7 +34,6 @@ import OrganizationsPage from "./pages/lab_management/organizations/Organization import ManageMakerspacePage from "./pages/makerspace_page/ManageMakerspacePage"; import CurrencyPage from "./pages/lab_management/currency/CurrencyPage"; import ManageRoomPage from "./pages/makerspace_page/MonitorRoomPage"; -import { CartPage } from "./pages/lab_management/storefront/internal/CartPage"; import ManageEquipmentPage from "./pages/makerspace_page/equipment_pages/ManageEquipmentPage"; import ReservationRequestPage from "./pages/makerspace_page/reservation_pages/ReservationRequestPage"; import ManageReservationsPage from "./pages/makerspace_page/reservation_pages/ManageReservationsPage"; @@ -119,7 +115,6 @@ export const routes = [ element: , children: [ { path: "/signup", element: }, - { path: "/admin/storefront/preview", element: }, /* Routes for the static displays around the makerspaces */ { @@ -141,7 +136,6 @@ export const routes = [ { path: "/makerspace/:makerspaceID", element: }, { path: "/terms", element: }, { path: "/help", element: }, - { path: "/storefront", element: }, /* Routes that need to be protected by auth */ { @@ -162,8 +156,6 @@ export const routes = [ children: [ { path: "/makerspace/:makerspaceID/people", element: }, { path: "/makerspace/:makerspaceID/people/:userID", element: }, - { path: "/makerspace/:makerspaceID/storefront/carts", element: }, - { path: "/makerspace/:makerspaceID/storefront/carts/:cartID", element: }, /* Routes for staff + higher */ { @@ -241,8 +233,6 @@ export const routes = [ }, /* END OF PROTECTED ROUTES */ - { path: "/storefront", element: }, - { path: "/logoutprompt", element: }, { path: "*", element: }, diff --git a/client/src/common/ClientOnly.tsx b/client/src/common/ClientOnly.tsx deleted file mode 100644 index 23b7dc2df..000000000 --- a/client/src/common/ClientOnly.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { useState, useEffect, ReactNode } from 'react'; - -interface ClientOnlyProps { - children: ReactNode; - fallback?: ReactNode; -} - -export default function ClientOnly(props: ClientOnlyProps) { - // 1. Start with a state that says "we are not in the browser yet" - const [hasMounted, setHasMounted] = useState(false); - - useEffect(() => { - setHasMounted(true); - }, []); - - // 3. During the server render, we return the fallback (or nothing). - if (!hasMounted) { - return props.fallback; - } - - // 4. On the client, after the first paint, we render the actual component. - return props.children; -} \ No newline at end of file diff --git a/client/src/common/DeleteButton.tsx b/client/src/common/DeleteButton.tsx deleted file mode 100644 index 597e88b3c..000000000 --- a/client/src/common/DeleteButton.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import DeleteIcon from '@mui/icons-material/Delete'; -import ActionButton from "./ActionButton"; - -interface DeleteButtonProps { - appearance: "icon-only" | "small" | "medium" | "large"; - handleClick: () => Promise; - loading: boolean; - tooltipText: string; -} - -export default function DeleteButton(props: DeleteButtonProps) { - return ( - - - - ) -} \ No newline at end of file diff --git a/client/src/common/InvItemCount.tsx b/client/src/common/InvItemCount.tsx deleted file mode 100644 index 3b78baf8b..000000000 --- a/client/src/common/InvItemCount.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import React from "react"; -import InventoryItem from "../types/InventoryItem"; -import { Typography, TypographyProps } from "@mui/material"; - -interface InvItemCountProps extends TypographyProps { - item: InventoryItem; - count?: number; // if not specified, we'll use the count from the item object -} - -export default function InvItemCount({ - item, - count = item.count, - ...otherProps -}: InvItemCountProps) { - return ( - - {count} {count === 1 ? item.unit : item.pluralUnit} remaining. - - ); -} diff --git a/client/src/common/InvItemNamePic.tsx b/client/src/common/InvItemNamePic.tsx deleted file mode 100644 index 78341436f..000000000 --- a/client/src/common/InvItemNamePic.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import InventoryItem from "../types/InventoryItem"; -import { Stack, Typography } from "@mui/material"; - -interface InventoryItemNamePicProps { - item: InventoryItem; -} - -export default function InvItemName({ item }: InventoryItemNamePicProps) { - return ( - - {item.name} - - ); -} diff --git a/client/src/common/PreviewInventoryRow.tsx b/client/src/common/PreviewInventoryRow.tsx deleted file mode 100644 index 9c6dad332..000000000 --- a/client/src/common/PreviewInventoryRow.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import React from "react"; -import InventoryItem from "../types/InventoryItem"; -import { Stack, Typography } from "@mui/material"; -import InvItemName from "./InvItemNamePic"; -import InvItemCount from "./InvItemCount"; - -interface InventoryRowProps { - item: InventoryItem; -} - -export default function InventoryRow({ item }: InventoryRowProps) { - return ( - - - - - - - ${item.pricePerUnit.toFixed(2)} per {item.unit} - - - ); -} diff --git a/client/src/common/TrainingModuleRow.tsx b/client/src/common/TrainingModuleRow.tsx deleted file mode 100644 index e54093f0a..000000000 --- a/client/src/common/TrainingModuleRow.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import React from "react"; -import { CardActionArea, Stack, Typography } from "@mui/material"; -import WarningIcon from "@mui/icons-material/Warning"; -import CheckCircleIcon from "@mui/icons-material/CheckCircle"; -import CloseIcon from "@mui/icons-material/Close"; -import HourglassBottomIcon from '@mui/icons-material/HourglassBottom'; -import LockClockIcon from '@mui/icons-material/LockClock'; -import { format, parseISO } from "date-fns"; -import { useNavigate } from "react-router-dom"; -import { ModuleStatus } from "./TrainingModuleUtils"; - -interface RequiredModuleProps { - moduleStatus: ModuleStatus; -} - -export default function TrainingModuleRow({ - moduleStatus, -}: RequiredModuleProps) { - const navigate = useNavigate(); - - return ( - navigate(`/maker/training/${moduleStatus.moduleID}`)} - > - - {moduleStatus.status === "Passed" && ( - - )} - {moduleStatus.status === "Expired" && } - {moduleStatus.status === "Not taken" && } - {moduleStatus.status === "Expiring Soon" && } - {moduleStatus.status === "Locked" && } - - - { - moduleStatus.status === "Locked" - ? "Locked Until Tomorrow" - : moduleStatus.status - } - - - {moduleStatus.moduleName} - - {moduleStatus.status === "Expiring Soon" && ( - - Exp Date: - - {format(parseISO(moduleStatus.expirationDate), "MM/dd/yyyy")} - - - )} - - {moduleStatus.status === "Passed" && ( - - {format(parseISO(moduleStatus.submissionDate), "MM/dd/yyyy")} - - )} - - - ); -} diff --git a/client/src/common/UseCurrentUser.ts b/client/src/common/UseCurrentUser.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/client/src/pages/lab_management/storefront/AddToCartModal.tsx b/client/src/pages/lab_management/storefront/AddToCartModal.tsx deleted file mode 100644 index d3708f440..000000000 --- a/client/src/pages/lab_management/storefront/AddToCartModal.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import { - Alert, - Avatar, - Button, - Collapse, - Divider, - Stack, - TextField, - Typography, -} from "@mui/material"; -import InventoryItem from "../../../types/InventoryItem"; -import PrettyModal from "../../../common/PrettyModal"; -import { useIsMobile } from "../../../common/IsMobileProvider"; - -interface AddToCartModalProps { - open: boolean; - count: number; - setCount: (count: number) => void; - addToCart: () => void; - onClose: () => void; - item: InventoryItem; -} - -export default function AddToCartModal({ - open, - count, - setCount, - addToCart, - onClose, - item, -}: AddToCartModalProps) { - const cost = count * item.pricePerUnit || 0; - - const validCost = cost > 0; - const enoughInInventory = count <= item.count; - - const tryAddToCart = () => { - if (!validCost || !enoughInInventory) return; - - addToCart(); - onClose(); - }; - - const isMobile = useIsMobile(); - - return ( - - - - Add to shopping cart - - - - - - - {item.name} - - - - - - { - if (key === "Enter") tryAddToCart(); - }} - onChange={(e) => { - setCount(parseInt(e.target.value)); - }} - /> - {item.pluralUnit} - - - - x ${item.pricePerUnit.toFixed(2)} per {item.unit} - - - - - - ${cost.toFixed(2)} - - - - - - Only {item.count} {item.pluralUnit} left in inventory - - - - - - - ); -} diff --git a/client/src/pages/lab_management/storefront/CheckoutModal.tsx b/client/src/pages/lab_management/storefront/CheckoutModal.tsx deleted file mode 100644 index c6d56207b..000000000 --- a/client/src/pages/lab_management/storefront/CheckoutModal.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import PrettyModal from "../../../common/PrettyModal"; -import { Button, Divider, Stack, Typography } from "@mui/material"; -import { ShoppingCartEntry } from "./StorefrontPage"; -import { useIsMobile } from "../../../common/IsMobileProvider"; - -interface CheckoutModalProps { - open: boolean; - groupedEntries: Record; - totalCost: string; - onClose: () => void; - onFinalize: (checkoutNotes: string) => void; -} - -export default function CheckoutModal({ - open, - onClose, - groupedEntries, - totalCost, - onFinalize, -}: CheckoutModalProps) { - - const isMobile = useIsMobile(); - - - - return ( - - - Checkout - - Review your items before checking out: - {Object.entries(groupedEntries).map(([makerspaceID, entries]) => ( - - {entries[0].item.makerspace?.name || "Unknown Makerspace"} - {entries.map((entry) => ( - - - {entry.item.name} - ({entry.count > 1 && (`${entry.item.pricePerUnit.toFixed(2)} `)}x {entry.count}) - - ${(entry.item.pricePerUnit * entry.count).toFixed(2)} - - ))} - - ))} - - - Total Cost: - ${totalCost} - - - - The amount of ${totalCost} will be charged to your Construct Credits account balance.
- Please ensure you have sufficient funds before proceeding. - To add or view funds, visit the RIT Tiger Spend site.
- This transaction will be canceled if you do not have enough funds.

- Pickup instructions will be shown after successful payment. -
- - - - - - -
-
- ); -} diff --git a/client/src/pages/lab_management/storefront/CheckoutSuccessModal.tsx b/client/src/pages/lab_management/storefront/CheckoutSuccessModal.tsx deleted file mode 100644 index cacf3616f..000000000 --- a/client/src/pages/lab_management/storefront/CheckoutSuccessModal.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import PrettyModal from "../../../common/PrettyModal"; -import { Typography, Divider, Card, CardHeader, CardContent } from "@mui/material"; -import { Stack } from "@mui/system"; -import { ShoppingCartEntry } from "./StorefrontPage"; -import { useIsMobile } from "../../../common/IsMobileProvider"; - -interface CheckoutSuccessModalProps { - open: boolean; - groupedEntries: Record; - onClose: () => void; -} - -enum PickupInstructions { - A_LEVEL = "Stop at the front desk of the Atrium Level Makerspace and state that you're here for pickup.", - GENERAL = "Stop at the front desk of the General Makerspace on the 1st floor and tell an employee that you're here for pickup.", - T_AND_E = "Stop at the front desk of the Textiles & Electronics Makerspace on the 2nd floor and tell an employee that you're here for pickup." -} - -export default function CheckoutSuccessModal({ - open, - onClose, - groupedEntries, -}: CheckoutSuccessModalProps) { - const isMobile = useIsMobile(); - - - - return ( - - Purchase Successful - - Thank you for your purchase! A receipt will be sent to your RIT Email shortly. - Please review the pickup instructions for each of your items: - {Object.entries(groupedEntries).map(([makerspaceID, entries]) => ( - - {entries[0].item.makerspace?.id == 36 && PickupInstructions.A_LEVEL} - {entries[0].item.makerspace?.id == 37 && PickupInstructions.GENERAL} - {entries[0].item.makerspace?.id == 38 && PickupInstructions.T_AND_E})} /> - - - - - - {entries.map((entry) => ( - - {entry.item.name} - (x {entry.count}) - - ))} - - - ))} - - ) -} \ No newline at end of file diff --git a/client/src/pages/lab_management/storefront/InternalUseModal.tsx b/client/src/pages/lab_management/storefront/InternalUseModal.tsx deleted file mode 100644 index f92c7f093..000000000 --- a/client/src/pages/lab_management/storefront/InternalUseModal.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { useState } from "react"; -import PrettyModal from "../../../common/PrettyModal"; -import { Button, Stack, TextareaAutosize, Typography } from "@mui/material"; -import InventoryIcon from "@mui/icons-material/Inventory"; -import { useIsMobile } from "../../../common/IsMobileProvider"; - -interface CheckoutModalProps { - open: boolean; - onClose: () => void; - onFinalize: (checkoutNotes: string, recievingUserID: number | undefined) => void; -} - -export default function UseModal({ - open, - onClose, - onFinalize, -}: CheckoutModalProps) { - const [notes, setNotes] = useState("") - - function handleNotesChanged(e: any) { - setNotes(e.target.value); - } - const isMobile = useIsMobile(); - - - return ( - - - - - Note: Internal Items should not be given or sold without staff approval. - - - - - - - Add a note below to describe how/where the items are being used and then click Update Inventory. - - - - - - ); -} diff --git a/client/src/pages/lab_management/storefront/ListingCard.tsx b/client/src/pages/lab_management/storefront/ListingCard.tsx deleted file mode 100644 index 5aaeeac31..000000000 --- a/client/src/pages/lab_management/storefront/ListingCard.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import { Button, Card, CardActionArea, CardActions, CardContent, CardMedia, Typography } from "@mui/material"; -import InventoryItem from "../../../types/InventoryItem"; -import { Stack } from "@mui/system"; -import { useIsMobile } from "../../../common/IsMobileProvider"; -import { useCurrentUser } from "../../../common/CurrentUserProvider"; -import { makeCDNLink } from "../../../common/ImageFinder.js"; - -interface ListingCardProps { - item: InventoryItem - setActiveItem: (item: InventoryItem) => void; - openDetailsModal: (item: InventoryItem) => void; -} - -export function ListingCard(props: ListingCardProps) { - const currentUser = useCurrentUser(); - const isMobile = useIsMobile(); - - return ( - - props.openDetailsModal(props.item)}> - {!isMobile && } - - {props.item.name} - {props.item.makerspace?.name} - - ${props.item.pricePerUnit.toFixed(2)} / {props.item.unit} - {props.item.count} {props.item.count == 1 ? props.item.unit : props.item.pluralUnit} - - - - - - {props.item.count > 0 - ? - : } - - - - - ); -} \ No newline at end of file diff --git a/client/src/pages/lab_management/storefront/ListingModal.tsx b/client/src/pages/lab_management/storefront/ListingModal.tsx deleted file mode 100644 index 737bde656..000000000 --- a/client/src/pages/lab_management/storefront/ListingModal.tsx +++ /dev/null @@ -1,123 +0,0 @@ -import { Box, Stack } from "@mui/system"; -import PrettyModal from "../../../common/PrettyModal"; -import InventoryItem from "../../../types/InventoryItem"; -import { Button, Divider, TextField, Typography } from "@mui/material"; -import { useIsMobile } from "../../../common/IsMobileProvider"; -import { isStaff } from "../../../common/PrivilegeUtils"; -import { useCurrentUser } from "../../../common/CurrentUserProvider"; -import { useState } from "react"; -import { makeCDNLink } from "../../../common/ImageFinder.js"; -import ThemedMarkdown from "../../../common/ThemedMarkdown.js"; - -interface ListingModalProps { - item: InventoryItem; - open: boolean; - addToCart: (activeItem: InventoryItem, addToCartCount: number) => void; - onClose: () => void; -} - -export function ListingModal(props: ListingModalProps) { - const isMobile = useIsMobile(); - const currentUser = useCurrentUser(); - - const [count, setCount] = useState(1); - - const cost = count * props.item.pricePerUnit || 0; - - const validCost = cost > 0; - const enoughInInventory = count <= props.item.count; - - const tryAddToCart = () => { - if (!validCost || !enoughInInventory) return; - - props.addToCart(props.item, count); - props.onClose(); - }; - - return ( - - - - RIT SHED Logo - - - - - {props.item.name} - - - - {props.item.description && props.item.description !== "" ? ( - {props.item.description} - ) : ( - No description. - )} - - - {isStaff(currentUser) && props.item.notes !== "" && ( -
- - Internal Details - - - {props.item.notes} - -
- )} -
-
-
- - - - { - if (key === "Enter") tryAddToCart(); - }} - onChange={(e) => { - setCount(parseInt(e.target.value)); - }} - /> - {props.item.pluralUnit} - - - x ${props.item.pricePerUnit.toFixed(2)} per {props.item.unit} - - - - - - ${cost.toFixed(2)} - - - 0 ? (props.item.count < props.item.threshold ? "warning" : "success") : "error"}> - {props.item.count > 0 ? <>{props.item.count} available : "Out of stock"} - - {props.item.count > 0 - ? - : } - - - -
- ) -} \ No newline at end of file diff --git a/client/src/pages/lab_management/storefront/ShoppingCart.tsx b/client/src/pages/lab_management/storefront/ShoppingCart.tsx deleted file mode 100644 index e32da5bc4..000000000 --- a/client/src/pages/lab_management/storefront/ShoppingCart.tsx +++ /dev/null @@ -1,121 +0,0 @@ -import { useState } from "react"; -import { ShoppingCartEntry } from "./StorefrontPage"; -import ShoppingCartIcon from "@mui/icons-material/ShoppingCart"; -import { Button, Divider, Stack, Typography } from "@mui/material"; -import ShoppingCartRow from "./ShoppingCartRow"; -import CheckoutModal from "./CheckoutModal"; -import EmptyPageSection from "../../../common/EmptyPageSection"; -import UseModal from "./InternalUseModal"; -import { useIsMobile } from "../../../common/IsMobileProvider"; -import { Box } from "@mui/system"; - -interface ShoppingCartProps { - entries: ShoppingCartEntry[]; - removeEntry: (id: string) => void; - setEntryCount: (id: string, newCount: number) => void; - emptyCart: (checkoutNotes: string, recievingUserID?: number) => void; - internal: boolean; -} - -export default function ShoppingCart({ - entries, - removeEntry, - setEntryCount, - emptyCart, - internal, -}: ShoppingCartProps) { - const isMobile = useIsMobile(); - - const [showCheckoutModal, setShowCheckoutModal] = useState(false); - - const total = entries - .reduce((acc, { count, item }) => acc + count * item.pricePerUnit, 0) - .toFixed(2); - - - const groupedEntries = entries.reduce((groups: Record, entry: ShoppingCartEntry) => { - const key: number = entry.item.makerspaceID; - if (!groups[key]) { - groups[key] = []; - } - groups[key].push(entry); - return groups; - }, {}); - - const groupedEntriesMapping = Object.entries(groupedEntries).map(([makerspaceID, entries]) => ( - - - {entries[0].item.makerspace?.name || "Unknown Makerspace"} - - {entries.map((entry) => ( - removeEntry(entry.id)} - setEntryCount={(newCount: number) => - setEntryCount(entry.id, newCount) - } - /> - ))} - - )); - - return ( - <> - - Cart - - - {entries.length === 0 && ( - } - label="Cart empty." - /> - )} - - }> - {groupedEntriesMapping} - - - {entries.length > 0 && ( - - - ${total} - - - - )} - - {internal - ? setShowCheckoutModal(false)} - onFinalize={(checkoutNotes: string, recievingUserID: number | undefined) => { - setShowCheckoutModal(false); - emptyCart(checkoutNotes, recievingUserID); - }} - /> - : setShowCheckoutModal(false)} - onFinalize={(checkoutNotes: string) => { - setShowCheckoutModal(false); - emptyCart(checkoutNotes); - }} - groupedEntries={groupedEntries} - totalCost={total} - />} - - ); -} diff --git a/client/src/pages/lab_management/storefront/ShoppingCartRow.tsx b/client/src/pages/lab_management/storefront/ShoppingCartRow.tsx deleted file mode 100644 index a054de752..000000000 --- a/client/src/pages/lab_management/storefront/ShoppingCartRow.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import React from "react"; -import { - IconButton, - Stack, - TextField, - Typography, -} from "@mui/material"; -import { ShoppingCartEntry } from "./StorefrontPage"; -import CloseIcon from "@mui/icons-material/Close"; -import { useIsMobile } from "../../../common/IsMobileProvider"; - -interface ShoppingCartRowProps { - shoppingCartEntry: ShoppingCartEntry; - removeEntry: () => void; - setEntryCount: (newCount: number) => void; -} - -export default function ShoppingCartRow({ - shoppingCartEntry, - removeEntry, - setEntryCount, -}: ShoppingCartRowProps) { - const isMobile = useIsMobile(); - const { item, count } = shoppingCartEntry; - - return !isMobile ? ( - - - - - - - - {item.name} - - - - - setEntryCount(parseInt(e.target.value))} - /> - - - {count === 1 ? item.unit : item.pluralUnit} - - - - - ${(count * item.pricePerUnit).toFixed(2)} - - - ) : ( - - - - - - - - - {item.name} - - - - - setEntryCount(parseInt(e.target.value))} - /> - - - {count === 1 ? item.unit : item.pluralUnit} - - - - - ${(count * item.pricePerUnit).toFixed(2)} - - - ); -} diff --git a/client/src/pages/lab_management/storefront/StorefrontPage.tsx b/client/src/pages/lab_management/storefront/StorefrontPage.tsx deleted file mode 100644 index a2701e3a3..000000000 --- a/client/src/pages/lab_management/storefront/StorefrontPage.tsx +++ /dev/null @@ -1,255 +0,0 @@ -import { useCallback, useEffect, useState } from "react"; -import { Box, Divider, Snackbar, Stack, Switch, Typography } from "@mui/material"; -import SearchBar from "../../../common/SearchBar"; -import InventoryItem from "../../../types/InventoryItem"; -import AddToCartModal from "./AddToCartModal"; -import { useImmer } from "use-immer"; -import ShoppingCart from "./ShoppingCart"; -import { v4 as uuidv4 } from "uuid"; -import { gql } from "@apollo/client"; -import { useMutation, useQuery } from "@apollo/client/react"; -import RequestWrapper from "../../../common/RequestWrapper"; -import { GET_INVENTORY_ITEMS } from "../../../queries/inventoryQueries"; -import { useCurrentUser } from "../../../common/CurrentUserProvider"; -import { isAdmin, isManager, isStaff } from "../../../common/PrivilegeUtils"; -import Page from "../../Page"; -import { ListingCard } from "./ListingCard"; -import { ListingModal } from "./ListingModal"; -import { useIsMobile } from "../../../common/IsMobileProvider"; -import { GET_MAKERSPACES_WITH_ITEMS, MakerspaceWithItems } from "../../../queries/makerspaceQueries"; -import CheckoutSuccessModal from "./CheckoutSuccessModal"; -import { useLocation, useNavigate } from "react-router-dom"; -import { useMakeTheme } from "../../../common/MakeThemeProvider"; - - -const CHECKOUT_ITEMS = gql` - mutation CheckoutItems($items: [CartItem], $notes: String) { - checkoutItems(items: $items, notes: $notes) - } -`; - -export interface ShoppingCartEntry { - id: string; - item: InventoryItem; - count: number; - makerspace: number; -} - -function updateLocalStorage(cart: ShoppingCartEntry[] | null) { - localStorage.setItem("cart", JSON.stringify(cart)); -} - -export default function StorefrontPage() { - const currentUser = useCurrentUser(); - const isMobile = useIsMobile(); - const navigate = useNavigate(); - const makeTheme = useMakeTheme(); - const { search } = useLocation(); - - const { loading, error, data } = useQuery(GET_MAKERSPACES_WITH_ITEMS, { variables: { storefrontVisible: isStaff(currentUser) ? null : true } }); - - const [checkoutItems] = useMutation(CHECKOUT_ITEMS, { - refetchQueries: [{ query: GET_INVENTORY_ITEMS }], - }); - - const [searchText, setSearchText] = useState(""); - const [showModal, setShowModal] = useState(false); - const [showDetailsModal, setShowDetailsModal] = useState(false); - const [activeItem, setActiveItem] = useState(); - const [addToCartCount, setAddToCartCount] = useState(0); - const [shoppingCart, setShoppingCart] = useImmer([]); - const [purchasedItems, setPurchasedItems] = useImmer([]); - - - const [showInternalItems, setShowInternalItems] = useState(false); - const [showStaffItems, setShowStaffItems] = useState(false); - - const [checkoutFailureSnackbarOpen, setCheckoutFailureSnackbarOpen] = useState(false); - const [checkoutSuccessModalOpen, setCheckoutSuccessModalOpen] = useState(false); - - function handleShowInternalChange(_e: any) { - setShowInternalItems(!showInternalItems) - } - - function handleShowStaffChange(_e: any) { - setShowStaffItems(!showStaffItems) - } - - const setUrlParam = (paramName: string, paramValue: string) => { - const params = new URLSearchParams(search); - params.set(paramName, paramValue); - navigate(`/storefront?` + params, { replace: true }); - }; - useEffect(() => { - const searchParams = new URLSearchParams(search); - const queryString = searchParams.get("a") ?? ""; - - setSearchText(queryString) - }, [search]); - - const getCartFromStorage = useCallback(() => { - const storedCart = localStorage.getItem("cart"); - const parsedCart = storedCart && JSON.parse(storedCart); - setShoppingCart(parsedCart || []); - }, [setShoppingCart]); - - useEffect(() => { - // Load the cart on page load - getCartFromStorage(); - - // Load the cart whenever localstorage changes - window.addEventListener("storage", getCartFromStorage); - }, [getCartFromStorage]); - - const addToShoppingCart = (item: InventoryItem, count: number) => - setShoppingCart((draft) => { - const existing = shoppingCart.find((row) => row.item.id === item.id) - if (!existing) { - draft.push({ - id: uuidv4(), - item, - count, - makerspace: item.makerspaceID ?? item.makerspace?.id - }); - } else { - existing.count += count; - } - - updateLocalStorage(draft); - }); - - const removeFromShoppingCart = (id: string) => - setShoppingCart((draft) => { - const index = draft.findIndex((e: ShoppingCartEntry) => e.id === id); - draft.splice(index, 1); - updateLocalStorage(draft); - }); - - const setEntryCount = (id: string, newCount: number) => - setShoppingCart((draft) => { - const index = draft.findIndex((e: ShoppingCartEntry) => e.id === id); - - const valid = newCount > 0 && newCount <= draft[index].item.count; - if (!valid) return; - - draft[index].count = newCount; - - updateLocalStorage(draft); - }); - - const handleCheckout = async (checkoutNotes: string, _recievingUserID?: number) => { - const items: { id: number, count: number }[] = shoppingCart.map((cartItem) => ({ id: cartItem.item.id, count: cartItem.count })); - - const success = await checkoutItems({ - variables: { - items, - notes: checkoutNotes, - }, - }); - - if (success) { - setPurchasedItems(shoppingCart); - setCheckoutSuccessModalOpen(true); - setShoppingCart(() => []); - updateLocalStorage([]); - } - }; - - return ( - - - {`Storefront | ${makeTheme.title}`} - - {(currentUser.visitor == false && import.meta.env.VITE_DISABLE_STOREFRONT_CART === "false") && } - - {isAdmin(currentUser) && - - - - Internal Use Items - - - Staff Only Items - - - - } - - - setSearchText(e.target.value)} - onSubmit={() => setUrlParam("a", searchText)} - onClear={() => setSearchText("")} - /> - - } sx={{ width: "100%" }}> - {data?.makerspaces?.map((space: MakerspaceWithItems) => ( - - {space.name} - - {space.items.filter((item: InventoryItem) => { - const matchesSearch = item.name.toLowerCase().includes(searchText.toLowerCase()); - const isVisible = item.storefrontVisible || (showInternalItems && item.staffOnly) || (showStaffItems && item.staffOnly); - return matchesSearch && isVisible; - }).map((item: InventoryItem) => ( - { setActiveItem(item); setShowModal(true) }} - openDetailsModal={(item) => { setActiveItem(item); setShowDetailsModal(true) }} - /> - ))} - - - ))} - - - {activeItem && showModal && ( - addToShoppingCart(activeItem, addToCartCount)} - onClose={() => setShowModal(false)} - item={activeItem} - /> - )} - {activeItem && showDetailsModal && ( - addToShoppingCart(activeItem, addToCartCount)} - onClose={() => setShowDetailsModal(false)} /> - )} - - setCheckoutFailureSnackbarOpen(false)} - message="Checkout failed. Please make sure you have sufficient funds and then try again." - /> - setCheckoutSuccessModalOpen(false)} - groupedEntries={purchasedItems.reduce((groups: Record, entry: ShoppingCartEntry) => { - const key: number = entry.item.makerspaceID; - if (!groups[key]) { - groups[key] = []; - } - groups[key].push(entry); - return groups; - }, {})} - /> - - - ); -} diff --git a/client/src/pages/lab_management/storefront/internal/CancelCartModal.tsx b/client/src/pages/lab_management/storefront/internal/CancelCartModal.tsx deleted file mode 100644 index 94f231309..000000000 --- a/client/src/pages/lab_management/storefront/internal/CancelCartModal.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { Typography, Button } from "@mui/material"; -import { Box, Stack } from "@mui/system"; -import PrettyModal from "../../../../common/PrettyModal"; - -interface PickupModalProps { - open: boolean; - onClose: () => void; - onConfirm: () => void; -} - -export function CancelCartModal({ open, onClose, onConfirm }: PickupModalProps) { - if (!open) return null; - - return ( - - Confirm Item Pickup - - Confirm cancellation of this cart? - This action cannot be undone. All items will be restocked to inventory, and a full refund will be sent to the consumer account. - - - - - - - ); -} \ No newline at end of file diff --git a/client/src/pages/lab_management/storefront/internal/CartListPage.tsx b/client/src/pages/lab_management/storefront/internal/CartListPage.tsx deleted file mode 100644 index 0fa43c805..000000000 --- a/client/src/pages/lab_management/storefront/internal/CartListPage.tsx +++ /dev/null @@ -1,138 +0,0 @@ -import { Box, Button } from "@mui/material"; -import PageSectionHeader from "../../../../common/PageSectionHeader"; -import { Stack } from "@mui/system"; -import { DataGrid, GridColDef } from "@mui/x-data-grid"; -import AuditLogEntity from "../../audit_logs/AuditLogEntity"; -import { useQuery } from "@apollo/client/react"; -import { GET_CARTS } from "../../../../queries/cartQueries"; -import { InventoryCart } from "../../../../types/InventoryCart"; -import { useEffect, useState } from "react"; -import { GET_MAKERSPACES } from "../../../../queries/makerspaceQueries"; -import { Checkbox, FormControlLabel, FormGroup, TextField, CircularProgress } from "@mui/material"; -import { useLocation, useNavigate, useParams } from "react-router-dom"; -import { useMakeTheme } from "../../../../common/MakeThemeProvider"; - -export function CartListPage() { - const navigate = useNavigate(); - const { makerspaceID } = useParams<{ makerspaceID: string }>(); - const makeTheme = useMakeTheme(); - const { search } = useLocation(); - - const getCartsResult = useQuery(GET_CARTS, { pollInterval: 10000 }); - const getMakerspacesResult = useQuery(GET_MAKERSPACES); - - const [filteredMakerspaces, setFilteredMakerspaces] = useState(makerspaceID ? [parseInt(makerspaceID)] : []); - const [userSearch, setUserSearch] = useState(""); - - const makerspaces = getMakerspacesResult.data?.makerspaces || []; - const rows: InventoryCart[] = getCartsResult.data?.carts || []; - - // Filtering logic - const filteredRows = rows.filter((cart) => { - // Makerspace filter - const makerspaceMatch = filteredMakerspaces.length === 0 || filteredMakerspaces.includes(Number(cart.makerspace.id)); - // User filter (search by first, last, or username) - const userString = `${cart.user.firstName} ${cart.user.lastName} ${cart.user.ritUsername}`.toLowerCase(); - const userMatch = userString.includes(userSearch.toLowerCase()); - return makerspaceMatch && userMatch; - }); - - const setUrlParam = (paramName: string, paramValue: string) => { - const params = new URLSearchParams(search); - params.set(paramName, paramValue); - navigate(`/makerspace/${makerspaceID}/storefront/carts?` + params, { replace: true }); - }; - useEffect(() => { - const searchParams = new URLSearchParams(search); - const queryString = searchParams.get("a") ?? ""; - - setUserSearch(queryString) - }, [search]); - - const columns: GridColDef<(typeof rows)[number]>[] = [ - { - field: "id", - headerName: "ID", - width: 50, - }, - { - field: "user", - headerName: "User", - width: 300, - renderCell: (params) => , - }, - { - field: "makerspace", - headerName: "Makerspace", - width: 250, - renderCell: (params) => , - }, - { - field: "actions", - headerName: "Actions", - width: 250, - renderCell: (params) => ( - - - - ), - }, - { - field: "lastModified", - headerName: "Last Updated", - width: 220, - valueGetter: (value) => new Date(value).toLocaleString(), - }, - ]; - - return ( - - {`Carts | ${makeTheme.title}`} - - Active Carts - - - {/* Makerspace Filter */} - - {getMakerspacesResult.loading ? : makerspaces.map((space: { id: number, name: string }) => ( - { - setFilteredMakerspaces((prev) => - e.target.checked - ? [...prev, Number(space.id)] - : prev.filter((id) => id !== Number(space.id)) - ); - }} - /> - } - label={space.name} - /> - ))} - - {/* User Search Filter */} - setUserSearch(e.target.value)} - onSubmit={() => setUrlParam("a", userSearch)} - size="small" - /> - - - - - - - - ); -} \ No newline at end of file diff --git a/client/src/pages/lab_management/storefront/internal/CartPage.tsx b/client/src/pages/lab_management/storefront/internal/CartPage.tsx deleted file mode 100644 index c14612c9d..000000000 --- a/client/src/pages/lab_management/storefront/internal/CartPage.tsx +++ /dev/null @@ -1,186 +0,0 @@ -import { useMutation, useQuery } from "@apollo/client/react"; -import { CANCEL_CART, COMPLETE_CART, GET_CART } from "../../../../queries/cartQueries"; -import { DataGrid, GridColDef } from "@mui/x-data-grid"; -import { Button, Snackbar, Stack, Typography } from "@mui/material"; -import { CartItem } from "../../../../types/InventoryCart"; -import { useState } from "react"; -import Page from "../../../Page"; -import RequestWrapper from "../../../../common/RequestWrapper"; -import { RefundModal } from "./RefundModal"; -import { ConfirmPickupModal } from "./ConfirmPickupModal"; -import { CancelCartModal } from "./CancelCartModal"; -import { useNavigate, useParams } from "react-router-dom"; -import { useMakeTheme } from "../../../../common/MakeThemeProvider"; - -export interface CartItemCountState extends CartItem { - newCartcount: number; -} - -export function CartPage() { - const navigate = useNavigate(); - const { makerspaceID, cartID } = useParams<{ makerspaceID: string, cartID: string }>(); - if (!makerspaceID || !cartID) throw new Error("Makerspace ID and Cart ID are required"); - const makeTheme = useMakeTheme(); - - const cartResult = useQuery(GET_CART, { variables: { id: cartID } }); - - const [completeCartMutation] = useMutation(COMPLETE_CART); - const [cancelCartMutation] = useMutation(CANCEL_CART); - - const staticRows: CartItem[] = cartResult.data?.cart?.items || []; - const rows = staticRows.map(item => ({ ...item, newCartcount: item.cartcount })); - - const [refundModalItem, setRefundModalItem] = useState(null); - const [refundSuccessSnackbarOpen, setRefundSuccessSnackbarOpen] = useState(false); - const [refundErrorSnackbarOpen, setRefundErrorSnackbarOpen] = useState(false); - - const [confirmPickupModalOpen, setConfirmPickupModalOpen] = useState(false); - const [pickupSuccessSnackbarOpen, setPickupSuccessSnackbarOpen] = useState(false); - const [pickupErrorSnackbarOpen, setPickupErrorSnackbarOpen] = useState(false); - - const [cancelCartModalOpen, setCancelCartModalOpen] = useState(false); - const [cancelSuccessSnackbarOpen, setCancelSuccessSnackbarOpen] = useState(false); - const [cancelErrorSnackbarOpen, setCancelErrorSnackbarOpen] = useState(false); - - const columns: GridColDef<(typeof rows)[number]>[] = [ - { - field: "image", headerName: "Image", width: 160, - renderCell: (params) => (Product), - }, - { field: "name", headerName: "Name", width: 300 }, - { - field: "quantity", headerName: "Quantity", width: 600, - renderCell: (params) => - 0 ? "none" : "line-through" }}> - {params.row.newCartcount == 1 ? params.row.unit : params.row.pluralUnit} - - , - }, - - ]; - - return ( - - - - - - }> - {`Carts | ${makeTheme.title}`} - - - { - setRefundModalItem(null) - if (failure) { - setRefundErrorSnackbarOpen(true); - } else { - setRefundSuccessSnackbarOpen(true); - } - }} - cartId={parseInt(cartID)} - statedItem={refundModalItem} - /> - - setRefundSuccessSnackbarOpen(false)} - message="Refund process successful" - autoHideDuration={5000} - /> - setRefundErrorSnackbarOpen(false)} - message="Refund process failed. Please contact an administrator." - autoHideDuration={5000} - /> - - - setConfirmPickupModalOpen(false)} - onConfirm={() => { - setConfirmPickupModalOpen(false); - completeCartMutation({ - variables: { - cartID: cartID, - } - }).then(() => { - setPickupSuccessSnackbarOpen(true); - }).catch(() => { - setPickupErrorSnackbarOpen(true); - }); - }} - /> - - { - setPickupSuccessSnackbarOpen(false); - navigate(`/makerspace/${makerspaceID}/storefront/carts`); - }} - message="Pickup process successful. Redirecting back to Cart List..." - autoHideDuration={5000} - /> - setPickupErrorSnackbarOpen(false)} - message="Pickup process failed. Please contact an administrator." - autoHideDuration={5000} - /> - - - setCancelCartModalOpen(false)} - onConfirm={() => { - setCancelCartModalOpen(false); - cancelCartMutation({ - variables: { - cartID: cartID, - } - }).then(() => { - setCancelSuccessSnackbarOpen(true); - }).catch(() => { - setCancelErrorSnackbarOpen(true); - }); - }} - /> - - { - setCancelSuccessSnackbarOpen(false); - navigate(`/makerspace/${makerspaceID}/storefront/carts`); - }} - message="Cancel process successful. Redirecting back to Cart List..." - autoHideDuration={5000} - /> - setCancelErrorSnackbarOpen(false)} - message="Cancel process failed. Please contact an administrator." - autoHideDuration={5000} - /> - - - ) -} \ No newline at end of file diff --git a/client/src/pages/lab_management/storefront/internal/ConfirmPickupModal.tsx b/client/src/pages/lab_management/storefront/internal/ConfirmPickupModal.tsx deleted file mode 100644 index e043eed46..000000000 --- a/client/src/pages/lab_management/storefront/internal/ConfirmPickupModal.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { Typography, Button } from "@mui/material"; -import { Box, Stack } from "@mui/system"; -import PrettyModal from "../../../../common/PrettyModal"; - -interface PickupModalProps { - open: boolean; - onClose: () => void; - onConfirm: () => void; -} - -export function ConfirmPickupModal({ open, onClose, onConfirm }: PickupModalProps) { - if (!open) return null; - - return ( - - Confirm Item Pickup - - Confirm completion of pickup? - This action cannot be undone. Only confirm once the user has picked up all the items listed in this cart. - - - - - - - ); -} \ No newline at end of file diff --git a/client/src/pages/lab_management/storefront/internal/RefundModal.tsx b/client/src/pages/lab_management/storefront/internal/RefundModal.tsx deleted file mode 100644 index cbe757b15..000000000 --- a/client/src/pages/lab_management/storefront/internal/RefundModal.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { Box, Button, Checkbox, FormControlLabel, Typography } from "@mui/material"; -import PrettyModal from "../../../../common/PrettyModal"; -import { CartItemCountState } from "./CartPage"; -import { useState } from "react"; -import { useMutation } from "@apollo/client/react"; -import { GET_CART, SUBTRACT_ITEM_FROM_CART } from "../../../../queries/cartQueries"; - -interface PrettyModalProps { - open: boolean; - onClose: (failure?: boolean) => void; - statedItem: CartItemCountState | null; - cartId: number; -} - -export function RefundModal({ open, onClose, statedItem, cartId }: PrettyModalProps) { - const [restock, setRestock] = useState(false); - - const [subtractItemFromCart, subtractItemFromCartResult] = useMutation(SUBTRACT_ITEM_FROM_CART, { refetchQueries: [{ query: GET_CART, variables: { id: cartId } }] }); - - if (!statedItem) { - return null; // If no item is selected, do not render the modal - } - - return ( - - Update Item Cart Count ({statedItem.name}) - - Current Count: {statedItem.cartcount} - New Count: {statedItem.newCartcount} - The user will be refunded ${(statedItem.cartcount - statedItem.newCartcount) * statedItem.pricePerUnit}. - - - setRestock(e.target.checked)} />} label={`Restock ${statedItem.cartcount - statedItem.newCartcount} ${statedItem.pluralUnit} to Inventory?`} /> - - - - - ) -} \ No newline at end of file diff --git a/client/src/pages/lab_management/storefront_preview/CreatingTransactionView.tsx b/client/src/pages/lab_management/storefront_preview/CreatingTransactionView.tsx deleted file mode 100644 index 07a4e1f32..000000000 --- a/client/src/pages/lab_management/storefront_preview/CreatingTransactionView.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import React from "react"; -import LogoSvg from "../../../assets/shed logo orange white.png"; -import { Divider, Stack, Typography } from "@mui/material"; -import NameTag from "./NameTag"; -import styled from "styled-components"; -import ShoppingCartPreviewRow from "./ShoppingCartPreviewRow"; -import { ShoppingCartEntry } from "../storefront/StorefrontPage"; - -const StyledLogo = styled.img` - width: 530px; -`; - -const AdamSavage = { - name: "Adam Savage", - avatarHref: "https://speaking.com/wp-content/uploads/2017/06/Adam-Savage.jpg", - id: "test-id-1", -}; - -interface CreatingTransactionViewProps { - cart: ShoppingCartEntry[]; -} - -export default function CreatingTransactionView({ - cart, -}: CreatingTransactionViewProps) { - const total = cart - .reduce((acc, { count, item }) => acc + count * item.pricePerUnit, 0) - .toFixed(2); - - return ( - - - - - - - - - Shopping cart - - - } spacing={4} mt={4}> - {cart.map((entry) => ( - - ))} - - - - ${total} - - - - ); -} diff --git a/client/src/pages/lab_management/storefront_preview/NameTag.tsx b/client/src/pages/lab_management/storefront_preview/NameTag.tsx deleted file mode 100644 index 9d3a152f6..000000000 --- a/client/src/pages/lab_management/storefront_preview/NameTag.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import React, { useState } from "react"; -import Person from "../../../types/Person"; -import { Avatar, Paper, Stack, Typography } from "@mui/material"; - -interface NameTagProps { - person: Person; - scale?: number; -} - -export default function NameTag({ person, scale = 1 }: NameTagProps) { - const [angle] = useState(Math.random() * 10 - 5); - - return ( - - - - HELLO - - - - my name is - - - - - - {person.name.split(" ")[0]} - - - - - ); -} diff --git a/client/src/pages/lab_management/storefront_preview/NoTransactionView.tsx b/client/src/pages/lab_management/storefront_preview/NoTransactionView.tsx deleted file mode 100644 index 9ed38275e..000000000 --- a/client/src/pages/lab_management/storefront_preview/NoTransactionView.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from "react"; -import { Stack, Typography } from "@mui/material"; -import LogoSvg from "../../../assets/shed logo orange white.png"; -import styled from "styled-components"; -import NameTag from "./NameTag"; - -const StyledLogo = styled.img` - width: 530px; -`; - -const AdamSavage = { - name: "Adam Savage", - avatarHref: "https://speaking.com/wp-content/uploads/2017/06/Adam-Savage.jpg", - id: "test-id-1", -}; - -export default function NoTransactionView() { - return ( - - - - Retail Center - - - - ); -} diff --git a/client/src/pages/lab_management/storefront_preview/ShoppingCartPreviewRow.tsx b/client/src/pages/lab_management/storefront_preview/ShoppingCartPreviewRow.tsx deleted file mode 100644 index e54d6d4e5..000000000 --- a/client/src/pages/lab_management/storefront_preview/ShoppingCartPreviewRow.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import React from "react"; -import { ShoppingCartEntry } from "../storefront/StorefrontPage"; -import { Avatar, Stack, Typography } from "@mui/material"; - -interface ShoppingCartRowProps { - entry: ShoppingCartEntry; -} - -export default function ShoppingCartPreviewRow({ - entry, -}: ShoppingCartRowProps) { - const { item, count } = entry; - - return ( - - - - - - {item.name} - - - - - - {count} - - - - {count === 1 ? item.unit : item.pluralUnit} - - - - - ${(count * item.pricePerUnit).toFixed(2)} - - - ); -} diff --git a/client/src/pages/lab_management/storefront_preview/StorefrontPreviewPage.tsx b/client/src/pages/lab_management/storefront_preview/StorefrontPreviewPage.tsx deleted file mode 100644 index a2daa826f..000000000 --- a/client/src/pages/lab_management/storefront_preview/StorefrontPreviewPage.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import React, { useCallback, useEffect, useState } from "react"; -import { Box } from "@mui/material"; -import NoTransactionView from "./NoTransactionView"; -import { ShoppingCartEntry } from "../storefront/StorefrontPage"; -import CreatingTransactionView from "./CreatingTransactionView"; - -export default function StorefrontPreviewPage() { - const [cart, setCart] = useState([]); - - const getCartFromStorage = useCallback(() => { - const storedCart = localStorage.getItem("cart"); - const parsedCart = storedCart && JSON.parse(storedCart); - setCart(parsedCart || []); - }, []); - - useEffect(() => { - // Load the cart on page load - getCartFromStorage(); - - // Load the cart whenever localstorage changes - window.addEventListener("storage", getCartFromStorage); - }, [getCartFromStorage]); - - return ( - - {cart.length ? ( - - ) : ( - - )} - - ); -} diff --git a/client/src/pages/lab_management/users/userpage/Info.tsx b/client/src/pages/lab_management/users/userpage/Info.tsx index 69302b562..c6af92c81 100644 --- a/client/src/pages/lab_management/users/userpage/Info.tsx +++ b/client/src/pages/lab_management/users/userpage/Info.tsx @@ -1,8 +1,7 @@ -import { Alert, Avatar, Button, IconButton, Stack, Typography } from "@mui/material"; +import { Alert, Avatar, Button, Stack, Typography } from "@mui/material"; import { useIsMobile } from "../../../../common/IsMobileProvider"; import { stringAvatar } from "../../../../common/avatarGenerator"; import { useNavigate, useParams } from "react-router-dom"; -import ArrowBackIcon from '@mui/icons-material/ArrowBack'; import HistoryIcon from "@mui/icons-material/History"; import InfoBlob from "../InfoBlob"; import { format, parseISO } from "date-fns"; diff --git a/client/src/pages/newreaderpage/NewReaderPage.tsx b/client/src/pages/newreaderpage/NewReaderPage.tsx deleted file mode 100644 index 9ae95c688..000000000 --- a/client/src/pages/newreaderpage/NewReaderPage.tsx +++ /dev/null @@ -1,122 +0,0 @@ -import { useMutation } from "@apollo/client/react"; -import { Button, Checkbox, Stack, TextField } from "@mui/material"; -import { PAIR_READER } from "../../queries/readersQueries"; -import { useState } from "react"; - -export default function NewReaderPage() { - const [pairReader] = useMutation(PAIR_READER); - - // Server Config - const [HumanName, setHumanName] = useState("Enter settings and hit Pair to receive a human readable name"); - const [Cert, setCert] = useState("Enter settings and hit Pair to see cert"); - const [ServerJSON, setServerJSON] = useState("Enter settings and hit Pair to see server JSON"); - const [NetworkJSON, setNetworkJSON] = useState("Enter settings and hit submit to see network JSON"); - - // Network Config - const [SSID, setSSID] = useState(""); - const [Password, setPassword] = useState(""); - const [UseWifi, setUseWifi] = useState(true); - - // Hardware/Last Config - const [LastSSID, setLastSSID] = useState("LastSSID"); - const [HaveEthernet, setHaveEthernet] = useState(false); - const [WasAllowedWifi, setWasAllowedHaveWifi] = useState(true); - const [SerialNumber, setSerialNumber] = useState("ABCD"); - - - - function applyHW(){ - setSSID(LastSSID); - } - - function applyNetworkToJson(){ - const obj: any = {}; - if (UseWifi){ - obj["SSID"] = SSID; - obj["Password"] = Password; - } - obj["AllowedWifi"] = UseWifi; - return (JSON.stringify(obj)); - } - - function handlePair(resp: {data?: {pairReader: {readerKey: string, name: string, certs: string, siteName: string}}}){ - if (resp?.data?.pairReader == null){ - setServerJSON("Failed to pair (no json)"); - setCert("Failed to pair (no certs)"); - return; - } - const obj: any = {}; - obj["Server"] = resp.data.pairReader.siteName; - obj["Key"] = resp.data.pairReader.readerKey; - - obj["SSID"] = SSID; - obj["Password"] = Password; - - setServerJSON(JSON.stringify(obj)); - setCert(resp.data.pairReader.certs); - setHumanName(resp.data.pairReader.name); - - } - - return -

This will be automatic soon

- -

0. Hardware Identification

- This will happen automatically on connect to shlug - - Serial Number - setSerialNumber(e.target.value)} value={SerialNumber}> - - - HaveEthernet - setHaveEthernet(e.target.checked)} checked={HaveEthernet}/> - - - AllowedWifi - setWasAllowedHaveWifi(e.target.checked)} checked={WasAllowedWifi}/> - - - Last SSID - setLastSSID(e.target.value)} value={LastSSID}> - - - - -

1.Network

- - - Use Wifi - setUseWifi(e.target.checked)} checked={UseWifi} /> - - - { UseWifi ? - - - WiFi SSID - setSSID(e.target.value)} value={SSID}> - - - WiFi Password - setPassword(e.target.value)} value={Password}> - - - : null - } - - - - Network JSON
{NetworkJSON}
- - - -

2. Server

- -

Name

-
{HumanName}
-

Server JSON

-
{ServerJSON}
-

Cert

-
{Cert}
- -
-} diff --git a/client/src/queries/cartQueries.ts b/client/src/queries/cartQueries.ts deleted file mode 100644 index d5b57ad49..000000000 --- a/client/src/queries/cartQueries.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { gql } from "@apollo/client"; - -export const GET_CARTS = gql` - query GetCarts($makerspaceID: ID) { - carts(makerspaceID: $makerspaceID) { - id - user { - id - firstName - lastName - ritUsername - } - makerspace { - id - name - } - lastModified - } - } -`; - -export const GET_CART = gql` - query GetCart($id: ID!) { - cart(id: $id) { - id - user { - id - firstName - lastName - ritUsername - } - makerspace { - id - name - } - items { - id - image - name - unit - pluralUnit - count - pricePerUnit - notes - cartcount - } - lastModified - } - } -`; - -export const SUBTRACT_ITEM_FROM_CART = gql` - mutation SubtractItemFromCart($cartID: ID!, $itemID: ID!, $quantity: Int!, $restock: Boolean!) { - subtractItemFromCart(cartID: $cartID, itemID: $itemID, quantity: $quantity, restock: $restock) - } -`; - -export const CANCEL_CART = gql` - mutation CancelCart($cartID: ID!) { - cancelCart(cartID: $cartID) - } -`; - -export const COMPLETE_CART = gql` - mutation CompleteCart($cartID: ID!) { - completeCart(cartID: $cartID) - } -`; diff --git a/client/src/queries/readersQueries.ts b/client/src/queries/readersQueries.ts deleted file mode 100644 index dc1521032..000000000 --- a/client/src/queries/readersQueries.ts +++ /dev/null @@ -1,331 +0,0 @@ -import { gql } from "@apollo/client"; - -export interface Reader { - id: number, - name: string, - temp: number, - state: string, - user: {id: number, firstName: string, lastName: string} - recentSessionLength: number, - lastStatusReason: string, - scheduledStatusFreq: number, - lastStatusTime: string, - BEVer: string, - FEVer: string, - HWVer: string, - SN: string, - sessionStartTime: number, - targetFirmwareVersion?: string, -} - -export const GET_READERS = gql` - query GetReaders($makerspaceID: ID) { - readers(makerspaceID: $makerspaceID) { - id - name - temp - state - user { - id - firstName - lastName - } - recentSessionLength - lastStatusReason - scheduledStatusFreq - lastStatusTime - BEVer - FEVer - HWVer - sessionStartTime - SN - readerKeyCycle - pairTime - targetFirmwareVersion - } - } -`; - - -export const GET_READERS_WITH_PAIRINGS = gql` - query GetReaders($makerspaceID: ID) { - readers(makerspaceID: $makerspaceID) { - id - name - temp - state - user { - id - firstName - lastName - } - recentSessionLength - lastStatusReason - scheduledStatusFreq - lastStatusTime - BEVer - FEVer - HWVer - sessionStartTime - SN - readerKeyCycle - pairTime - targetFirmwareVersion - pairedMakerspace { - id - name - } - pairedEquipment { - equipmentID - equipmentName - instanceID - instanceName - } - } - } -`; - -export const GET_READER_BY_ID = gql` - query GetReaderByID($id: ID!) { - reader(id: $id) { - id - name - temp - state - user { - id - firstName - lastName - } - recentSessionLength - lastStatusReason - scheduledStatusFreq - lastStatusTime - BEVer - FEVer - HWVer - sessionStartTime - SN - readerKeyCycle - pairTime - targetFirmwareVersion - } - } -`; - - -export const GET_READER_LOGS = gql` -query GetReaderLogs($makerspaceID: ID, $from: DateTime, $to: DateTime, $offset: Int, $limit: Int){ - readerLogs(makerspaceID: $makerspaceID, from: $from, to: $to, pageOffset: $offset, pageLimit: $limit) { - id - dateTime - reader { - id - name - } - instance { - id - name - equipment { - id - name - room { - makerspace { - id - name - } - } - } - } - log - } -}`; - - -export const GET_UNPAIRED_READERS = gql` - query GetUnpairedReaders { - unpairedReaders { - id - name - temp - state - user { - id - firstName - lastName - } - recentSessionLength - lastStatusReason - scheduledStatusFreq - lastStatusTime - BEVer - FEVer - HWVer - sessionStartTime - SN - readerKeyCycle - pairTime - targetFirmwareVersion - } - } -` - -export const GET_MAKERSPACE_FOR_WELCOME_READER = gql` -query Query($readerId: ID) { - makerspaceForWelcomeReader(readerId: $readerId){ - id - name - imageUrl - rooms { - id - name - equipment { - id - name - imageUrl - sopUrl - trainingModules { - id - name - } - numAvailable - numInUse - byReservationOnly - notes - archived - } - trainingModules { - id - name - } - } - trainingModules { - id - name - } - } -} -`; - -export const GET_WELCOME_READERS_FOR_MAKERSPACE = gql` -query GetWelcomeReadersForMakerspace($makerspaceId: ID!) { - welcomeReadersForMakerspace(makerspaceId: $makerspaceId){ - id - name - temp - state - user { - id - firstName - lastName - } - recentSessionLength - lastStatusReason - scheduledStatusFreq - lastStatusTime - BEVer - FEVer - HWVer - sessionStartTime - SN - readerKeyCycle - pairTime - targetFirmwareVersion - } -} -`; - -export const CREATE_READER = gql` - mutation CreateReader( - $id: ID!, - $name: string, - ) { - createReader( - id: $id, - name: $name, - ) { - id - name - } - } -`; - -export const DELETE_READER = gql` - mutation DeleteReader($id: ID!){ - deleteReader(id: $id) - } -` -export const PAIR_AS_WELCOME_READER = gql` -mutation PairAsWelcomeReader($readerId: ID!, $makerspaceId: ID!) { - pairAsWelcomeReader(readerID: $readerId, makerspaceID: $makerspaceId) -} -`; - -export const UNPAIR_AS_WELCOME_READER = gql` -mutation UnpairAsWelcomeReader($readerId: ID!, $makerspaceId: ID!) { - unpairAsWelcomeReader(readerID: $readerId, makerspaceID: $makerspaceId) -} -`; - -export const PAIR_READER = gql` - mutation PairReader( - $SN: String!, - ) { - pairReader( - SN: $SN, - ) { - readerKey - name - siteName - certs - } - } -`; - - - -export const SET_READER_NAME = gql` - mutation SetReaderName($id: ID!, $name: string) { - setName(id: $id, name: $name) { - id - name - temp - state - currentUID - recentSessionLength - lastStatusReason - scheduledStatusFreq - lastStatusTime - } - } -`; - -export const IDENTIFY_READER = gql` - mutation IdentifyReader($id:ID!, $doIdentify: Boolean!){ - identifyReader(id:$id, doIdentify:$doIdentify) - } -`; - -export const SET_READER_STATE = gql` - mutation SetReaderState($id: ID!, $state: String) { - setState(id: $id, state: $state) - } -`; - -export const RESTART_ALL_READERS = gql` - mutation RestartAllReaders($makerspaceID: ID!) { - restartAllReaders(makerspaceID: $makerspaceID) - } -`; - -export const GET_AVAILABLE_FIRMWARE_VERSIONS = gql` - query Query { - availableFirmwareVersions - } -`; - -export const REQUEST_OTA_UPDATE = gql` - mutation SetOTAVersion($ids: [ID!]!, $otaTag: String!, $updateNow: Boolean!) { - setOTAVersion(ids: $ids, otaTag: $otaTag, updateNow: $updateNow) - } -`; \ No newline at end of file diff --git a/client/src/reportWebVitals.ts b/client/src/reportWebVitals.ts deleted file mode 100644 index 5fa3583b7..000000000 --- a/client/src/reportWebVitals.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { ReportHandler } from "web-vitals"; - -const reportWebVitals = (onPerfEntry?: ReportHandler) => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import("web-vitals").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry); - getFID(onPerfEntry); - getFCP(onPerfEntry); - getLCP(onPerfEntry); - getTTFB(onPerfEntry); - }); - } -}; - -export default reportWebVitals; diff --git a/client/src/types/InventoryCart.ts b/client/src/types/InventoryCart.ts deleted file mode 100644 index 9ba13af3e..000000000 --- a/client/src/types/InventoryCart.ts +++ /dev/null @@ -1,29 +0,0 @@ -import InventoryItem from "./InventoryItem"; - -export interface InventoryCart { - id: number; - user: { - id: number; - firstName: string; - lastName: string; - ritUsername: string; - }; - makerspace: { - id: number; - name: string; - }; - items?: InventoryItem[]; - lastModified: string; -} - -export interface CartItem { - id: number; - image: string; - name: string; - unit: string; - pluralUnit: string; - count: number; - pricePerUnit: number; - notes: string; - cartcount: number; -} diff --git a/client/src/types/Person.ts b/client/src/types/Person.ts deleted file mode 100644 index 721409ead..000000000 --- a/client/src/types/Person.ts +++ /dev/null @@ -1,6 +0,0 @@ -// TODO: delete Person, replace usages with User -export default interface Person { - id: string; - name: string; - avatarHref: string; -} diff --git a/package-lock.json b/package-lock.json index f6812d10d..90482a5e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,7 +38,6 @@ "https": "^1.0.0", "knex": "^3.1.0", "mailgun.js": "^12.0.3", - "moment": "^2.30.1", "morgan": "^1.10.0", "mqtt": "^5.15.1", "node-schedule": "^2.1.1", @@ -127,8 +126,7 @@ "use-immer": "^0.11.0", "uuid": "^8.3.2", "vite": "^7.1.11", - "vite-plugin-eslint2": "^5.0.4", - "web-vitals": "^2.1.4" + "vite-plugin-eslint2": "^5.0.4" }, "devDependencies": { "@eslint/js": "^9.33.0", @@ -8233,7 +8231,9 @@ } }, "node_modules/fast-xml-builder": { - "version": "1.1.5", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.2.0.tgz", + "integrity": "sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==", "funding": [ { "type": "github", @@ -8242,7 +8242,8 @@ ], "license": "MIT", "dependencies": { - "path-expression-matcher": "^1.1.3" + "path-expression-matcher": "^1.5.0", + "xml-naming": "^0.1.0" } }, "node_modules/fast-xml-parser": { @@ -15886,10 +15887,6 @@ "loose-envify": "^1.0.0" } }, - "node_modules/web-vitals": { - "version": "2.1.4", - "license": "Apache-2.0" - }, "node_modules/whatwg-mimetype": { "version": "4.0.0", "license": "MIT", @@ -16144,6 +16141,21 @@ "node": ">=0.6.0" } }, + "node_modules/xml-naming": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/xml-naming/-/xml-naming-0.1.0.tgz", + "integrity": "sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/xml2js": { "version": "0.6.2", "license": "MIT", diff --git a/package.json b/package.json index 78f633d43..73b835513 100644 --- a/package.json +++ b/package.json @@ -16,10 +16,10 @@ "start:staging": "cross-env NODE_ENV=staging npm run build:dev", "start:debug": "cross-env NODE_ENV=development npm run build:server && nodemon --exec tsx --inspect=0.0.0.0:9229 server/dist/server.js", "build:dev": "nodemon server/src/server.ts --exec tsx server/src/server.ts -e ts,graphql", - "knex:migrate:make": "cross-env NODE_OPTIONS=\"--import tsx\" npx knex --migrations-directory server/src/db/migrations migrate:make -x ts", - "knex:migrate:latest": "cross-env NODE_OPTIONS=\"--import tsx\" npx knex --knexfile server/src/db/knexFile.ts migrate:latest", - "knex:migrate:rollback": "cross-env NODE_OPTIONS=\"--import tsx\" npx knex --knexfile server/src/db/knexFile.ts migrate:rollback", - "knex:migrate:unlock": "cross-env NODE_OPTIONS=\"--import tsx\" npx knex --knexfile server/src/db/knexFile.ts migrate:unlock", + "knex:migrate:make": "cross-env NODE_OPTIONS=\"--import tsx\" npx knex --migrations-directory server/src/database/knex/migrations migrate:make -x ts", + "knex:migrate:latest": "cross-env NODE_OPTIONS=\"--import tsx\" npx knex --knexfile server/src/database/knex/knexFile.ts migrate:latest", + "knex:migrate:rollback": "cross-env NODE_OPTIONS=\"--import tsx\" npx knex --knexfile server/src/database/knex/knexFile.ts migrate:rollback", + "knex:migrate:unlock": "cross-env NODE_OPTIONS=\"--import tsx\" npx knex --knexfile server/src/database/knex/knexFile.ts migrate:unlock", "lint": "cd server/ && eslint -c eslint.config.js src/**/*.ts", "lint-fix": "cd server/ && eslint -c eslint.config.js --fix src/**/*.ts" }, @@ -53,7 +53,6 @@ "https": "^1.0.0", "knex": "^3.1.0", "mailgun.js": "^12.0.3", - "moment": "^2.30.1", "morgan": "^1.10.0", "mqtt": "^5.15.1", "node-schedule": "^2.1.1", @@ -105,4 +104,4 @@ "engines": { "node": ">=20.x" } -} \ No newline at end of file +} diff --git a/server/src/api/devices/cards/cardApi.ts b/server/src/api/devices/cards/cardApi.ts index 2fa81c75e..3b004e1ff 100644 --- a/server/src/api/devices/cards/cardApi.ts +++ b/server/src/api/devices/cards/cardApi.ts @@ -1,9 +1,9 @@ import expressWs from 'express-ws'; import * as Atrium from "../../../integrations/atrium-integration/atrium.js"; import { CurrencySource } from "../../../integrations/currency/types.js"; -import * as UserRepo from "../../../repositories/Users/UserRepository.js"; -import * as TempCardRepo from "../../../repositories/Users/TempCardRepository.js"; -import { ReaderRow } from "../../../db/tables.js"; +import * as UserRepo from "../../../database/repositories/Users/UserRepository.js"; +import * as TempCardRepo from "../../../database/repositories/Users/TempCardRepository.js"; +import { ReaderRow } from "../../../database/knex/tables.js"; enum DispenserStatus { CARD_CHANGE = "CARD_CHANGE", diff --git a/server/src/api/devices/core/access/access.ts b/server/src/api/devices/core/access/access.ts index 176e6a168..b356693e4 100644 --- a/server/src/api/devices/core/access/access.ts +++ b/server/src/api/devices/core/access/access.ts @@ -1,5 +1,5 @@ import expressWs from 'express-ws'; -import WSACSController from '../../../../models/api/WSACS/WSACSController.js'; +import WSACSController from '../../../../database/models/api/WSACS/WSACSController.js'; export function registerEndpoints(app: expressWs.Application) { app.ws("/api/devices/cores/access/ws", WSACSController.initConnection); diff --git a/server/src/api/devices/core/coreApi.ts b/server/src/api/devices/core/coreApi.ts index 8c2e23958..097c8e5ee 100644 --- a/server/src/api/devices/core/coreApi.ts +++ b/server/src/api/devices/core/coreApi.ts @@ -1,6 +1,6 @@ import expressWs from 'express-ws'; -import { Device } from "../../../models/devices/device.js"; -import * as CoreRepo from "../../../repositories/Devices/CoreRepository.js" +import { Device } from "../../../database/models/devices/device.js"; +import * as CoreRepo from "../../../database/repositories/Devices/CoreRepository.js" import * as AccessAPI from "./access/access.js"; diff --git a/server/src/api/devices/deviceApi.ts b/server/src/api/devices/deviceApi.ts index b592019eb..640beb32c 100644 --- a/server/src/api/devices/deviceApi.ts +++ b/server/src/api/devices/deviceApi.ts @@ -1,9 +1,9 @@ import expressWs from 'express-ws'; -import * as DeviceRepo from "../../repositories/Devices/DeviceRepository.js" +import * as DeviceRepo from "../../database/repositories/Devices/DeviceRepository.js" import * as CardAPI from "./cards/cardApi.js"; import * as CoreAPI from "./core/coreApi.js"; import * as FileAPI from "./files/fileApi.js"; -import { Device } from "../../models/devices/device.js"; +import { Device } from "../../database/models/devices/device.js"; export async function authenticateDevice(device: Device, submittedKey: string): Promise { if (device.pairTime === undefined || device.SN === undefined || device.keyCycle === undefined) { return false; } diff --git a/server/src/auth.ts b/server/src/auth.ts index 651235d13..8b84f3bb2 100644 --- a/server/src/auth.ts +++ b/server/src/auth.ts @@ -23,14 +23,14 @@ import { getUserTrainerPerms, updateAtriumToken, updateUserName -} from "./repositories/Users/UserRepository.js"; -import { getHoldsByUser } from "./repositories/Holds/HoldsRepository.js"; +} from "./database/repositories/Users/UserRepository.js"; +import { getHoldsByUser } from "./database/repositories/Holds/HoldsRepository.js"; import { CurrentUser } from "./context.js"; -import { createUnassocaitedAuditLog } from "./repositories/AuditLogs/AuditLogRepository.js"; +import { createUnassocaitedAuditLog } from "./database/repositories/AuditLogs/AuditLogRepository.js"; import path from "path"; -import { insertTempRole } from './repositories/tempRolesRepo.js'; +import { insertTempRole } from './database/repositories/tempRolesRepo.js'; import { generateAtriumToken } from './integrations/atrium-integration/atrium.js'; -import * as SessionRepo from "./repositories/Users/SessionRepository.js"; +import * as SessionRepo from "./database/repositories/Users/SessionRepository.js"; const __dirname = import.meta.dirname; diff --git a/server/src/context.ts b/server/src/context.ts index d81fb38ba..df8131850 100644 --- a/server/src/context.ts +++ b/server/src/context.ts @@ -1,6 +1,6 @@ -import { UserRow } from "./db/tables.js"; +import { UserRow } from "./database/knex/tables.js"; import { GraphQLError } from "graphql/error/GraphQLError.js"; -import { knex } from "./db/index.js"; +import { knex } from "./database/knex/index.js"; // console.log("Migrating"); // const ret = await knex.migrate.latest() diff --git a/server/src/data/devUsers.json b/server/src/database/data/devUsers.json similarity index 100% rename from server/src/data/devUsers.json rename to server/src/database/data/devUsers.json diff --git a/server/src/data/humanReadableNames.ts b/server/src/database/data/humanReadableNames.ts similarity index 100% rename from server/src/data/humanReadableNames.ts rename to server/src/database/data/humanReadableNames.ts diff --git a/server/src/db/index.ts b/server/src/database/knex/index.ts similarity index 100% rename from server/src/db/index.ts rename to server/src/database/knex/index.ts diff --git a/server/src/db/knexFile.ts b/server/src/database/knex/knexFile.ts similarity index 96% rename from server/src/db/knexFile.ts rename to server/src/database/knex/knexFile.ts index 9ccff9fbe..982ddb802 100644 --- a/server/src/db/knexFile.ts +++ b/server/src/database/knex/knexFile.ts @@ -11,7 +11,7 @@ import { createRequire } from "module"; const require = createRequire(import.meta.url); //Remove this line if running using --esm const __dirname = import.meta.dirname; -require("dotenv").config({ path: __dirname + "/./../../.env" }); +require("dotenv").config({ path: __dirname + "/./../../../.env" }); // Update with your config settings. const config: any = { //remove ': any' if using --esm diff --git a/server/src/db/migrations/20210923214317_initial_users.ts b/server/src/database/knex/migrations/20210923214317_initial_users.ts similarity index 100% rename from server/src/db/migrations/20210923214317_initial_users.ts rename to server/src/database/knex/migrations/20210923214317_initial_users.ts diff --git a/server/src/db/migrations/20211010154323_build-training-tables.ts b/server/src/database/knex/migrations/20211010154323_build-training-tables.ts similarity index 100% rename from server/src/db/migrations/20211010154323_build-training-tables.ts rename to server/src/database/knex/migrations/20211010154323_build-training-tables.ts diff --git a/server/src/db/migrations/20211102194503_machines_table.ts b/server/src/database/knex/migrations/20211102194503_machines_table.ts similarity index 100% rename from server/src/db/migrations/20211102194503_machines_table.ts rename to server/src/database/knex/migrations/20211102194503_machines_table.ts diff --git a/server/src/db/migrations/20220119232016_store-front.ts b/server/src/database/knex/migrations/20220119232016_store-front.ts similarity index 100% rename from server/src/db/migrations/20220119232016_store-front.ts rename to server/src/database/knex/migrations/20220119232016_store-front.ts diff --git a/server/src/db/migrations/20220126063347_holds_table.ts b/server/src/database/knex/migrations/20220126063347_holds_table.ts similarity index 100% rename from server/src/db/migrations/20220126063347_holds_table.ts rename to server/src/database/knex/migrations/20220126063347_holds_table.ts diff --git a/server/src/db/migrations/20220215195334_audit_logs.ts b/server/src/database/knex/migrations/20220215195334_audit_logs.ts similarity index 100% rename from server/src/db/migrations/20220215195334_audit_logs.ts rename to server/src/database/knex/migrations/20220215195334_audit_logs.ts diff --git a/server/src/db/migrations/20220222200523_rooms_table.ts b/server/src/database/knex/migrations/20220222200523_rooms_table.ts similarity index 100% rename from server/src/db/migrations/20220222200523_rooms_table.ts rename to server/src/database/knex/migrations/20220222200523_rooms_table.ts diff --git a/server/src/db/migrations/20220223203639_inventory-threshold.ts b/server/src/database/knex/migrations/20220223203639_inventory-threshold.ts similarity index 100% rename from server/src/db/migrations/20220223203639_inventory-threshold.ts rename to server/src/database/knex/migrations/20220223203639_inventory-threshold.ts diff --git a/server/src/db/migrations/20220223212706_remove-purchase-orders.ts b/server/src/database/knex/migrations/20220223212706_remove-purchase-orders.ts similarity index 100% rename from server/src/db/migrations/20220223212706_remove-purchase-orders.ts rename to server/src/database/knex/migrations/20220223212706_remove-purchase-orders.ts diff --git a/server/src/db/migrations/20220305183523_room-fk-users.ts b/server/src/database/knex/migrations/20220305183523_room-fk-users.ts similarity index 100% rename from server/src/db/migrations/20220305183523_room-fk-users.ts rename to server/src/database/knex/migrations/20220305183523_room-fk-users.ts diff --git a/server/src/db/migrations/20220305184048_room-fk-equipment.ts b/server/src/database/knex/migrations/20220305184048_room-fk-equipment.ts similarity index 100% rename from server/src/db/migrations/20220305184048_room-fk-equipment.ts rename to server/src/database/knex/migrations/20220305184048_room-fk-equipment.ts diff --git a/server/src/db/migrations/20220310180432_university-id.ts b/server/src/database/knex/migrations/20220310180432_university-id.ts similarity index 100% rename from server/src/db/migrations/20220310180432_university-id.ts rename to server/src/database/knex/migrations/20220310180432_university-id.ts diff --git a/server/src/db/migrations/20220316203223_first-time-users.ts b/server/src/database/knex/migrations/20220316203223_first-time-users.ts similarity index 100% rename from server/src/db/migrations/20220316203223_first-time-users.ts rename to server/src/database/knex/migrations/20220316203223_first-time-users.ts diff --git a/server/src/db/migrations/20220317233259_audit-logs-enhancements.ts b/server/src/database/knex/migrations/20220317233259_audit-logs-enhancements.ts similarity index 100% rename from server/src/db/migrations/20220317233259_audit-logs-enhancements.ts rename to server/src/database/knex/migrations/20220317233259_audit-logs-enhancements.ts diff --git a/server/src/db/migrations/20220320213244_room-swipes.ts b/server/src/database/knex/migrations/20220320213244_room-swipes.ts similarity index 100% rename from server/src/db/migrations/20220320213244_room-swipes.ts rename to server/src/database/knex/migrations/20220320213244_room-swipes.ts diff --git a/server/src/db/migrations/20220322142744_users-archive.ts b/server/src/database/knex/migrations/20220322142744_users-archive.ts similarity index 100% rename from server/src/db/migrations/20220322142744_users-archive.ts rename to server/src/database/knex/migrations/20220322142744_users-archive.ts diff --git a/server/src/db/migrations/20220322194711_equipment-archive.ts b/server/src/database/knex/migrations/20220322194711_equipment-archive.ts similarity index 100% rename from server/src/db/migrations/20220322194711_equipment-archive.ts rename to server/src/database/knex/migrations/20220322194711_equipment-archive.ts diff --git a/server/src/db/migrations/20220324210801_module_submissions_table.ts b/server/src/database/knex/migrations/20220324210801_module_submissions_table.ts similarity index 100% rename from server/src/db/migrations/20220324210801_module_submissions_table.ts rename to server/src/database/knex/migrations/20220324210801_module_submissions_table.ts diff --git a/server/src/db/migrations/20220325155145_remove-monitoring.ts b/server/src/database/knex/migrations/20220325155145_remove-monitoring.ts similarity index 100% rename from server/src/db/migrations/20220325155145_remove-monitoring.ts rename to server/src/database/knex/migrations/20220325155145_remove-monitoring.ts diff --git a/server/src/db/migrations/20220327205516_training-modules-archive.ts b/server/src/database/knex/migrations/20220327205516_training-modules-archive.ts similarity index 100% rename from server/src/db/migrations/20220327205516_training-modules-archive.ts rename to server/src/database/knex/migrations/20220327205516_training-modules-archive.ts diff --git a/server/src/db/migrations/20220329201220_rooms-archive.ts b/server/src/database/knex/migrations/20220329201220_rooms-archive.ts similarity index 100% rename from server/src/db/migrations/20220329201220_rooms-archive.ts rename to server/src/database/knex/migrations/20220329201220_rooms-archive.ts diff --git a/server/src/db/migrations/20220329201247_store-front-archive.ts b/server/src/database/knex/migrations/20220329201247_store-front-archive.ts similarity index 100% rename from server/src/db/migrations/20220329201247_store-front-archive.ts rename to server/src/database/knex/migrations/20220329201247_store-front-archive.ts diff --git a/server/src/db/migrations/20220410211419_module_submissions_exp_table.ts b/server/src/database/knex/migrations/20220410211419_module_submissions_exp_table.ts similarity index 100% rename from server/src/db/migrations/20220410211419_module_submissions_exp_table.ts rename to server/src/database/knex/migrations/20220410211419_module_submissions_exp_table.ts diff --git a/server/src/db/migrations/20221026151025_training-modules-reservation-prompts.ts b/server/src/database/knex/migrations/20221026151025_training-modules-reservation-prompts.ts similarity index 100% rename from server/src/db/migrations/20221026151025_training-modules-reservation-prompts.ts rename to server/src/database/knex/migrations/20221026151025_training-modules-reservation-prompts.ts diff --git a/server/src/db/migrations/20230303194447_user_balances.ts b/server/src/database/knex/migrations/20230303194447_user_balances.ts similarity index 100% rename from server/src/db/migrations/20230303194447_user_balances.ts rename to server/src/database/knex/migrations/20230303194447_user_balances.ts diff --git a/server/src/db/migrations/20230305005055_archival_partitions.ts b/server/src/database/knex/migrations/20230305005055_archival_partitions.ts similarity index 100% rename from server/src/db/migrations/20230305005055_archival_partitions.ts rename to server/src/database/knex/migrations/20230305005055_archival_partitions.ts diff --git a/server/src/db/migrations/20230322212307_AnnouncementTable.ts b/server/src/database/knex/migrations/20230322212307_AnnouncementTable.ts similarity index 100% rename from server/src/db/migrations/20230322212307_AnnouncementTable.ts rename to server/src/database/knex/migrations/20230322212307_AnnouncementTable.ts diff --git a/server/src/db/migrations/20230329042437_default_archived.ts b/server/src/database/knex/migrations/20230329042437_default_archived.ts similarity index 100% rename from server/src/db/migrations/20230329042437_default_archived.ts rename to server/src/database/knex/migrations/20230329042437_default_archived.ts diff --git a/server/src/db/migrations/20230717132144_reader-table.ts b/server/src/database/knex/migrations/20230717132144_reader-table.ts similarity index 100% rename from server/src/db/migrations/20230717132144_reader-table.ts rename to server/src/database/knex/migrations/20230717132144_reader-table.ts diff --git a/server/src/db/migrations/20240723111717_access_checks.ts b/server/src/database/knex/migrations/20240723111717_access_checks.ts similarity index 100% rename from server/src/db/migrations/20240723111717_access_checks.ts rename to server/src/database/knex/migrations/20240723111717_access_checks.ts diff --git a/server/src/db/migrations/20240731140400_equipment_images.ts b/server/src/database/knex/migrations/20240731140400_equipment_images.ts similarity index 100% rename from server/src/db/migrations/20240731140400_equipment_images.ts rename to server/src/database/knex/migrations/20240731140400_equipment_images.ts diff --git a/server/src/db/migrations/20240812202510_module_submission_summary.ts b/server/src/database/knex/migrations/20240812202510_module_submission_summary.ts similarity index 100% rename from server/src/db/migrations/20240812202510_module_submission_summary.ts rename to server/src/database/knex/migrations/20240812202510_module_submission_summary.ts diff --git a/server/src/db/migrations/20240815170839_zone_hours_table.ts b/server/src/database/knex/migrations/20240815170839_zone_hours_table.ts similarity index 100% rename from server/src/db/migrations/20240815170839_zone_hours_table.ts rename to server/src/database/knex/migrations/20240815170839_zone_hours_table.ts diff --git a/server/src/db/migrations/20240816172414_equipment_sessions.ts b/server/src/database/knex/migrations/20240816172414_equipment_sessions.ts similarity index 100% rename from server/src/db/migrations/20240816172414_equipment_sessions.ts rename to server/src/database/knex/migrations/20240816172414_equipment_sessions.ts diff --git a/server/src/db/migrations/20240821200217_equipment_sessions_fk.ts b/server/src/database/knex/migrations/20240821200217_equipment_sessions_fk.ts similarity index 100% rename from server/src/db/migrations/20240821200217_equipment_sessions_fk.ts rename to server/src/database/knex/migrations/20240821200217_equipment_sessions_fk.ts diff --git a/server/src/db/migrations/20240821210303_equipment_sessions_fk2.ts b/server/src/database/knex/migrations/20240821210303_equipment_sessions_fk2.ts similarity index 100% rename from server/src/db/migrations/20240821210303_equipment_sessions_fk2.ts rename to server/src/database/knex/migrations/20240821210303_equipment_sessions_fk2.ts diff --git a/server/src/db/migrations/20240826134636_zone_hours_displayname.ts b/server/src/database/knex/migrations/20240826134636_zone_hours_displayname.ts similarity index 100% rename from server/src/db/migrations/20240826134636_zone_hours_displayname.ts rename to server/src/database/knex/migrations/20240826134636_zone_hours_displayname.ts diff --git a/server/src/db/migrations/20240826144013_zone_hours_seperate_zone_table.ts b/server/src/database/knex/migrations/20240826144013_zone_hours_seperate_zone_table.ts similarity index 100% rename from server/src/db/migrations/20240826144013_zone_hours_seperate_zone_table.ts rename to server/src/database/knex/migrations/20240826144013_zone_hours_seperate_zone_table.ts diff --git a/server/src/db/migrations/20240826145209_zone_table.ts b/server/src/database/knex/migrations/20240826145209_zone_table.ts similarity index 100% rename from server/src/db/migrations/20240826145209_zone_table.ts rename to server/src/database/knex/migrations/20240826145209_zone_table.ts diff --git a/server/src/db/migrations/20240826145348_rooms_for_zones_table.ts b/server/src/database/knex/migrations/20240826145348_rooms_for_zones_table.ts similarity index 100% rename from server/src/db/migrations/20240826145348_rooms_for_zones_table.ts rename to server/src/database/knex/migrations/20240826145348_rooms_for_zones_table.ts diff --git a/server/src/db/migrations/20240826145657_zone_hours_fk.ts b/server/src/database/knex/migrations/20240826145657_zone_hours_fk.ts similarity index 100% rename from server/src/db/migrations/20240826145657_zone_hours_fk.ts rename to server/src/database/knex/migrations/20240826145657_zone_hours_fk.ts diff --git a/server/src/db/migrations/20240826162654_remove_rooms_for_zones.ts b/server/src/database/knex/migrations/20240826162654_remove_rooms_for_zones.ts similarity index 100% rename from server/src/db/migrations/20240826162654_remove_rooms_for_zones.ts rename to server/src/database/knex/migrations/20240826162654_remove_rooms_for_zones.ts diff --git a/server/src/db/migrations/20240826162709_rooms_zone_col.ts b/server/src/database/knex/migrations/20240826162709_rooms_zone_col.ts similarity index 100% rename from server/src/db/migrations/20240826162709_rooms_zone_col.ts rename to server/src/database/knex/migrations/20240826162709_rooms_zone_col.ts diff --git a/server/src/db/migrations/20240827152638_zone_hours_zones_compatibility.ts b/server/src/database/knex/migrations/20240827152638_zone_hours_zones_compatibility.ts similarity index 100% rename from server/src/db/migrations/20240827152638_zone_hours_zones_compatibility.ts rename to server/src/database/knex/migrations/20240827152638_zone_hours_zones_compatibility.ts diff --git a/server/src/db/migrations/20240829152453_data_points.ts b/server/src/database/knex/migrations/20240829152453_data_points.ts similarity index 100% rename from server/src/db/migrations/20240829152453_data_points.ts rename to server/src/database/knex/migrations/20240829152453_data_points.ts diff --git a/server/src/db/migrations/20240913173936_equipment_sop_col.ts b/server/src/database/knex/migrations/20240913173936_equipment_sop_col.ts similarity index 100% rename from server/src/db/migrations/20240913173936_equipment_sop_col.ts rename to server/src/database/knex/migrations/20240913173936_equipment_sop_col.ts diff --git a/server/src/db/migrations/20240925142510_equipment_notes_col.ts b/server/src/database/knex/migrations/20240925142510_equipment_notes_col.ts similarity index 100% rename from server/src/db/migrations/20240925142510_equipment_notes_col.ts rename to server/src/database/knex/migrations/20240925142510_equipment_notes_col.ts diff --git a/server/src/db/migrations/20240925202857_inventory_item_permission_cols.ts b/server/src/database/knex/migrations/20240925202857_inventory_item_permission_cols.ts similarity index 100% rename from server/src/db/migrations/20240925202857_inventory_item_permission_cols.ts rename to server/src/database/knex/migrations/20240925202857_inventory_item_permission_cols.ts diff --git a/server/src/db/migrations/20240926161533_users_refreshToken.ts b/server/src/database/knex/migrations/20240926161533_users_refreshToken.ts similarity index 100% rename from server/src/db/migrations/20240926161533_users_refreshToken.ts rename to server/src/database/knex/migrations/20240926161533_users_refreshToken.ts diff --git a/server/src/db/migrations/20240930155347_inventory_ledger_table.ts b/server/src/database/knex/migrations/20240930155347_inventory_ledger_table.ts similarity index 100% rename from server/src/db/migrations/20240930155347_inventory_ledger_table.ts rename to server/src/database/knex/migrations/20240930155347_inventory_ledger_table.ts diff --git a/server/src/db/migrations/20241003133524_inventory_item_notes.ts b/server/src/database/knex/migrations/20241003133524_inventory_item_notes.ts similarity index 100% rename from server/src/db/migrations/20241003133524_inventory_item_notes.ts rename to server/src/database/knex/migrations/20241003133524_inventory_item_notes.ts diff --git a/server/src/db/migrations/20241004133234_user_notes.ts b/server/src/database/knex/migrations/20241004133234_user_notes.ts similarity index 100% rename from server/src/db/migrations/20241004133234_user_notes.ts rename to server/src/database/knex/migrations/20241004133234_user_notes.ts diff --git a/server/src/db/migrations/20241008185202_text_fields_table.ts b/server/src/database/knex/migrations/20241008185202_text_fields_table.ts similarity index 100% rename from server/src/db/migrations/20241008185202_text_fields_table.ts rename to server/src/database/knex/migrations/20241008185202_text_fields_table.ts diff --git a/server/src/db/migrations/20241010140920_audit_logs_category_col.ts b/server/src/database/knex/migrations/20241010140920_audit_logs_category_col.ts similarity index 100% rename from server/src/db/migrations/20241010140920_audit_logs_category_col.ts rename to server/src/database/knex/migrations/20241010140920_audit_logs_category_col.ts diff --git a/server/src/db/migrations/20241016200511_maintenance_log_table.ts b/server/src/database/knex/migrations/20241016200511_maintenance_log_table.ts similarity index 100% rename from server/src/db/migrations/20241016200511_maintenance_log_table.ts rename to server/src/database/knex/migrations/20241016200511_maintenance_log_table.ts diff --git a/server/src/db/migrations/20241017165101_reader_version_columns.ts b/server/src/database/knex/migrations/20241017165101_reader_version_columns.ts similarity index 100% rename from server/src/db/migrations/20241017165101_reader_version_columns.ts rename to server/src/database/knex/migrations/20241017165101_reader_version_columns.ts diff --git a/server/src/db/migrations/20241017193811_maintenance_tags.ts b/server/src/database/knex/migrations/20241017193811_maintenance_tags.ts similarity index 100% rename from server/src/db/migrations/20241017193811_maintenance_tags.ts rename to server/src/database/knex/migrations/20241017193811_maintenance_tags.ts diff --git a/server/src/db/migrations/20241017193911_resolution_logs_table.ts b/server/src/database/knex/migrations/20241017193911_resolution_logs_table.ts similarity index 100% rename from server/src/db/migrations/20241017193911_resolution_logs_table.ts rename to server/src/database/knex/migrations/20241017193911_resolution_logs_table.ts diff --git a/server/src/db/migrations/20241017195826_maintenance_logs_type_and_tags_cols.ts b/server/src/database/knex/migrations/20241017195826_maintenance_logs_type_and_tags_cols.ts similarity index 100% rename from server/src/db/migrations/20241017195826_maintenance_logs_type_and_tags_cols.ts rename to server/src/database/knex/migrations/20241017195826_maintenance_logs_type_and_tags_cols.ts diff --git a/server/src/db/migrations/20241022170731_equipment_instance_table.ts b/server/src/database/knex/migrations/20241022170731_equipment_instance_table.ts similarity index 100% rename from server/src/db/migrations/20241022170731_equipment_instance_table.ts rename to server/src/database/knex/migrations/20241022170731_equipment_instance_table.ts diff --git a/server/src/db/migrations/20241022170736_maintenance_log_instance_col.ts b/server/src/database/knex/migrations/20241022170736_maintenance_log_instance_col.ts similarity index 100% rename from server/src/db/migrations/20241022170736_maintenance_log_instance_col.ts rename to server/src/database/knex/migrations/20241022170736_maintenance_log_instance_col.ts diff --git a/server/src/db/migrations/20241022170738_resolution_log_instance_col.ts b/server/src/database/knex/migrations/20241022170738_resolution_log_instance_col.ts similarity index 100% rename from server/src/db/migrations/20241022170738_resolution_log_instance_col.ts rename to server/src/database/knex/migrations/20241022170738_resolution_log_instance_col.ts diff --git a/server/src/db/migrations/20241022170905_maintenance_tags_equipment_id_col.ts b/server/src/database/knex/migrations/20241022170905_maintenance_tags_equipment_id_col.ts similarity index 100% rename from server/src/db/migrations/20241022170905_maintenance_tags_equipment_id_col.ts rename to server/src/database/knex/migrations/20241022170905_maintenance_tags_equipment_id_col.ts diff --git a/server/src/db/migrations/20241028145830_resolution_log_issue_col.ts b/server/src/database/knex/migrations/20241028145830_resolution_log_issue_col.ts similarity index 100% rename from server/src/db/migrations/20241028145830_resolution_log_issue_col.ts rename to server/src/database/knex/migrations/20241028145830_resolution_log_issue_col.ts diff --git a/server/src/db/migrations/20241031175300_borrowable_item_types.ts b/server/src/database/knex/migrations/20241031175300_borrowable_item_types.ts similarity index 100% rename from server/src/db/migrations/20241031175300_borrowable_item_types.ts rename to server/src/database/knex/migrations/20241031175300_borrowable_item_types.ts diff --git a/server/src/db/migrations/20241031175443_borrowable_item_instances.ts b/server/src/database/knex/migrations/20241031175443_borrowable_item_instances.ts similarity index 100% rename from server/src/db/migrations/20241031175443_borrowable_item_instances.ts rename to server/src/database/knex/migrations/20241031175443_borrowable_item_instances.ts diff --git a/server/src/db/migrations/20241101132108_equipment_reservationonly_col.ts b/server/src/database/knex/migrations/20241101132108_equipment_reservationonly_col.ts similarity index 100% rename from server/src/db/migrations/20241101132108_equipment_reservationonly_col.ts rename to server/src/database/knex/migrations/20241101132108_equipment_reservationonly_col.ts diff --git a/server/src/db/migrations/20241101203417_tool_item_instance_borrower_col.ts b/server/src/database/knex/migrations/20241101203417_tool_item_instance_borrower_col.ts similarity index 100% rename from server/src/db/migrations/20241101203417_tool_item_instance_borrower_col.ts rename to server/src/database/knex/migrations/20241101203417_tool_item_instance_borrower_col.ts diff --git a/server/src/db/migrations/20241115202253_inventory_tags.ts b/server/src/database/knex/migrations/20241115202253_inventory_tags.ts similarity index 100% rename from server/src/db/migrations/20241115202253_inventory_tags.ts rename to server/src/database/knex/migrations/20241115202253_inventory_tags.ts diff --git a/server/src/db/migrations/20241115202420_inventory_item_tag_cols.ts b/server/src/database/knex/migrations/20241115202420_inventory_item_tag_cols.ts similarity index 100% rename from server/src/db/migrations/20241115202420_inventory_item_tag_cols.ts rename to server/src/database/knex/migrations/20241115202420_inventory_item_tag_cols.ts diff --git a/server/src/db/migrations/20241125154436_training_holds_table.ts b/server/src/database/knex/migrations/20241125154436_training_holds_table.ts similarity index 100% rename from server/src/db/migrations/20241125154436_training_holds_table.ts rename to server/src/database/knex/migrations/20241125154436_training_holds_table.ts diff --git a/server/src/db/migrations/20250519131956_time_of_session_start.ts b/server/src/database/knex/migrations/20250519131956_time_of_session_start.ts similarity index 100% rename from server/src/db/migrations/20250519131956_time_of_session_start.ts rename to server/src/database/knex/migrations/20250519131956_time_of_session_start.ts diff --git a/server/src/db/migrations/20250520141120_add_readers_shlug_id.ts b/server/src/database/knex/migrations/20250520141120_add_readers_shlug_id.ts similarity index 100% rename from server/src/db/migrations/20250520141120_add_readers_shlug_id.ts rename to server/src/database/knex/migrations/20250520141120_add_readers_shlug_id.ts diff --git a/server/src/db/migrations/20250521174308_websocket_reader_support.ts b/server/src/database/knex/migrations/20250521174308_websocket_reader_support.ts similarity index 100% rename from server/src/db/migrations/20250521174308_websocket_reader_support.ts rename to server/src/database/knex/migrations/20250521174308_websocket_reader_support.ts diff --git a/server/src/db/migrations/20250522161052_makerspace-image.ts b/server/src/database/knex/migrations/20250522161052_makerspace-image.ts similarity index 100% rename from server/src/db/migrations/20250522161052_makerspace-image.ts rename to server/src/database/knex/migrations/20250522161052_makerspace-image.ts diff --git a/server/src/db/migrations/20250523143236_websocket_reader_pairtime.ts b/server/src/database/knex/migrations/20250523143236_websocket_reader_pairtime.ts similarity index 100% rename from server/src/db/migrations/20250523143236_websocket_reader_pairtime.ts rename to server/src/database/knex/migrations/20250523143236_websocket_reader_pairtime.ts diff --git a/server/src/db/migrations/20250528125413_drop_university_id.ts b/server/src/database/knex/migrations/20250528125413_drop_university_id.ts similarity index 100% rename from server/src/db/migrations/20250528125413_drop_university_id.ts rename to server/src/database/knex/migrations/20250528125413_drop_university_id.ts diff --git a/server/src/db/migrations/20250529172722_permission-overhaul.ts b/server/src/database/knex/migrations/20250529172722_permission-overhaul.ts similarity index 100% rename from server/src/db/migrations/20250529172722_permission-overhaul.ts rename to server/src/database/knex/migrations/20250529172722_permission-overhaul.ts diff --git a/server/src/db/migrations/20250618180752_reader_structured_log.ts b/server/src/database/knex/migrations/20250618180752_reader_structured_log.ts similarity index 100% rename from server/src/db/migrations/20250618180752_reader_structured_log.ts rename to server/src/database/knex/migrations/20250618180752_reader_structured_log.ts diff --git a/server/src/db/migrations/20250623141909_inventory_carts.ts b/server/src/database/knex/migrations/20250623141909_inventory_carts.ts similarity index 100% rename from server/src/db/migrations/20250623141909_inventory_carts.ts rename to server/src/database/knex/migrations/20250623141909_inventory_carts.ts diff --git a/server/src/db/migrations/20250623142458_equipment-trainer.ts b/server/src/database/knex/migrations/20250623142458_equipment-trainer.ts similarity index 100% rename from server/src/db/migrations/20250623142458_equipment-trainer.ts rename to server/src/database/knex/migrations/20250623142458_equipment-trainer.ts diff --git a/server/src/db/migrations/20250623144747_inventory_items_for_carts.ts b/server/src/database/knex/migrations/20250623144747_inventory_items_for_carts.ts similarity index 100% rename from server/src/db/migrations/20250623144747_inventory_items_for_carts.ts rename to server/src/database/knex/migrations/20250623144747_inventory_items_for_carts.ts diff --git a/server/src/db/migrations/20250623145320_inventory_items_makerspace_col.ts b/server/src/database/knex/migrations/20250623145320_inventory_items_makerspace_col.ts similarity index 100% rename from server/src/db/migrations/20250623145320_inventory_items_makerspace_col.ts rename to server/src/database/knex/migrations/20250623145320_inventory_items_makerspace_col.ts diff --git a/server/src/db/migrations/20250714130116_welcome_readers.ts b/server/src/database/knex/migrations/20250714130116_welcome_readers.ts similarity index 100% rename from server/src/db/migrations/20250714130116_welcome_readers.ts rename to server/src/database/knex/migrations/20250714130116_welcome_readers.ts diff --git a/server/src/db/migrations/20250714173520_room-trainings.ts b/server/src/database/knex/migrations/20250714173520_room-trainings.ts similarity index 100% rename from server/src/db/migrations/20250714173520_room-trainings.ts rename to server/src/database/knex/migrations/20250714173520_room-trainings.ts diff --git a/server/src/db/migrations/20250716173102_training-overhaul.ts b/server/src/database/knex/migrations/20250716173102_training-overhaul.ts similarity index 100% rename from server/src/db/migrations/20250716173102_training-overhaul.ts rename to server/src/database/knex/migrations/20250716173102_training-overhaul.ts diff --git a/server/src/db/migrations/20250722182257_firmware_tracks.ts b/server/src/database/knex/migrations/20250722182257_firmware_tracks.ts similarity index 100% rename from server/src/db/migrations/20250722182257_firmware_tracks.ts rename to server/src/database/knex/migrations/20250722182257_firmware_tracks.ts diff --git a/server/src/db/migrations/20250724132630_hours-overhaul.ts b/server/src/database/knex/migrations/20250724132630_hours-overhaul.ts similarity index 100% rename from server/src/db/migrations/20250724132630_hours-overhaul.ts rename to server/src/database/knex/migrations/20250724132630_hours-overhaul.ts diff --git a/server/src/db/migrations/20250729150554_currency.ts b/server/src/database/knex/migrations/20250729150554_currency.ts similarity index 100% rename from server/src/db/migrations/20250729150554_currency.ts rename to server/src/database/knex/migrations/20250729150554_currency.ts diff --git a/server/src/db/migrations/20250805162118_archive-alumni.ts b/server/src/database/knex/migrations/20250805162118_archive-alumni.ts similarity index 100% rename from server/src/db/migrations/20250805162118_archive-alumni.ts rename to server/src/database/knex/migrations/20250805162118_archive-alumni.ts diff --git a/server/src/db/migrations/20250808134358_currency-ledger-tweaks.ts b/server/src/database/knex/migrations/20250808134358_currency-ledger-tweaks.ts similarity index 100% rename from server/src/db/migrations/20250808134358_currency-ledger-tweaks.ts rename to server/src/database/knex/migrations/20250808134358_currency-ledger-tweaks.ts diff --git a/server/src/db/migrations/20250812144441_cleanup_readers_table.ts b/server/src/database/knex/migrations/20250812144441_cleanup_readers_table.ts similarity index 100% rename from server/src/db/migrations/20250812144441_cleanup_readers_table.ts rename to server/src/database/knex/migrations/20250812144441_cleanup_readers_table.ts diff --git a/server/src/db/migrations/20250812160029_archive-zones.ts b/server/src/database/knex/migrations/20250812160029_archive-zones.ts similarity index 100% rename from server/src/db/migrations/20250812160029_archive-zones.ts rename to server/src/database/knex/migrations/20250812160029_archive-zones.ts diff --git a/server/src/db/migrations/20250814152708_session-storage.ts b/server/src/database/knex/migrations/20250814152708_session-storage.ts similarity index 100% rename from server/src/db/migrations/20250814152708_session-storage.ts rename to server/src/database/knex/migrations/20250814152708_session-storage.ts diff --git a/server/src/db/migrations/20250815135700_drop_old_hours_table.ts b/server/src/database/knex/migrations/20250815135700_drop_old_hours_table.ts similarity index 100% rename from server/src/db/migrations/20250815135700_drop_old_hours_table.ts rename to server/src/database/knex/migrations/20250815135700_drop_old_hours_table.ts diff --git a/server/src/db/migrations/20250827215729_ledger-details.ts b/server/src/database/knex/migrations/20250827215729_ledger-details.ts similarity index 100% rename from server/src/db/migrations/20250827215729_ledger-details.ts rename to server/src/database/knex/migrations/20250827215729_ledger-details.ts diff --git a/server/src/db/migrations/20250829162657_transaction-processing.ts b/server/src/database/knex/migrations/20250829162657_transaction-processing.ts similarity index 95% rename from server/src/db/migrations/20250829162657_transaction-processing.ts rename to server/src/database/knex/migrations/20250829162657_transaction-processing.ts index 554e55878..62ba223f9 100644 --- a/server/src/db/migrations/20250829162657_transaction-processing.ts +++ b/server/src/database/knex/migrations/20250829162657_transaction-processing.ts @@ -1,5 +1,5 @@ import type { Knex } from "knex"; -import { CurrencySource, CurrencyType } from "../../integrations/currency/types.js"; +import { CurrencySource, CurrencyType } from "../../../integrations/currency/types.js"; export async function up(knex: Knex): Promise { diff --git a/server/src/db/migrations/20250905155623_no-more-privileges.ts b/server/src/database/knex/migrations/20250905155623_no-more-privileges.ts similarity index 100% rename from server/src/db/migrations/20250905155623_no-more-privileges.ts rename to server/src/database/knex/migrations/20250905155623_no-more-privileges.ts diff --git a/server/src/db/migrations/20250908154740_zone-to-makerspace.ts b/server/src/database/knex/migrations/20250908154740_zone-to-makerspace.ts similarity index 100% rename from server/src/db/migrations/20250908154740_zone-to-makerspace.ts rename to server/src/database/knex/migrations/20250908154740_zone-to-makerspace.ts diff --git a/server/src/db/migrations/20250909015107_hide-in-person.ts b/server/src/database/knex/migrations/20250909015107_hide-in-person.ts similarity index 100% rename from server/src/db/migrations/20250909015107_hide-in-person.ts rename to server/src/database/knex/migrations/20250909015107_hide-in-person.ts diff --git a/server/src/db/migrations/20250922193755_desc-for-makerspace.ts b/server/src/database/knex/migrations/20250922193755_desc-for-makerspace.ts similarity index 100% rename from server/src/db/migrations/20250922193755_desc-for-makerspace.ts rename to server/src/database/knex/migrations/20250922193755_desc-for-makerspace.ts diff --git a/server/src/db/migrations/20251016055224_training-submission-delete-cascade.ts b/server/src/database/knex/migrations/20251016055224_training-submission-delete-cascade.ts similarity index 100% rename from server/src/db/migrations/20251016055224_training-submission-delete-cascade.ts rename to server/src/database/knex/migrations/20251016055224_training-submission-delete-cascade.ts diff --git a/server/src/db/migrations/20251016175110_announcement-link-columns.ts b/server/src/database/knex/migrations/20251016175110_announcement-link-columns.ts similarity index 100% rename from server/src/db/migrations/20251016175110_announcement-link-columns.ts rename to server/src/database/knex/migrations/20251016175110_announcement-link-columns.ts diff --git a/server/src/db/migrations/20251024174942_custom-url-table.ts b/server/src/database/knex/migrations/20251024174942_custom-url-table.ts similarity index 100% rename from server/src/db/migrations/20251024174942_custom-url-table.ts rename to server/src/database/knex/migrations/20251024174942_custom-url-table.ts diff --git a/server/src/db/migrations/20251125223118_organization-notes.ts b/server/src/database/knex/migrations/20251125223118_organization-notes.ts similarity index 100% rename from server/src/db/migrations/20251125223118_organization-notes.ts rename to server/src/database/knex/migrations/20251125223118_organization-notes.ts diff --git a/server/src/db/migrations/20260113181404_reservations.ts b/server/src/database/knex/migrations/20260113181404_reservations.ts similarity index 100% rename from server/src/db/migrations/20260113181404_reservations.ts rename to server/src/database/knex/migrations/20260113181404_reservations.ts diff --git a/server/src/db/migrations/20260116142103_maintenance-tickets.ts b/server/src/database/knex/migrations/20260116142103_maintenance-tickets.ts similarity index 100% rename from server/src/db/migrations/20260116142103_maintenance-tickets.ts rename to server/src/database/knex/migrations/20260116142103_maintenance-tickets.ts diff --git a/server/src/db/migrations/20260126144801_temporary-cards.ts b/server/src/database/knex/migrations/20260126144801_temporary-cards.ts similarity index 100% rename from server/src/db/migrations/20260126144801_temporary-cards.ts rename to server/src/database/knex/migrations/20260126144801_temporary-cards.ts diff --git a/server/src/db/migrations/20260205181606_infinite-tags.ts b/server/src/database/knex/migrations/20260205181606_infinite-tags.ts similarity index 100% rename from server/src/db/migrations/20260205181606_infinite-tags.ts rename to server/src/database/knex/migrations/20260205181606_infinite-tags.ts diff --git a/server/src/db/migrations/20260209155821_devices-overhaul.ts b/server/src/database/knex/migrations/20260209155821_devices-overhaul.ts similarity index 98% rename from server/src/db/migrations/20260209155821_devices-overhaul.ts rename to server/src/database/knex/migrations/20260209155821_devices-overhaul.ts index 3ef95250a..c48b75e36 100644 --- a/server/src/db/migrations/20260209155821_devices-overhaul.ts +++ b/server/src/database/knex/migrations/20260209155821_devices-overhaul.ts @@ -1,7 +1,7 @@ import type { Knex } from "knex"; import { AccessControllerState, CoreInputMode, ReaderRow } from "../tables.js"; import * as ReaderRepo from "../../repositories/Readers/ReaderRepository.js" -import { DispenserError } from "../../api/devices/cards/cardApi.js"; +import { DispenserError } from "../../../api/devices/cards/cardApi.js"; export function oldStateToStateEnum(oldState: string) { switch (oldState) { diff --git a/server/src/db/migrations/20260306202955_device-api.ts b/server/src/database/knex/migrations/20260306202955_device-api.ts similarity index 100% rename from server/src/db/migrations/20260306202955_device-api.ts rename to server/src/database/knex/migrations/20260306202955_device-api.ts diff --git a/server/src/db/migrations/20260319182335_wsacs2-fixes.ts b/server/src/database/knex/migrations/20260319182335_wsacs2-fixes.ts similarity index 100% rename from server/src/db/migrations/20260319182335_wsacs2-fixes.ts rename to server/src/database/knex/migrations/20260319182335_wsacs2-fixes.ts diff --git a/server/src/db/migrations/20260324175032_equipment-sublines.ts b/server/src/database/knex/migrations/20260324175032_equipment-sublines.ts similarity index 100% rename from server/src/db/migrations/20260324175032_equipment-sublines.ts rename to server/src/database/knex/migrations/20260324175032_equipment-sublines.ts diff --git a/server/src/db/migrations/20260408131946_equipment-controller-pairing.ts b/server/src/database/knex/migrations/20260408131946_equipment-controller-pairing.ts similarity index 100% rename from server/src/db/migrations/20260408131946_equipment-controller-pairing.ts rename to server/src/database/knex/migrations/20260408131946_equipment-controller-pairing.ts diff --git a/server/src/db/migrations/20260414183228_server-themes.ts b/server/src/database/knex/migrations/20260414183228_server-themes.ts similarity index 100% rename from server/src/db/migrations/20260414183228_server-themes.ts rename to server/src/database/knex/migrations/20260414183228_server-themes.ts diff --git a/server/src/db/seeds/seed_test_data.ts b/server/src/database/knex/seeds/seed_test_data.ts similarity index 100% rename from server/src/db/seeds/seed_test_data.ts rename to server/src/database/knex/seeds/seed_test_data.ts diff --git a/server/src/db/tables.ts b/server/src/database/knex/tables.ts similarity index 99% rename from server/src/db/tables.ts rename to server/src/database/knex/tables.ts index afae96a70..d2e5692ee 100644 --- a/server/src/db/tables.ts +++ b/server/src/database/knex/tables.ts @@ -4,8 +4,8 @@ * This contains the definitions for the objects every knex select operation will map to. */ -import { DispenserError } from "../api/devices/cards/cardApi.js"; -import { CurrencySource, CurrencyType } from "../integrations/currency/types.js"; +import { DispenserError } from "../../api/devices/cards/cardApi.js"; +import { CurrencySource, CurrencyType } from "../../integrations/currency/types.js"; import { ACSDeployment } from "../models/ACS/deployment.js"; import { CoreFlags } from "../models/api/ACSFormats.js"; diff --git a/server/src/models/ACS/component.ts b/server/src/database/models/ACS/component.ts similarity index 100% rename from server/src/models/ACS/component.ts rename to server/src/database/models/ACS/component.ts diff --git a/server/src/models/ACS/deployment.ts b/server/src/database/models/ACS/deployment.ts similarity index 100% rename from server/src/models/ACS/deployment.ts rename to server/src/database/models/ACS/deployment.ts diff --git a/server/src/models/api/ACSController.ts b/server/src/database/models/api/ACSController.ts similarity index 100% rename from server/src/models/api/ACSController.ts rename to server/src/database/models/api/ACSController.ts diff --git a/server/src/models/api/ACSFormats.ts b/server/src/database/models/api/ACSFormats.ts similarity index 97% rename from server/src/models/api/ACSFormats.ts rename to server/src/database/models/api/ACSFormats.ts index ed9609cf1..37858d9d1 100644 --- a/server/src/models/api/ACSFormats.ts +++ b/server/src/database/models/api/ACSFormats.ts @@ -1,4 +1,4 @@ -import { AccessControllerState, CoreInputMode } from "../../db/tables.js" +import { AccessControllerState, CoreInputMode } from "../../knex/tables.js" import { ACSDeployment } from "../ACS/deployment.js"; export interface CoreStatusReport { diff --git a/server/src/models/api/ACSOrchestrator.ts b/server/src/database/models/api/ACSOrchestrator.ts similarity index 99% rename from server/src/models/api/ACSOrchestrator.ts rename to server/src/database/models/api/ACSOrchestrator.ts index 3b185075d..61c57b195 100644 --- a/server/src/models/api/ACSOrchestrator.ts +++ b/server/src/database/models/api/ACSOrchestrator.ts @@ -7,7 +7,7 @@ import * as DeviceLogRepo from "../../repositories/Logs/DeviceLogsRepository.js" import * as UserRepo from "../../repositories/Users/UserRepository.js"; import * as MakerspaceRepo from "../../repositories/Makerspaces/MakerspaceRespository.js"; import * as DeviceRepo from "../../repositories/Devices/DeviceRepository.js"; -import { AccessControllerState, DeviceLogSeverity } from "../../db/tables.js"; +import { AccessControllerState, DeviceLogSeverity } from "../../knex/tables.js"; import { AccessAttemptReason } from "../devices/accessController.js"; import { Makerspace } from "../makerspaces/makerspace.js"; diff --git a/server/src/models/api/MQTTACSController.ts b/server/src/database/models/api/MQTTACSController.ts similarity index 100% rename from server/src/models/api/MQTTACSController.ts rename to server/src/database/models/api/MQTTACSController.ts diff --git a/server/src/models/api/WSACS/WSACSController.ts b/server/src/database/models/api/WSACS/WSACSController.ts similarity index 99% rename from server/src/models/api/WSACS/WSACSController.ts rename to server/src/database/models/api/WSACS/WSACSController.ts index 89994a08a..bf4fda4e9 100644 --- a/server/src/models/api/WSACS/WSACSController.ts +++ b/server/src/database/models/api/WSACS/WSACSController.ts @@ -4,7 +4,7 @@ import { CoreInfoRequests, WSACSCoreUnprompted, WSACSServerError, WSACSServerUnp import * as CoreRepo from "../../../repositories/Devices/CoreRepository.js"; import * as UserRepo from "../../../repositories/Users/UserRepository.js"; import * as AuditLogRepo from "../../../repositories/AuditLogs/AuditLogRepository.js"; -import { AccessControllerState, DeviceLogSeverity } from "../../../db/tables.js"; +import { AccessControllerState, DeviceLogSeverity } from "../../../knex/tables.js"; import { AccessAttemptReason } from "../../devices/accessController.js"; import * as DeviceLogRepo from "../../../repositories/Logs/DeviceLogsRepository.js"; import * as DeviceRepo from "../../../repositories/Devices/DeviceRepository.js"; diff --git a/server/src/models/api/WSACS/WSACSFormats.ts b/server/src/database/models/api/WSACS/WSACSFormats.ts similarity index 97% rename from server/src/models/api/WSACS/WSACSFormats.ts rename to server/src/database/models/api/WSACS/WSACSFormats.ts index fbfdfecdc..1bff9b6a5 100644 --- a/server/src/models/api/WSACS/WSACSFormats.ts +++ b/server/src/database/models/api/WSACS/WSACSFormats.ts @@ -1,4 +1,4 @@ -import { AccessControllerState, CoreInputMode } from "../../../db/tables.js"; +import { AccessControllerState, CoreInputMode } from "../../../knex/tables.js"; import { AuditLog } from "../../logs/AuditLogs.js"; import { ACSDeployment } from "../../ACS/deployment.js"; import { CoreFlags } from "../ACSFormats.js"; diff --git a/server/src/models/devices/Dispenser.ts b/server/src/database/models/devices/Dispenser.ts similarity index 78% rename from server/src/models/devices/Dispenser.ts rename to server/src/database/models/devices/Dispenser.ts index 1e7725a3e..dfcbd6cdd 100644 --- a/server/src/models/devices/Dispenser.ts +++ b/server/src/database/models/devices/Dispenser.ts @@ -1,8 +1,8 @@ -import { DeviceRow, DispenserRow } from "../../db/tables.js"; +import { DeviceRow, DispenserRow } from "../../knex/tables.js"; import { Device } from "./device.js"; import * as DeviceRepo from "../../repositories/Devices/DeviceRepository.js"; -import { EntityNotFound } from "../../EntityNotFound.js"; -import { DispenserError } from "../../api/devices/cards/cardApi.js"; +import { EntityNotFound } from "../../../EntityNotFound.js"; +import { DispenserError } from "../../../api/devices/cards/cardApi.js"; export class Dispenser extends Device implements DispenserRow { deviceID: number; diff --git a/server/src/models/devices/accessController.ts b/server/src/database/models/devices/accessController.ts similarity index 99% rename from server/src/models/devices/accessController.ts rename to server/src/database/models/devices/accessController.ts index 6061406e2..fc78e14ef 100644 --- a/server/src/models/devices/accessController.ts +++ b/server/src/database/models/devices/accessController.ts @@ -1,4 +1,4 @@ -import { AccessControllerRow, AccessControllerState } from "../../db/tables.js"; +import { AccessControllerRow, AccessControllerState } from "../../knex/tables.js"; import * as EquipmentInstanceRepo from "../../repositories/Equipment/EquipmentInstancesRepository.js"; import * as EquipmentRepo from "../../repositories/Equipment/EquipmentRepository.js"; import * as UserRepo from "../../repositories/Users/UserRepository.js"; diff --git a/server/src/models/devices/core.ts b/server/src/database/models/devices/core.ts similarity index 97% rename from server/src/models/devices/core.ts rename to server/src/database/models/devices/core.ts index 0999862ba..e195f34d4 100644 --- a/server/src/models/devices/core.ts +++ b/server/src/database/models/devices/core.ts @@ -1,8 +1,8 @@ -import { AccessControllerState, CoreInputMode, CoreRow, DeviceRow } from "../../db/tables.js"; +import { AccessControllerState, CoreInputMode, CoreRow, DeviceRow } from "../../knex/tables.js"; import { Device } from "./device.js"; import * as DeviceRepo from "../../repositories/Devices/DeviceRepository.js"; -import { EntityNotFound } from "../../EntityNotFound.js"; -import { CurrentUser } from "../../context.js"; +import { EntityNotFound } from "../../../EntityNotFound.js"; +import { CurrentUser } from "../../../context.js"; import { AccessController } from "./accessController.js"; import * as ACRepo from "../../repositories/Devices/AccessControllerRepository.js"; import { CoreConfig } from "../api/WSACS/WSACSFormats.js"; diff --git a/server/src/models/devices/device.ts b/server/src/database/models/devices/device.ts similarity index 97% rename from server/src/models/devices/device.ts rename to server/src/database/models/devices/device.ts index b3638b30e..9b23576ab 100644 --- a/server/src/models/devices/device.ts +++ b/server/src/database/models/devices/device.ts @@ -1,5 +1,5 @@ import { createCipheriv, scryptSync } from "crypto"; -import { DeviceRow } from "../../db/tables.js"; +import { DeviceRow } from "../../knex/tables.js"; import * as DeviceRepo from "../../repositories/Devices/DeviceRepository.js"; export class Device implements DeviceRow { diff --git a/server/src/models/equipment/Equipment.ts b/server/src/database/models/equipment/Equipment.ts similarity index 98% rename from server/src/models/equipment/Equipment.ts rename to server/src/database/models/equipment/Equipment.ts index 5ca93f4d0..835a083c9 100644 --- a/server/src/models/equipment/Equipment.ts +++ b/server/src/database/models/equipment/Equipment.ts @@ -1,4 +1,4 @@ -import { EquipmentRow } from "../../db/tables.js"; +import { EquipmentRow } from "../../knex/tables.js"; import { AccessAttemptReason } from "../devices/accessController.js"; import { User } from "../users/User.js"; import * as RoomRepo from "../../repositories/Rooms/RoomRepository.js"; diff --git a/server/src/models/logs/AuditLogs.ts b/server/src/database/models/logs/AuditLogs.ts similarity index 100% rename from server/src/models/logs/AuditLogs.ts rename to server/src/database/models/logs/AuditLogs.ts diff --git a/server/src/models/makerspaces/makerspace.ts b/server/src/database/models/makerspaces/makerspace.ts similarity index 95% rename from server/src/models/makerspaces/makerspace.ts rename to server/src/database/models/makerspaces/makerspace.ts index 798dc74d3..ce04f27bd 100644 --- a/server/src/models/makerspaces/makerspace.ts +++ b/server/src/database/models/makerspaces/makerspace.ts @@ -1,4 +1,4 @@ -import { MakerspaceRow } from "../../db/tables.js"; +import { MakerspaceRow } from "../../knex/tables.js"; import { Room } from "../rooms/room.js"; import * as RoomRepo from "../../repositories/Rooms/RoomRepository.js"; import * as UserRepo from "../../repositories/Users/UserRepository.js"; diff --git a/server/src/models/rooms/room.ts b/server/src/database/models/rooms/room.ts similarity index 90% rename from server/src/models/rooms/room.ts rename to server/src/database/models/rooms/room.ts index 0874be94b..e1e471895 100644 --- a/server/src/models/rooms/room.ts +++ b/server/src/database/models/rooms/room.ts @@ -1,4 +1,4 @@ -import { RoomRow } from "../../db/tables.js"; +import { RoomRow } from "../../knex/tables.js"; import * as RoomRepo from "../../repositories/Rooms/RoomRepository.js"; export class Room implements RoomRow { diff --git a/server/src/models/site_settings/ServerThemeData.ts b/server/src/database/models/site_settings/ServerThemeData.ts similarity index 100% rename from server/src/models/site_settings/ServerThemeData.ts rename to server/src/database/models/site_settings/ServerThemeData.ts diff --git a/server/src/models/site_settings/SiteSettings.ts b/server/src/database/models/site_settings/SiteSettings.ts similarity index 100% rename from server/src/models/site_settings/SiteSettings.ts rename to server/src/database/models/site_settings/SiteSettings.ts diff --git a/server/src/models/users/User.ts b/server/src/database/models/users/User.ts similarity index 98% rename from server/src/models/users/User.ts rename to server/src/database/models/users/User.ts index c53f71aaf..11e608e7d 100644 --- a/server/src/models/users/User.ts +++ b/server/src/database/models/users/User.ts @@ -1,4 +1,4 @@ -import { RestrictionRow, UserRow } from "../../db/tables.js"; +import { RestrictionRow, UserRow } from "../../knex/tables.js"; import * as HoldsRepo from "../../repositories/Holds/HoldsRepository.js"; import * as RestrctionRepo from "../../repositories/Restrictions/RestrictionsRepository.js"; import * as UserRepo from "../../repositories/Users/UserRepository.js"; diff --git a/server/src/repositories/Announcements/AnnouncementsRepository.ts b/server/src/database/repositories/Announcements/AnnouncementsRepository.ts similarity index 93% rename from server/src/repositories/Announcements/AnnouncementsRepository.ts rename to server/src/database/repositories/Announcements/AnnouncementsRepository.ts index c386f2f07..8d567511b 100644 --- a/server/src/repositories/Announcements/AnnouncementsRepository.ts +++ b/server/src/database/repositories/Announcements/AnnouncementsRepository.ts @@ -2,9 +2,9 @@ * DB operations endpoint for Announcements table */ -import { EntityNotFound } from "../../EntityNotFound.js"; -import { knex } from "../../db/index.js"; -import { AnnouncementRow } from "../../db/tables.js"; +import { EntityNotFound } from "../../../EntityNotFound.js"; +import { knex } from "../../knex/index.js"; +import { AnnouncementRow } from "../../knex/tables.js"; /** * fetch every Announcement diff --git a/server/src/repositories/AuditLogs/AuditLogRepository.ts b/server/src/database/repositories/AuditLogs/AuditLogRepository.ts similarity index 98% rename from server/src/repositories/AuditLogs/AuditLogRepository.ts rename to server/src/database/repositories/AuditLogs/AuditLogRepository.ts index b8d22fc84..13cac9839 100644 --- a/server/src/repositories/AuditLogs/AuditLogRepository.ts +++ b/server/src/database/repositories/AuditLogs/AuditLogRepository.ts @@ -2,8 +2,8 @@ * DB operations endpoint for AuditLog table */ -import { knex } from "../../db/index.js"; -import { AuditLogRow } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { AuditLogRow } from "../../knex/tables.js"; import { AuditLogEntity } from "../../models/logs/AuditLogs.js"; diff --git a/server/src/repositories/Currency/CurrencyAccountsRepository.ts b/server/src/database/repositories/Currency/CurrencyAccountsRepository.ts similarity index 97% rename from server/src/repositories/Currency/CurrencyAccountsRepository.ts rename to server/src/database/repositories/Currency/CurrencyAccountsRepository.ts index 9537f432b..d1e60fe7f 100644 --- a/server/src/repositories/Currency/CurrencyAccountsRepository.ts +++ b/server/src/database/repositories/Currency/CurrencyAccountsRepository.ts @@ -1,10 +1,10 @@ import { GraphQLError } from "graphql"; -import { knex } from "../../db/index.js"; -import { CurrencyAccountsRow } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { CurrencyAccountsRow } from "../../knex/tables.js"; import * as OrgRepo from "../Users/OrganizationRepository.js"; import * as UserRepo from "../Users/UserRepository.js"; import * as CurrencyLedgerRepo from "./CurrencyLedgerRepository.js"; -import { CurrencyType } from "../../integrations/currency/types.js"; +import { CurrencyType } from "../../../integrations/currency/types.js"; type AccountOwner = { displayName: string; diff --git a/server/src/repositories/Currency/CurrencyLedgerRepository.ts b/server/src/database/repositories/Currency/CurrencyLedgerRepository.ts similarity index 95% rename from server/src/repositories/Currency/CurrencyLedgerRepository.ts rename to server/src/database/repositories/Currency/CurrencyLedgerRepository.ts index db74ffa35..b9fae24dc 100644 --- a/server/src/repositories/Currency/CurrencyLedgerRepository.ts +++ b/server/src/database/repositories/Currency/CurrencyLedgerRepository.ts @@ -1,9 +1,9 @@ import { GraphQLError } from "graphql"; -import { knex } from "../../db/index.js"; -import { CurrencyLedgerRow } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { CurrencyLedgerRow } from "../../knex/tables.js"; import * as OrgRepo from "../Users/OrganizationRepository.js"; import * as UserRepo from "../Users/UserRepository.js"; -import { CurrencyType } from "../../integrations/currency/types.js"; +import { CurrencyType } from "../../../integrations/currency/types.js"; export async function createCurrencyLedgerEntry( accountID: number, diff --git a/server/src/repositories/Currency/TransactionRepository.ts b/server/src/database/repositories/Currency/TransactionRepository.ts similarity index 97% rename from server/src/repositories/Currency/TransactionRepository.ts rename to server/src/database/repositories/Currency/TransactionRepository.ts index 54c4a670b..135a70bd1 100644 --- a/server/src/repositories/Currency/TransactionRepository.ts +++ b/server/src/database/repositories/Currency/TransactionRepository.ts @@ -1,6 +1,6 @@ -import { knex } from "../../db/index.js"; -import { CurrencyLedgerRow, TransactionEntryRow, TransactionRow } from "../../db/tables.js"; -import { CurrencySource, CurrencyType } from "../../integrations/currency/types.js"; +import { knex } from "../../knex/index.js"; +import { CurrencyLedgerRow, TransactionEntryRow, TransactionRow } from "../../knex/tables.js"; +import { CurrencySource, CurrencyType } from "../../../integrations/currency/types.js"; import { createUnassocaitedAuditLog } from "../AuditLogs/AuditLogRepository.js"; /** diff --git a/server/src/repositories/DataPoints/DataPointsRepository.ts b/server/src/database/repositories/DataPoints/DataPointsRepository.ts similarity index 55% rename from server/src/repositories/DataPoints/DataPointsRepository.ts rename to server/src/database/repositories/DataPoints/DataPointsRepository.ts index 393875b8b..a391feb96 100644 --- a/server/src/repositories/DataPoints/DataPointsRepository.ts +++ b/server/src/database/repositories/DataPoints/DataPointsRepository.ts @@ -5,21 +5,21 @@ */ -import { knex } from "../../db/index.js"; -import { DataPointsRow } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { DataPointsRow } from "../../knex/tables.js"; export async function getDataPointByID(id: number): Promise { - return await knex("DataPoints").select().where({id}).first(); + return await knex("DataPoints").select().where({ id }).first(); } export async function setDataPointValue(id: number, value: number): Promise { - return await knex("DataPoints").update({value}).where({id}); + return await knex("DataPoints").update({ value }).where({ id }); } export async function incrementDataPointValue(id: number, increment: number): Promise { const data = await getDataPointByID(id); if (!data) return -1; - return await knex("DataPoints").update({value: (Number(data.value) + Number(increment))}).where({id}); + return await knex("DataPoints").update({ value: (Number(data.value) + Number(increment)) }).where({ id }); } \ No newline at end of file diff --git a/server/src/repositories/Devices/AccessControllerRepository.ts b/server/src/database/repositories/Devices/AccessControllerRepository.ts similarity index 98% rename from server/src/repositories/Devices/AccessControllerRepository.ts rename to server/src/database/repositories/Devices/AccessControllerRepository.ts index 6859a6853..3e168227f 100644 --- a/server/src/repositories/Devices/AccessControllerRepository.ts +++ b/server/src/database/repositories/Devices/AccessControllerRepository.ts @@ -1,6 +1,6 @@ import { GraphQLError } from "graphql"; -import { knex } from "../../db/index.js"; -import { AccessControllerRow, AccessControllerState } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { AccessControllerRow, AccessControllerState } from "../../knex/tables.js"; import { AccessController } from "../../models/devices/accessController.js"; export async function getAccessControllersByDeviceID(deviceID: number): Promise { diff --git a/server/src/repositories/Devices/CoreRepository.ts b/server/src/database/repositories/Devices/CoreRepository.ts similarity index 97% rename from server/src/repositories/Devices/CoreRepository.ts rename to server/src/database/repositories/Devices/CoreRepository.ts index e7a2f664d..998484104 100644 --- a/server/src/repositories/Devices/CoreRepository.ts +++ b/server/src/database/repositories/Devices/CoreRepository.ts @@ -1,12 +1,12 @@ import { GraphQLError } from "graphql"; -import { knex } from "../../db/index.js"; -import { AccessControllerState, CoreInputMode, CoreRow } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { AccessControllerState, CoreInputMode, CoreRow } from "../../knex/tables.js"; import { Core } from "../../models/devices/core.js"; import * as ACRepo from "./AccessControllerRepository.js"; import * as DeviceRepo from "./DeviceRepository.js"; import { ACSDeployment } from "../../models/ACS/deployment.js"; import { CoreFlags } from "../../models/api/ACSFormats.js"; -import { EntityNotFound } from "../../EntityNotFound.js"; +import { EntityNotFound } from "../../../EntityNotFound.js"; export async function getCoreByDeviceID(deviceID: number): Promise { const rawRow = await knex("Cores").where("deviceID", deviceID).first(); diff --git a/server/src/repositories/Devices/DeviceRepository.ts b/server/src/database/repositories/Devices/DeviceRepository.ts similarity index 97% rename from server/src/repositories/Devices/DeviceRepository.ts rename to server/src/database/repositories/Devices/DeviceRepository.ts index cdeaac640..804c6b232 100644 --- a/server/src/repositories/Devices/DeviceRepository.ts +++ b/server/src/database/repositories/Devices/DeviceRepository.ts @@ -1,6 +1,6 @@ import { GraphQLError } from "graphql"; -import { knex } from "../../db/index.js"; -import { DeviceRow, MakerspaceRow } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { DeviceRow, MakerspaceRow } from "../../knex/tables.js"; import { Device } from "../../models/devices/device.js"; import { generateRandomHumanName } from "../../data/humanReadableNames.js"; import { randomInt } from "crypto"; diff --git a/server/src/repositories/Devices/DispenserRepository.ts b/server/src/database/repositories/Devices/DispenserRepository.ts similarity index 94% rename from server/src/repositories/Devices/DispenserRepository.ts rename to server/src/database/repositories/Devices/DispenserRepository.ts index d3d79c6b4..ec59ce7f3 100644 --- a/server/src/repositories/Devices/DispenserRepository.ts +++ b/server/src/database/repositories/Devices/DispenserRepository.ts @@ -1,4 +1,4 @@ -import { knex } from "../../db/index.js"; +import { knex } from "../../knex/index.js"; import { Dispenser } from "../../models/devices/Dispenser.js"; import * as DeviceRepo from "./DeviceRepository.js"; diff --git a/server/src/repositories/Equipment/AccessChecksRepository.ts b/server/src/database/repositories/Equipment/AccessChecksRepository.ts similarity index 97% rename from server/src/repositories/Equipment/AccessChecksRepository.ts rename to server/src/database/repositories/Equipment/AccessChecksRepository.ts index c458e228c..7d6bff1c7 100644 --- a/server/src/repositories/Equipment/AccessChecksRepository.ts +++ b/server/src/database/repositories/Equipment/AccessChecksRepository.ts @@ -2,8 +2,8 @@ * DB operations endpoint for AccessChecks table */ -import { knex } from "../../db/index.js"; -import { AccessCheckRow } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { AccessCheckRow } from "../../knex/tables.js"; /** diff --git a/server/src/repositories/Equipment/EquipmentInstancesRepository.ts b/server/src/database/repositories/Equipment/EquipmentInstancesRepository.ts similarity index 96% rename from server/src/repositories/Equipment/EquipmentInstancesRepository.ts rename to server/src/database/repositories/Equipment/EquipmentInstancesRepository.ts index e232203d5..fc7c99038 100644 --- a/server/src/repositories/Equipment/EquipmentInstancesRepository.ts +++ b/server/src/database/repositories/Equipment/EquipmentInstancesRepository.ts @@ -3,8 +3,8 @@ * DB Operations for Equipment Instances */ -import { knex } from "../../db/index.js"; -import { EquipmentInstancesRow, ReaderRow } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { EquipmentInstancesRow, ReaderRow } from "../../knex/tables.js"; /** * Fetch all EquipmentInstances related to noted Equipment diff --git a/server/src/repositories/Equipment/EquipmentRepository.ts b/server/src/database/repositories/Equipment/EquipmentRepository.ts similarity index 97% rename from server/src/repositories/Equipment/EquipmentRepository.ts rename to server/src/database/repositories/Equipment/EquipmentRepository.ts index 13dab942b..da5b2223d 100644 --- a/server/src/repositories/Equipment/EquipmentRepository.ts +++ b/server/src/database/repositories/Equipment/EquipmentRepository.ts @@ -2,10 +2,10 @@ * DB operations endpoint for Equipment table */ -import { knex } from "../../db/index.js"; -import { EntityNotFound } from "../../EntityNotFound.js"; -import { EquipmentRow, TrainingModuleRow, UserRow } from "../../db/tables.js"; -import { EquipmentInput } from "../../schemas/equipmentSchema.js"; +import { knex } from "../../knex/index.js"; +import { EntityNotFound } from "../../../EntityNotFound.js"; +import { EquipmentRow, TrainingModuleRow, UserRow } from "../../knex/tables.js"; +import { EquipmentInput } from "../../../graphql/schemas/equipmentSchema.js"; import * as ModuleRepo from "../Training/ModuleRepository.js"; import * as HoldsRepo from "../Holds/HoldsRepository.js"; import * as UserRepo from "../Users/UserRepository.js"; diff --git a/server/src/repositories/Equipment/EquipmentSessionsRepository.ts b/server/src/database/repositories/Equipment/EquipmentSessionsRepository.ts similarity index 94% rename from server/src/repositories/Equipment/EquipmentSessionsRepository.ts rename to server/src/database/repositories/Equipment/EquipmentSessionsRepository.ts index dc8b16e12..e2f0f1bc0 100644 --- a/server/src/repositories/Equipment/EquipmentSessionsRepository.ts +++ b/server/src/database/repositories/Equipment/EquipmentSessionsRepository.ts @@ -3,8 +3,8 @@ * DB Operations for Equipment Sessions */ -import { knex } from "../../db/index.js"; -import { EquipmentSessionRow } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { EquipmentSessionRow } from "../../knex/tables.js"; /** * Insert a new Equipment Session into table diff --git a/server/src/repositories/Equipment/MaintenanceTicketRepository.ts b/server/src/database/repositories/Equipment/MaintenanceTicketRepository.ts similarity index 98% rename from server/src/repositories/Equipment/MaintenanceTicketRepository.ts rename to server/src/database/repositories/Equipment/MaintenanceTicketRepository.ts index bdeb306e7..fe4232597 100644 --- a/server/src/repositories/Equipment/MaintenanceTicketRepository.ts +++ b/server/src/database/repositories/Equipment/MaintenanceTicketRepository.ts @@ -1,6 +1,6 @@ import { GraphQLError } from "graphql"; -import { knex } from "../../db/index.js"; -import { MaintenanceTicketRow, MaintenanceTicketSeverity, MaintenanceTicketStatus, MaintenanceTicketType } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { MaintenanceTicketRow, MaintenanceTicketSeverity, MaintenanceTicketStatus, MaintenanceTicketType } from "../../knex/tables.js"; import { addHours, endOfDay } from "date-fns" export async function createMaintenanceTicket( diff --git a/server/src/repositories/Equipment/ReservationRepository.ts b/server/src/database/repositories/Equipment/ReservationRepository.ts similarity index 94% rename from server/src/repositories/Equipment/ReservationRepository.ts rename to server/src/database/repositories/Equipment/ReservationRepository.ts index 3fbd92fe6..ef4b75846 100644 --- a/server/src/repositories/Equipment/ReservationRepository.ts +++ b/server/src/database/repositories/Equipment/ReservationRepository.ts @@ -1,5 +1,5 @@ -import { ReservationRow } from "../../db/tables.js"; -import { knex } from "../../db/index.js"; +import { ReservationRow } from "../../knex/tables.js"; +import { knex } from "../../knex/index.js"; export async function createReservation(userID: number, equipmentID: number, start: string, end: string, description?: string, approved?: boolean): Promise { return (await knex("Reservations").insert({ diff --git a/server/src/repositories/Holds/HoldsRepository.ts b/server/src/database/repositories/Holds/HoldsRepository.ts similarity index 93% rename from server/src/repositories/Holds/HoldsRepository.ts rename to server/src/database/repositories/Holds/HoldsRepository.ts index 41360add9..598b9eae9 100644 --- a/server/src/repositories/Holds/HoldsRepository.ts +++ b/server/src/database/repositories/Holds/HoldsRepository.ts @@ -2,9 +2,9 @@ * DB operations endpoint for Holds table */ -import { knex } from "../../db/index.js"; -import { EntityNotFound } from "../../EntityNotFound.js"; -import { HoldRow } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { EntityNotFound } from "../../../EntityNotFound.js"; +import { HoldRow } from "../../knex/tables.js"; /** * Fetcha hold by it's unique ID diff --git a/server/src/database/repositories/Links/customUrlRepository.ts b/server/src/database/repositories/Links/customUrlRepository.ts new file mode 100644 index 000000000..470a4904e --- /dev/null +++ b/server/src/database/repositories/Links/customUrlRepository.ts @@ -0,0 +1,29 @@ +import { knex } from "../../knex/index.js"; +import { CustomUrlRow } from "../../knex/tables.js"; +import { CustomUrlInput } from "../../../graphql/schemas/customUrlSchema.js"; + +export async function getCustomUrl(shortUrl: string): Promise { + return await knex('CustomUrls').select('*').where({ shortUrl }).first(); +} + +export async function getCustomUrls() { + return await knex('CustomUrls').select('*').orderBy("id", "asc"); +} + +export async function getCustomUrlById(id: number): Promise { + return await knex('CustomUrls').select('*').where({ id }).first(); +} + +export async function createCustomUrl(shortUrl: string, longUrl: string): Promise { + const customUrlRow = (await knex('CustomUrls').insert({ shortUrl, longUrl }).returning('*'))[0]; + return customUrlRow +} + +export async function updateCustomUrl(id: number, customUrl: CustomUrlInput): Promise { + await knex('CustomUrls').where('id', id).update({ shortUrl: customUrl.shortUrl, longUrl: customUrl.longUrl }); + return getCustomUrlById(id); +} + +export async function deleteCustomUrl(id: number) { + return await knex('CustomUrls').delete().where({ id }); +} \ No newline at end of file diff --git a/server/src/repositories/Logs/DeviceLogsRepository.ts b/server/src/database/repositories/Logs/DeviceLogsRepository.ts similarity index 83% rename from server/src/repositories/Logs/DeviceLogsRepository.ts rename to server/src/database/repositories/Logs/DeviceLogsRepository.ts index befa42658..247cf36b2 100644 --- a/server/src/repositories/Logs/DeviceLogsRepository.ts +++ b/server/src/database/repositories/Logs/DeviceLogsRepository.ts @@ -1,5 +1,5 @@ -import { DeviceLogRow, DeviceLogSeverity } from "../../db/tables.js"; -import { knex } from "../../db/index.js"; +import { DeviceLogRow, DeviceLogSeverity } from "../../knex/tables.js"; +import { knex } from "../../knex/index.js"; export async function createDeviceLog(deviceID: number | undefined, severity: DeviceLogSeverity, log: object): Promise { if (severity === DeviceLogSeverity.HIGH) { diff --git a/server/src/repositories/Logs/UnlockAtemptRepository.ts b/server/src/database/repositories/Logs/UnlockAtemptRepository.ts similarity index 82% rename from server/src/repositories/Logs/UnlockAtemptRepository.ts rename to server/src/database/repositories/Logs/UnlockAtemptRepository.ts index f20625e7e..f81f74876 100644 --- a/server/src/repositories/Logs/UnlockAtemptRepository.ts +++ b/server/src/database/repositories/Logs/UnlockAtemptRepository.ts @@ -1,5 +1,5 @@ -import { knex } from "../../db/index.js"; -import { UnlockAttemptLogRow } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { UnlockAttemptLogRow } from "../../knex/tables.js"; export async function createUnlockAttemptLog( equipmentID: number | undefined, diff --git a/server/src/repositories/Makerspaces/MakerspaceHoursRepository.ts b/server/src/database/repositories/Makerspaces/MakerspaceHoursRepository.ts similarity index 97% rename from server/src/repositories/Makerspaces/MakerspaceHoursRepository.ts rename to server/src/database/repositories/Makerspaces/MakerspaceHoursRepository.ts index 0b7292736..a93a6b09f 100644 --- a/server/src/repositories/Makerspaces/MakerspaceHoursRepository.ts +++ b/server/src/database/repositories/Makerspaces/MakerspaceHoursRepository.ts @@ -4,8 +4,8 @@ */ import { GraphQLError } from "graphql"; -import { knex } from "../../db/index.js"; -import { DefaultHoursRow, SpecialHoursRow } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { DefaultHoursRow, SpecialHoursRow } from "../../knex/tables.js"; const full_formatter = new Intl.DateTimeFormat("en-US", { timeZone: "America/New_York", diff --git a/server/src/repositories/Makerspaces/MakerspaceRespository.ts b/server/src/database/repositories/Makerspaces/MakerspaceRespository.ts similarity index 97% rename from server/src/repositories/Makerspaces/MakerspaceRespository.ts rename to server/src/database/repositories/Makerspaces/MakerspaceRespository.ts index d456adf16..4353540ee 100644 --- a/server/src/repositories/Makerspaces/MakerspaceRespository.ts +++ b/server/src/database/repositories/Makerspaces/MakerspaceRespository.ts @@ -3,9 +3,9 @@ * DB Operations for Makerspaces */ -import { knex } from '../../db/index.js'; -import { TrainingModuleRow, MakerspaceRow, UserRow } from '../../db/tables.js'; -import { MakerspaceInput } from '../../schemas/makerspacesSchema.js'; +import { knex } from '../../knex/index.js'; +import { TrainingModuleRow, MakerspaceRow, UserRow } from '../../knex/tables.js'; +import { MakerspaceInput } from '../../../graphql/schemas/makerspacesSchema.js'; import * as ModuleRepo from '../Training/ModuleRepository.js'; diff --git a/server/src/repositories/Readers/ReaderRepository.ts b/server/src/database/repositories/Readers/ReaderRepository.ts similarity index 99% rename from server/src/repositories/Readers/ReaderRepository.ts rename to server/src/database/repositories/Readers/ReaderRepository.ts index 4fed4ef9b..a9cdce972 100644 --- a/server/src/repositories/Readers/ReaderRepository.ts +++ b/server/src/database/repositories/Readers/ReaderRepository.ts @@ -3,8 +3,8 @@ * DB Operations for Readers (ACS Devices) */ -import { knex } from "../../db/index.js"; -import { ReaderLogRow, ReaderRow, TextFieldRow, MakerspaceRow } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { ReaderLogRow, ReaderRow, TextFieldRow, MakerspaceRow } from "../../knex/tables.js"; import { getMakerspaceByID } from "../Makerspaces/MakerspaceRespository.js"; /** diff --git a/server/src/repositories/Restrictions/RestrictionsRepository.ts b/server/src/database/repositories/Restrictions/RestrictionsRepository.ts similarity index 85% rename from server/src/repositories/Restrictions/RestrictionsRepository.ts rename to server/src/database/repositories/Restrictions/RestrictionsRepository.ts index b783d5130..1076cf249 100644 --- a/server/src/repositories/Restrictions/RestrictionsRepository.ts +++ b/server/src/database/repositories/Restrictions/RestrictionsRepository.ts @@ -1,12 +1,12 @@ -import { knex } from "../../db/index.js"; -import { RestrictionRow } from "../../db/tables.js"; -import { EntityNotFound } from "../../EntityNotFound.js"; +import { knex } from "../../knex/index.js"; +import { RestrictionRow } from "../../knex/tables.js"; +import { EntityNotFound } from "../../../EntityNotFound.js"; /** * Function to get restriction by ID */ export async function getRestriction(id: number): Promise { - const restriciton = await knex("Restrictions").first().where({id: id}); + const restriciton = await knex("Restrictions").first().where({ id: id }); if (!restriciton) throw new EntityNotFound(`Restriction #${id} Not Found`); @@ -43,7 +43,7 @@ export async function createRestriction( * @param id id of the restriciton to delete */ export async function deleteRestriction(id: number): Promise { - await knex("Restrictions").delete().where({id: id}); + await knex("Restrictions").delete().where({ id: id }); return true; } @@ -53,7 +53,7 @@ export async function deleteRestriction(id: number): Promise { * @returns An array of @type {RestrictionRow} */ export async function getRestrictionsByUserID(userID: number): Promise { - return await knex("Restrictions").select().where({userID: userID}).orderBy("createDate", "desc"); + return await knex("Restrictions").select().where({ userID: userID }).orderBy("createDate", "desc"); } /** diff --git a/server/src/repositories/Rooms/RoomRepository.ts b/server/src/database/repositories/Rooms/RoomRepository.ts similarity index 97% rename from server/src/repositories/Rooms/RoomRepository.ts rename to server/src/database/repositories/Rooms/RoomRepository.ts index ad184a30a..d8fadb355 100644 --- a/server/src/repositories/Rooms/RoomRepository.ts +++ b/server/src/database/repositories/Rooms/RoomRepository.ts @@ -3,10 +3,10 @@ */ import { Room } from "../../models/rooms/room.js"; -import { knex } from "../../db/index.js"; +import { knex } from "../../knex/index.js"; import assert from "assert"; -import { RoomSwipeRow, TrainingModuleRow } from "../../db/tables.js"; -import { EntityNotFound } from "../../EntityNotFound.js"; +import { RoomSwipeRow, TrainingModuleRow } from "../../knex/tables.js"; +import { EntityNotFound } from "../../../EntityNotFound.js"; import * as ModuleRepo from "../Training/ModuleRepository.js"; /** diff --git a/server/src/repositories/SiteSettings/ThemesRepository.ts b/server/src/database/repositories/SiteSettings/ThemesRepository.ts similarity index 92% rename from server/src/repositories/SiteSettings/ThemesRepository.ts rename to server/src/database/repositories/SiteSettings/ThemesRepository.ts index cc0be6c16..1c30d0373 100644 --- a/server/src/repositories/SiteSettings/ThemesRepository.ts +++ b/server/src/database/repositories/SiteSettings/ThemesRepository.ts @@ -1,5 +1,5 @@ -import { knex } from "../../db/index.js"; -import { ThemeRow } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { ThemeRow } from "../../knex/tables.js"; export async function getThemes(): Promise { return await knex("Themes").select("*").orderBy("id", "asc"); diff --git a/server/src/repositories/Store/InventoryCartsRepository.ts b/server/src/database/repositories/Store/InventoryCartsRepository.ts similarity index 96% rename from server/src/repositories/Store/InventoryCartsRepository.ts rename to server/src/database/repositories/Store/InventoryCartsRepository.ts index 2e3e7e9e1..d4191bbfa 100644 --- a/server/src/repositories/Store/InventoryCartsRepository.ts +++ b/server/src/database/repositories/Store/InventoryCartsRepository.ts @@ -3,8 +3,8 @@ * DB Operations for Inventory Carts */ -import { knex } from "../../db/index.js"; -import { InventoryCartsRow, InventoryItemRow } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { InventoryCartsRow, InventoryItemRow } from "../../knex/tables.js"; export async function getInventoryCarts(): Promise { return await knex("InventoryCarts").select(); diff --git a/server/src/repositories/Store/InventoryLedgerRepository.ts b/server/src/database/repositories/Store/InventoryLedgerRepository.ts similarity index 92% rename from server/src/repositories/Store/InventoryLedgerRepository.ts rename to server/src/database/repositories/Store/InventoryLedgerRepository.ts index 1b345333f..7ada592f5 100644 --- a/server/src/repositories/Store/InventoryLedgerRepository.ts +++ b/server/src/database/repositories/Store/InventoryLedgerRepository.ts @@ -3,9 +3,8 @@ * DB Operations for Inventory Ledgers */ -import { knex } from "../../db/index.js"; -import { InventoryLedgerRow } from "../../db/tables.js"; -import { InventoryItem } from "../../schemas/storeFrontSchema.js"; +import { knex } from "../../knex/index.js"; +import { InventoryLedgerRow } from "../../knex/tables.js"; /** * Get the first 100 Inventory Ledgers by search params diff --git a/server/src/repositories/Store/InventoryRepository.ts b/server/src/database/repositories/Store/InventoryRepository.ts similarity index 97% rename from server/src/repositories/Store/InventoryRepository.ts rename to server/src/database/repositories/Store/InventoryRepository.ts index b79a0788a..81badd9fd 100644 --- a/server/src/repositories/Store/InventoryRepository.ts +++ b/server/src/database/repositories/Store/InventoryRepository.ts @@ -2,14 +2,14 @@ * DB operations endpoint for Holds table */ -import { knex } from "../../db/index.js"; -import { InventoryItemRow, InventoryTagRow } from "../../db/tables.js"; -import { EntityNotFound } from "../../EntityNotFound.js"; +import { knex } from "../../knex/index.js"; +import { InventoryItemRow, InventoryTagRow } from "../../knex/tables.js"; +import { EntityNotFound } from "../../../EntityNotFound.js"; import { InventoryItem, InventoryItemInput, -} from "../../schemas/storeFrontSchema.js"; +} from "../../../graphql/schemas/storeFrontSchema.js"; /** * Fetch all Inventory Items diff --git a/server/src/repositories/Store/ToolItemInstancesRepository.ts b/server/src/database/repositories/Store/ToolItemInstancesRepository.ts similarity index 78% rename from server/src/repositories/Store/ToolItemInstancesRepository.ts rename to server/src/database/repositories/Store/ToolItemInstancesRepository.ts index 2fd7efe50..97ff49869 100644 --- a/server/src/repositories/Store/ToolItemInstancesRepository.ts +++ b/server/src/database/repositories/Store/ToolItemInstancesRepository.ts @@ -3,8 +3,8 @@ * DB Operations for Tool Item Instances */ -import { knex } from "../../db/index.js"; -import { ToolItemInstancesRow } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { ToolItemInstancesRow } from "../../knex/tables.js"; /** * Fetch all Tool Item Instances @@ -20,7 +20,7 @@ export async function getToolItemInstances(): Promise { * @returns all matching Tool Item Instances */ export async function getToolItemInstancesByType(typeID: number): Promise { - return await knex("ToolItemInstances").select().where({typeID}).orderBy("id"); + return await knex("ToolItemInstances").select().where({ typeID }).orderBy("id"); } /** @@ -29,7 +29,7 @@ export async function getToolItemInstancesByType(typeID: number): Promise { - return await knex("ToolItemInstances").select().where({id}).first(); + return await knex("ToolItemInstances").select().where({ id }).first(); } /** @@ -38,7 +38,7 @@ export async function getToolItemInstanceByID(id: number): Promise { - return await knex("ToolItemInstances").select().where({borrowerUserID}); + return await knex("ToolItemInstances").select().where({ borrowerUserID }); } /** @@ -53,7 +53,7 @@ export async function getToolItemInstancesByBorrower(borrowerUserID: number): Pr * @returns new ToolItemInstance */ export async function createToolItemInstance(typeID: number, uniqueIdentifier: string, locationRoomID: number | undefined, locationDescription: string | undefined, condition: string, status: string, notes: string | undefined): Promise { - return await knex("ToolItemInstances").insert({typeID, uniqueIdentifier, locationRoomID, locationDescription, condition, status, notes}); + return await knex("ToolItemInstances").insert({ typeID, uniqueIdentifier, locationRoomID, locationDescription, condition, status, notes }); } /** @@ -69,7 +69,7 @@ export async function createToolItemInstance(typeID: number, uniqueIdentifier: s * @returns updated Tool Item Instance */ export async function updateToolItemInstance(id: number, typeID: number, uniqueIdentifier: string, locationRoomID: number | undefined, locationDescription: string | undefined, condition: string, status: string, notes: string | undefined): Promise { - return (await knex("ToolItemInstances").update({typeID, uniqueIdentifier, locationRoomID, locationDescription, condition, status, notes}).where({id}).returning("*"))[0]; + return (await knex("ToolItemInstances").update({ typeID, uniqueIdentifier, locationRoomID, locationDescription, condition, status, notes }).where({ id }).returning("*"))[0]; } /** @@ -78,7 +78,7 @@ export async function updateToolItemInstance(id: number, typeID: number, uniqueI * @returns true */ export async function deleteToolItemInstance(id: number): Promise { - await knex("ToolItemInstances").delete().where({id}); + await knex("ToolItemInstances").delete().where({ id }); return true; } @@ -89,7 +89,7 @@ export async function deleteToolItemInstance(id: number): Promise { * @returns true */ export async function borrowItem(borrowerUserID: number, id: number): Promise { - await knex("ToolItemInstances").update({borrowerUserID, borrowedAt: knex.fn.now(), status: "OUT"}).where({id}); + await knex("ToolItemInstances").update({ borrowerUserID, borrowedAt: knex.fn.now(), status: "OUT" }).where({ id }); return true; } @@ -99,6 +99,6 @@ export async function borrowItem(borrowerUserID: number, id: number): Promise { - await knex("ToolItemInstances").update({borrowerUserID: null, borrowedAt: null, status: "AVAILABLE"}).where({id}); + await knex("ToolItemInstances").update({ borrowerUserID: null, borrowedAt: null, status: "AVAILABLE" }).where({ id }); return true; } \ No newline at end of file diff --git a/server/src/repositories/Store/ToolItemTypesRepository.ts b/server/src/database/repositories/Store/ToolItemTypesRepository.ts similarity index 96% rename from server/src/repositories/Store/ToolItemTypesRepository.ts rename to server/src/database/repositories/Store/ToolItemTypesRepository.ts index 99028b564..a2732d72c 100644 --- a/server/src/repositories/Store/ToolItemTypesRepository.ts +++ b/server/src/database/repositories/Store/ToolItemTypesRepository.ts @@ -3,8 +3,8 @@ * DB Operations for Tool Item Types */ -import { knex } from "../../db/index.js"; -import { ToolItemTypesRow } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { ToolItemTypesRow } from "../../knex/tables.js"; /** * Fetch all Tool Item Types diff --git a/server/src/repositories/TextItems/TermsRepository.ts b/server/src/database/repositories/TextItems/TermsRepository.ts similarity index 51% rename from server/src/repositories/TextItems/TermsRepository.ts rename to server/src/database/repositories/TextItems/TermsRepository.ts index c252f9f92..896ab59af 100644 --- a/server/src/repositories/TextItems/TermsRepository.ts +++ b/server/src/database/repositories/TextItems/TermsRepository.ts @@ -3,15 +3,15 @@ * DB Operations for the Terms and Conditions text value in the TextFields table */ -import { knex } from "../../db/index.js"; -import { TextFieldRow } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { TextFieldRow } from "../../knex/tables.js"; export async function getTerms(): Promise { - return await knex("TextFields").select().where({id: 1}).first(); + return await knex("TextFields").select().where({ id: 1 }).first(); } export async function setTerms(value: string): Promise { - return await knex("TextFields").update({value}).where({id: 1}); + return await knex("TextFields").update({ value }).where({ id: 1 }); } diff --git a/server/src/repositories/Training/ModuleRepository.ts b/server/src/database/repositories/Training/ModuleRepository.ts similarity index 96% rename from server/src/repositories/Training/ModuleRepository.ts rename to server/src/database/repositories/Training/ModuleRepository.ts index c168531f5..697f27662 100644 --- a/server/src/repositories/Training/ModuleRepository.ts +++ b/server/src/database/repositories/Training/ModuleRepository.ts @@ -2,10 +2,10 @@ * DB operations endpoint for TrainingModule table */ -import { knex } from "../../db/index.js"; -import { TrainingModuleRow, TrainingModuleItem, ModulesForEquipmentRow, EquipmentRow } from "../../db/tables.js"; -import { EntityNotFound } from "../../EntityNotFound.js"; -import { PassedModule } from "../../schemas/usersSchema.js"; +import { knex } from "../../knex/index.js"; +import { TrainingModuleRow, TrainingModuleItem, ModulesForEquipmentRow, EquipmentRow } from "../../knex/tables.js"; +import { EntityNotFound } from "../../../EntityNotFound.js"; +import { PassedModule } from "../../../graphql/schemas/usersSchema.js"; /** * Fetch all Training Modules in the table @@ -50,7 +50,7 @@ export async function getModuleByID(id: number): Promise { export async function getModuleIDsByEquipmentID(equipmentID: number): Promise[]> { const moduleIDs = await knex("ModulesForEquipment") .select("moduleID") - .where(equipmentID); + .where({ equipmentID: equipmentID }); return moduleIDs; } diff --git a/server/src/repositories/Training/PassedRepository.ts b/server/src/database/repositories/Training/PassedRepository.ts similarity index 91% rename from server/src/repositories/Training/PassedRepository.ts rename to server/src/database/repositories/Training/PassedRepository.ts index 0853a4267..575fd9371 100644 --- a/server/src/repositories/Training/PassedRepository.ts +++ b/server/src/database/repositories/Training/PassedRepository.ts @@ -1,4 +1,4 @@ -import { knex } from "../../db/index.js"; +import { knex } from "../../knex/index.js"; export async function addPassedModule(userID: number, moduleID: number, passedDate: Date) { @@ -18,7 +18,7 @@ export async function purgeExpiredPassedModules(): Promise { return result.rows.length; } -export async function getPassedTrainingsDaysAgo(days: number): Promise<{email: string, moduleIds: number[], moduleNames: string[]}[]> { +export async function getPassedTrainingsDaysAgo(days: number): Promise<{ email: string, moduleIds: number[], moduleNames: string[] }[]> { const result = await knex.raw(` select CONCAT(u."ritUsername", '@rit.edu') as email, diff --git a/server/src/repositories/Training/SubmissionRepository.ts b/server/src/database/repositories/Training/SubmissionRepository.ts similarity index 88% rename from server/src/repositories/Training/SubmissionRepository.ts rename to server/src/database/repositories/Training/SubmissionRepository.ts index 427fbd99f..537cbf0a7 100644 --- a/server/src/repositories/Training/SubmissionRepository.ts +++ b/server/src/database/repositories/Training/SubmissionRepository.ts @@ -2,10 +2,10 @@ * DB operations endpoint for ModuleSubmissions table */ -import { knex } from "../../db/index.js"; -import { ModuleSubmissionRow } from "../../db/tables.js"; -import { EntityNotFound } from "../../EntityNotFound.js"; -import * as PassedRepo from "./PassedRepository.js"; +import { knex } from "../../knex/index.js"; +import { ModuleSubmissionRow } from "../../knex/tables.js"; +import { EntityNotFound } from "../../../EntityNotFound.js"; +import * as PassedRepo from "./PassedRepository.js"; /** * Create a Module SUbmission and append it to the table @@ -135,7 +135,7 @@ export async function getFailedSubmissionsTodayByModuleAndUser(moduleID: number, today.setHours(0); today.setMinutes(0); today.setSeconds(0) - return await knex("ModuleSubmissions").select().where({moduleID, makerID: userID, passed: false}).andWhere("submissionDate", ">=", today); + return await knex("ModuleSubmissions").select().where({ moduleID, makerID: userID, passed: false }).andWhere("submissionDate", ">=", today); } /** @@ -147,8 +147,8 @@ export async function getFailedSubmissionsTodayByModuleAndUser(moduleID: number, export async function getPassingSubmission(moduleID: number, userID: number): Promise { var today = new Date(); const submission = await knex("ModuleSubmissions").select() - .where({moduleID, makerID: userID, passed: true}).andWhere("submissionDate", "<=", today).andWhere("expirationDate", ">", today ) - .orderBy("submissionDate", "desc") - .first(); + .where({ moduleID, makerID: userID, passed: true }).andWhere("submissionDate", "<=", today).andWhere("expirationDate", ">", today) + .orderBy("submissionDate", "desc") + .first(); return submission; } \ No newline at end of file diff --git a/server/src/repositories/Training/TrainingHoldsRespository.ts b/server/src/database/repositories/Training/TrainingHoldsRespository.ts similarity index 80% rename from server/src/repositories/Training/TrainingHoldsRespository.ts rename to server/src/database/repositories/Training/TrainingHoldsRespository.ts index 75ec9f840..fdb1931b6 100644 --- a/server/src/repositories/Training/TrainingHoldsRespository.ts +++ b/server/src/database/repositories/Training/TrainingHoldsRespository.ts @@ -3,8 +3,8 @@ * DB Operations for Training Holds */ -import { knex } from "../../db/index.js"; -import { TrainingHoldsRow } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { TrainingHoldsRow } from "../../knex/tables.js"; /** * Fetch Training Holds @@ -20,7 +20,7 @@ export async function getTrainingHolds(): Promise { * @returns all matching Training Holds */ export async function getTrainingHoldsByUser(userID: number): Promise { - return await knex("TrainingHolds").select().where({userID}).andWhere("expires", ">=", knex.fn.now()); + return await knex("TrainingHolds").select().where({ userID }).andWhere("expires", ">=", knex.fn.now()); } /** @@ -30,7 +30,7 @@ export async function getTrainingHoldsByUser(userID: number): Promise { - return await knex("TrainingHolds").select().where({userID, moduleID}).andWhere("expires", ">=", knex.fn.now()).first(); + return await knex("TrainingHolds").select().where({ userID, moduleID }).andWhere("expires", ">=", knex.fn.now()).first(); } /** @@ -39,7 +39,7 @@ export async function getTrainingHoldByUserForModule(userID: number, moduleID: n * @returns Training Hold or undefined if ID not exist */ export async function getTrainingHoldByID(id: number): Promise { - return await knex("TrainingHolds").select().where({id}).first(); + return await knex("TrainingHolds").select().where({ id }).first(); } /** @@ -52,12 +52,12 @@ export async function getTrainingHoldByID(id: number): Promise { if (!expires) { expires = new Date(); - expires.setDate(expires.getDate()+1); + expires.setDate(expires.getDate() + 1); expires.setHours(0); expires.setMinutes(0); expires.setSeconds(0); } - await knex("TrainingHolds").insert({userID, moduleID, expires}); + await knex("TrainingHolds").insert({ userID, moduleID, expires }); return true; } @@ -76,7 +76,7 @@ export async function deleteExpiredTrainingHolds(): Promise { * @returns true */ export async function deleteTrainingHold(id: number): Promise { - await knex("TrainingHolds").delete().where({id}); + await knex("TrainingHolds").delete().where({ id }); return true; } diff --git a/server/src/repositories/Users/OrganizationRepository.ts b/server/src/database/repositories/Users/OrganizationRepository.ts similarity index 96% rename from server/src/repositories/Users/OrganizationRepository.ts rename to server/src/database/repositories/Users/OrganizationRepository.ts index cd5ec46a5..0c2ae6945 100644 --- a/server/src/repositories/Users/OrganizationRepository.ts +++ b/server/src/database/repositories/Users/OrganizationRepository.ts @@ -1,14 +1,14 @@ import * as CurrencyAccountRepo from "../Currency/CurrencyAccountsRepository.js" -import { knex } from "../../db/index.js"; +import { knex } from "../../knex/index.js"; import { GraphQLError } from "graphql"; -import { OrganizationsRow } from "../../db/tables.js"; +import { OrganizationsRow } from "../../knex/tables.js"; export async function createOrganization(username: string, notes: string, displayname?: string): Promise { // Create the account for the organization const accountID = await CurrencyAccountRepo.createAccount(); const data = displayname ? { username: username, displayname: displayname, notes: notes } : { username: username, notes: notes }; - + try { var orgID = await knex("Organizations").insert({ ...data, accountID: accountID }).returning("*"); diff --git a/server/src/repositories/Users/SessionRepository.ts b/server/src/database/repositories/Users/SessionRepository.ts similarity index 81% rename from server/src/repositories/Users/SessionRepository.ts rename to server/src/database/repositories/Users/SessionRepository.ts index 3e6b013ca..a45f6b691 100644 --- a/server/src/repositories/Users/SessionRepository.ts +++ b/server/src/database/repositories/Users/SessionRepository.ts @@ -1,5 +1,5 @@ -import { knex } from "../../db/index.js"; -import { ExpressSessionRow } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { ExpressSessionRow } from "../../knex/tables.js"; export async function getSession(sid: string): Promise { diff --git a/server/src/repositories/Users/TempCardRepository.ts b/server/src/database/repositories/Users/TempCardRepository.ts similarity index 91% rename from server/src/repositories/Users/TempCardRepository.ts rename to server/src/database/repositories/Users/TempCardRepository.ts index df382c47b..3f9c9af6f 100644 --- a/server/src/repositories/Users/TempCardRepository.ts +++ b/server/src/database/repositories/Users/TempCardRepository.ts @@ -1,6 +1,6 @@ import { GraphQLError } from "graphql"; -import { knex } from "../../db/index.js"; -import { TempCardRow, UserRow } from "../../db/tables.js"; +import { knex } from "../../knex/index.js"; +import { TempCardRow, UserRow } from "../../knex/tables.js"; export async function IssueCard(userID: number, cardTagID: string): Promise { return await knex("TemporaryCards").insert({ userID: userID, cardTagID: cardTagID }); diff --git a/server/src/repositories/Users/UserRepository.ts b/server/src/database/repositories/Users/UserRepository.ts similarity index 98% rename from server/src/repositories/Users/UserRepository.ts rename to server/src/database/repositories/Users/UserRepository.ts index d2aa1b36c..dc756fe0f 100644 --- a/server/src/repositories/Users/UserRepository.ts +++ b/server/src/database/repositories/Users/UserRepository.ts @@ -2,10 +2,10 @@ * DB operations endpoint for Users table */ -import { knex } from "../../db/index.js"; +import { knex } from "../../knex/index.js"; import { createUnassocaitedAuditLog } from "../AuditLogs/AuditLogRepository.js"; -import { EntityNotFound } from "../../EntityNotFound.js"; -import { UserRow } from "../../db/tables.js"; +import { EntityNotFound } from "../../../EntityNotFound.js"; +import { UserRow } from "../../knex/tables.js"; import * as CurrencyAccountRepo from "../../repositories/Currency/CurrencyAccountsRepository.js"; import * as TempCardRepo from "./TempCardRepository.js"; diff --git a/server/src/repositories/tempRolesRepo.ts b/server/src/database/repositories/tempRolesRepo.ts similarity index 73% rename from server/src/repositories/tempRolesRepo.ts rename to server/src/database/repositories/tempRolesRepo.ts index dcf0dc886..9110d94bb 100644 --- a/server/src/repositories/tempRolesRepo.ts +++ b/server/src/database/repositories/tempRolesRepo.ts @@ -1,4 +1,4 @@ -import { knex } from "../db/index.js"; +import { knex } from "../knex/index.js"; diff --git a/server/src/resolvers/accessChecksResolver.ts b/server/src/graphql/resolvers/accessChecksResolver.ts similarity index 91% rename from server/src/resolvers/accessChecksResolver.ts rename to server/src/graphql/resolvers/accessChecksResolver.ts index 668264794..ba59fdc6f 100644 --- a/server/src/resolvers/accessChecksResolver.ts +++ b/server/src/graphql/resolvers/accessChecksResolver.ts @@ -3,15 +3,15 @@ * GraphQL Endpoint Implementations for Access Checks */ -import * as EquipmentRepo from "../repositories/Equipment/EquipmentRepository.js"; -import * as RoomRepo from "../repositories/Rooms/RoomRepository.js"; -import { ApolloContext } from "../context.js"; -import { accessCheckExists, createAccessCheck, getAccessCheckByID, getAccessChecks, getAccessChecksByApproved, getAccessChecksByUserID, purgeUnapprovedAccessChecks, setAccessCheckApproval } from "../repositories/Equipment/AccessChecksRepository.js"; -import { createAuditLog, createUnassocaitedAuditLog } from "../repositories/AuditLogs/AuditLogRepository.js"; -import { getUserByID, getUsersFullName } from "../repositories/Users/UserRepository.js"; +import * as EquipmentRepo from "../../database/repositories/Equipment/EquipmentRepository.js"; +import * as RoomRepo from "../../database/repositories/Rooms/RoomRepository.js"; +import { ApolloContext } from "../../context.js"; +import { accessCheckExists, createAccessCheck, getAccessCheckByID, getAccessChecks, getAccessChecksByApproved, getAccessChecksByUserID, purgeUnapprovedAccessChecks, setAccessCheckApproval } from "../../database/repositories/Equipment/AccessChecksRepository.js"; +import { createAuditLog, createUnassocaitedAuditLog } from "../../database/repositories/AuditLogs/AuditLogRepository.js"; +import { getUserByID, getUsersFullName } from "../../database/repositories/Users/UserRepository.js"; import { GraphQLError } from "graphql"; -import { AccessCheckRow } from "../db/tables.js"; -import { Equipment } from "../models/equipment/Equipment.js"; +import { AccessCheckRow } from "../../database/knex/tables.js"; +import { Equipment } from "../../database/models/equipment/Equipment.js"; const AccessChecksResolver = { AccessCheck: { diff --git a/server/src/resolvers/announcementsResolver.ts b/server/src/graphql/resolvers/announcementsResolver.ts similarity index 83% rename from server/src/resolvers/announcementsResolver.ts rename to server/src/graphql/resolvers/announcementsResolver.ts index d6edf0de7..f9d5afa29 100644 --- a/server/src/resolvers/announcementsResolver.ts +++ b/server/src/graphql/resolvers/announcementsResolver.ts @@ -3,8 +3,8 @@ * GraphQL Endpoint Implementations for Announcements */ -import { ApolloContext } from "../context.js"; -import { getAnnouncements, getAnnouncementByID, createAnnouncement, updateAnnouncement, deleteAnnouncement } from "../repositories/Announcements/AnnouncementsRepository.js"; +import { ApolloContext } from "../../context.js"; +import { getAnnouncements, getAnnouncementByID, createAnnouncement, updateAnnouncement, deleteAnnouncement } from "../../database/repositories/Announcements/AnnouncementsRepository.js"; const AnnouncementsResolver = { @@ -17,9 +17,9 @@ const AnnouncementsResolver = { getAllAnnouncements: async ( _parent: any, _args: any, - ) => { - return await getAnnouncements(); - }, + ) => { + return await getAnnouncements(); + }, /** * Fetch Announcement by ID @@ -47,7 +47,7 @@ const AnnouncementsResolver = { */ createAnnouncement: async ( _parent: any, - args: {title: string, description: string, linkText: string, linkUrl: string}, + args: { title: string, description: string, linkText: string, linkUrl: string }, { isAdmin }: ApolloContext) => isAdmin(async () => { return await createAnnouncement(args); @@ -65,7 +65,7 @@ const AnnouncementsResolver = { */ updateAnnouncement: async ( _parent: any, - args: {id: number, title: string, description: string, linkText: string, linkUrl: string}, + args: { id: number, title: string, description: string, linkText: string, linkUrl: string }, { isAdmin }: ApolloContext) => isAdmin(async () => { return await updateAnnouncement(args); @@ -79,7 +79,7 @@ const AnnouncementsResolver = { */ deleteAnnouncement: async ( _parent: any, - args: {id: number}, + args: { id: number }, { isAdmin }: ApolloContext) => isAdmin(async () => { return await deleteAnnouncement(args.id); diff --git a/server/src/resolvers/auditLogsResolver.ts b/server/src/graphql/resolvers/auditLogsResolver.ts similarity index 91% rename from server/src/resolvers/auditLogsResolver.ts rename to server/src/graphql/resolvers/auditLogsResolver.ts index f0d7d8497..5d9dfcb81 100644 --- a/server/src/resolvers/auditLogsResolver.ts +++ b/server/src/graphql/resolvers/auditLogsResolver.ts @@ -3,8 +3,8 @@ * GraphQL Endpoint Implementations for Audit Logs */ -import * as AuditLogRepo from "../repositories/AuditLogs/AuditLogRepository.js"; -import { ApolloContext } from "../context.js"; +import * as AuditLogRepo from "../../database/repositories/AuditLogs/AuditLogRepository.js"; +import { ApolloContext } from "../../context.js"; const AuditLogResolvers = { Query: { diff --git a/server/src/resolvers/cartResolver.ts b/server/src/graphql/resolvers/cartResolver.ts similarity index 91% rename from server/src/resolvers/cartResolver.ts rename to server/src/graphql/resolvers/cartResolver.ts index ba058ff66..f9ddff5bd 100644 --- a/server/src/resolvers/cartResolver.ts +++ b/server/src/graphql/resolvers/cartResolver.ts @@ -1,10 +1,10 @@ import { GraphQLError } from "graphql"; -import { ApolloContext } from "../context.js"; -import { InventoryCartsRow } from "../db/tables.js"; -import { clearItemsFromCart, deleteInventoryCart, getInventoryCartByID, getInventoryCarts, getInventoryCartsByMakerspace, getItemsInCart, subtractItemFromCart } from "../repositories/Store/InventoryCartsRepository.js"; -import { addItemsAmounts, getItemById } from "../repositories/Store/InventoryRepository.js"; -import { getUserByID } from "../repositories/Users/UserRepository.js"; -import { getMakerspaceByID } from "../repositories/Makerspaces/MakerspaceRespository.js"; +import { ApolloContext } from "../../context.js"; +import { InventoryCartsRow } from "../../database/knex/tables.js"; +import { clearItemsFromCart, deleteInventoryCart, getInventoryCartByID, getInventoryCarts, getInventoryCartsByMakerspace, getItemsInCart, subtractItemFromCart } from "../../database/repositories/Store/InventoryCartsRepository.js"; +import { addItemsAmounts, getItemById } from "../../database/repositories/Store/InventoryRepository.js"; +import { getUserByID } from "../../database/repositories/Users/UserRepository.js"; +import { getMakerspaceByID } from "../../database/repositories/Makerspaces/MakerspaceRespository.js"; export const CartResolver = { InventoryCart: { diff --git a/server/src/resolvers/currencyAccountResolver.ts b/server/src/graphql/resolvers/currencyAccountResolver.ts similarity index 83% rename from server/src/resolvers/currencyAccountResolver.ts rename to server/src/graphql/resolvers/currencyAccountResolver.ts index cd075bfce..5db9f8cc9 100644 --- a/server/src/resolvers/currencyAccountResolver.ts +++ b/server/src/graphql/resolvers/currencyAccountResolver.ts @@ -1,7 +1,7 @@ -import { ApolloContext } from "../context.js"; -import { CurrencyAccountsRow } from "../db/tables.js"; -import { send_cc_balance_change_email } from "../integrations/email/email.js"; -import * as CurrencyAccountRepo from "../repositories/Currency/CurrencyAccountsRepository.js" +import { ApolloContext } from "../../context.js"; +import { CurrencyAccountsRow } from "../../database/knex/tables.js"; +import { send_cc_balance_change_email } from "../../integrations/email/email.js"; +import * as CurrencyAccountRepo from "../../database/repositories/Currency/CurrencyAccountsRepository.js" export const CurrencyAccountResolvers = { CurrencyAccount: { diff --git a/server/src/resolvers/currencyLedgerResolver.ts b/server/src/graphql/resolvers/currencyLedgerResolver.ts similarity index 69% rename from server/src/resolvers/currencyLedgerResolver.ts rename to server/src/graphql/resolvers/currencyLedgerResolver.ts index d83a08c50..48a7406ef 100644 --- a/server/src/resolvers/currencyLedgerResolver.ts +++ b/server/src/graphql/resolvers/currencyLedgerResolver.ts @@ -1,5 +1,5 @@ -import { ApolloContext } from "../context.js" -import * as CurrencyLedgerRepo from "../repositories/Currency/CurrencyLedgerRepository.js" +import { ApolloContext } from "../../context.js" +import * as CurrencyLedgerRepo from "../../database/repositories/Currency/CurrencyLedgerRepository.js" export const CurrencyLedgerResolvers = { diff --git a/server/src/resolvers/customUrlResolver.ts b/server/src/graphql/resolvers/customUrlResolver.ts similarity index 88% rename from server/src/resolvers/customUrlResolver.ts rename to server/src/graphql/resolvers/customUrlResolver.ts index c29fb7b48..63247dd90 100644 --- a/server/src/resolvers/customUrlResolver.ts +++ b/server/src/graphql/resolvers/customUrlResolver.ts @@ -1,5 +1,5 @@ -import { ApolloContext } from "../context.js"; -import { createCustomUrl, deleteCustomUrl, getCustomUrl, getCustomUrlById, getCustomUrls, updateCustomUrl } from "../repositories/Links/customUrlRepository.js"; +import { ApolloContext } from "../../context.js"; +import { createCustomUrl, deleteCustomUrl, getCustomUrl, getCustomUrlById, getCustomUrls, updateCustomUrl } from "../../database/repositories/Links/customUrlRepository.js"; import { CustomUrlInput } from "../schemas/customUrlSchema.js"; const CustomUrlResolver = { @@ -32,7 +32,7 @@ const CustomUrlResolver = { args: { shortUrl: string, longUrl: string }, { isAdmin }: ApolloContext) => isAdmin(async () => { - const res = await createCustomUrl(args.shortUrl, args.longUrl); + const res = await createCustomUrl(args.shortUrl, args.longUrl); return res; }), diff --git a/server/src/resolvers/dataPointResolver.ts b/server/src/graphql/resolvers/dataPointResolver.ts similarity index 93% rename from server/src/resolvers/dataPointResolver.ts rename to server/src/graphql/resolvers/dataPointResolver.ts index f6afc412d..f07e90fcc 100644 --- a/server/src/resolvers/dataPointResolver.ts +++ b/server/src/graphql/resolvers/dataPointResolver.ts @@ -3,8 +3,8 @@ * GraphQL Endpoint Implementations for Data Points (misc integer data) */ -import { ApolloContext } from "../context.js"; -import { getDataPointByID, incrementDataPointValue, setDataPointValue } from "../repositories/DataPoints/DataPointsRepository.js"; +import { ApolloContext } from "../../context.js"; +import { getDataPointByID, incrementDataPointValue, setDataPointValue } from "../../database/repositories/DataPoints/DataPointsRepository.js"; const DataPointsResolver = { Query: { diff --git a/server/src/resolvers/deviceResolver.ts b/server/src/graphql/resolvers/deviceResolver.ts similarity index 90% rename from server/src/resolvers/deviceResolver.ts rename to server/src/graphql/resolvers/deviceResolver.ts index 62c692a9e..65149468e 100644 --- a/server/src/resolvers/deviceResolver.ts +++ b/server/src/graphql/resolvers/deviceResolver.ts @@ -1,18 +1,18 @@ -import { ApolloContext } from "../context.js"; -import { AccessControllerRow, AccessControllerState, CoreRow, DispenserRow } from "../db/tables.js"; -import * as DeviceRepo from "../repositories/Devices/DeviceRepository.js"; -import * as ACRepo from "../repositories/Devices/AccessControllerRepository.js"; -import * as InstanceRepo from "../repositories/Equipment/EquipmentInstancesRepository.js"; -import * as UserRepo from "../repositories/Users/UserRepository.js"; -import * as CoreRepo from "../repositories/Devices/CoreRepository.js"; -import * as DispenserRepo from "../repositories/Devices/DispenserRepository.js"; -import * as EquipmentRepo from "../repositories/Equipment/EquipmentRepository.js"; -import * as AuditLogRepo from "../repositories/AuditLogs/AuditLogRepository.js"; -import { WSACSServerUnprompted } from "../models/api/WSACS/WSACSFormats.js"; -import { EntityNotFound } from "../EntityNotFound.js"; -import WSACSController from "../models/api/WSACS/WSACSController.js"; -import { ACSOrchestrator } from "../models/api/ACSOrchestrator.js"; -import { CoreActions, CoreFlags } from "../models/api/ACSFormats.js"; +import { ApolloContext } from "../../context.js"; +import { AccessControllerRow, AccessControllerState, CoreRow, DispenserRow } from "../../database/knex/tables.js"; +import * as DeviceRepo from "../../database/repositories/Devices/DeviceRepository.js"; +import * as ACRepo from "../../database/repositories/Devices/AccessControllerRepository.js"; +import * as InstanceRepo from "../../database/repositories/Equipment/EquipmentInstancesRepository.js"; +import * as UserRepo from "../../database/repositories/Users/UserRepository.js"; +import * as CoreRepo from "../../database/repositories/Devices/CoreRepository.js"; +import * as DispenserRepo from "../../database/repositories/Devices/DispenserRepository.js"; +import * as EquipmentRepo from "../../database/repositories/Equipment/EquipmentRepository.js"; +import * as AuditLogRepo from "../../database/repositories/AuditLogs/AuditLogRepository.js"; +import { WSACSServerUnprompted } from "../../database/models/api/WSACS/WSACSFormats.js"; +import { EntityNotFound } from "../../EntityNotFound.js"; +import WSACSController from "../../database/models/api/WSACS/WSACSController.js"; +import { ACSOrchestrator } from "../../database/models/api/ACSOrchestrator.js"; +import { CoreActions, CoreFlags } from "../../database/models/api/ACSFormats.js"; import { GraphQLError } from "graphql"; const DeviceResolver = { diff --git a/server/src/resolvers/equipmentInstanceResolver.ts b/server/src/graphql/resolvers/equipmentInstanceResolver.ts similarity index 91% rename from server/src/resolvers/equipmentInstanceResolver.ts rename to server/src/graphql/resolvers/equipmentInstanceResolver.ts index b3872bda9..73c51e273 100644 --- a/server/src/resolvers/equipmentInstanceResolver.ts +++ b/server/src/graphql/resolvers/equipmentInstanceResolver.ts @@ -1,13 +1,13 @@ -import * as EquipmentRepo from "../repositories/Equipment/EquipmentRepository.js"; -import * as InstanceRepo from "../repositories/Equipment/EquipmentInstancesRepository.js"; -import * as RoomRepo from "../repositories/Rooms/RoomRepository.js"; -import * as ACRepo from "../repositories/Devices/AccessControllerRepository.js"; -import { ApolloContext } from "../context.js"; -import { EquipmentInstancesRow } from "../db/tables.js"; -import { createInstance, deleteInstance, getInstanceByID, getInstancesByEquipment, setInstanceName, setInstanceStatus } from "../repositories/Equipment/EquipmentInstancesRepository.js"; -import { createUnassocaitedAuditLog } from "../repositories/AuditLogs/AuditLogRepository.js"; +import * as EquipmentRepo from "../../database/repositories/Equipment/EquipmentRepository.js"; +import * as InstanceRepo from "../../database/repositories/Equipment/EquipmentInstancesRepository.js"; +import * as RoomRepo from "../../database/repositories/Rooms/RoomRepository.js"; +import * as ACRepo from "../../database/repositories/Devices/AccessControllerRepository.js"; +import { ApolloContext } from "../../context.js"; +import { EquipmentInstancesRow } from "../../database/knex/tables.js"; +import { createInstance, deleteInstance, getInstanceByID, getInstancesByEquipment, setInstanceName, setInstanceStatus } from "../../database/repositories/Equipment/EquipmentInstancesRepository.js"; +import { createUnassocaitedAuditLog } from "../../database/repositories/AuditLogs/AuditLogRepository.js"; import { GraphQLError } from "graphql"; -import { getUsersFullName } from "../repositories/Users/UserRepository.js"; +import { getUsersFullName } from "../../database/repositories/Users/UserRepository.js"; const EquipmentInstanceResolver = { EquipmentInstance: { diff --git a/server/src/resolvers/equipmentResolver.ts b/server/src/graphql/resolvers/equipmentResolver.ts similarity index 90% rename from server/src/resolvers/equipmentResolver.ts rename to server/src/graphql/resolvers/equipmentResolver.ts index 461d783a2..561801898 100644 --- a/server/src/resolvers/equipmentResolver.ts +++ b/server/src/graphql/resolvers/equipmentResolver.ts @@ -3,16 +3,16 @@ * GraphQL Endpoint Implementations for Equipment */ -import * as EquipmentRepo from "../repositories/Equipment/EquipmentRepository.js"; -import * as EquipmentInstanceRepo from "../repositories/Equipment/EquipmentInstancesRepository.js"; -import * as RoomRepo from "../repositories/Rooms/RoomRepository.js"; -import * as ModuleRepo from "../repositories/Training/ModuleRepository.js" -import { ApolloContext, CurrentUser } from "../context.js"; -import { createUnassocaitedAuditLog } from "../repositories/AuditLogs/AuditLogRepository.js"; -import { getUsersFullName } from "../repositories/Users/UserRepository.js"; -import { AccessControllerState, EquipmentRow } from "../db/tables.js"; +import * as EquipmentRepo from "../../database/repositories/Equipment/EquipmentRepository.js"; +import * as EquipmentInstanceRepo from "../../database/repositories/Equipment/EquipmentInstancesRepository.js"; +import * as RoomRepo from "../../database/repositories/Rooms/RoomRepository.js"; +import * as ModuleRepo from "../../database/repositories/Training/ModuleRepository.js" +import { ApolloContext, CurrentUser } from "../../context.js"; +import { createUnassocaitedAuditLog } from "../../database/repositories/AuditLogs/AuditLogRepository.js"; +import { getUsersFullName } from "../../database/repositories/Users/UserRepository.js"; +import { AccessControllerState, EquipmentRow } from "../../database/knex/tables.js"; import { EquipmentInput } from "../schemas/equipmentSchema.js"; -import * as ACRepo from "../repositories/Devices/AccessControllerRepository.js"; +import * as ACRepo from "../../database/repositories/Devices/AccessControllerRepository.js"; import { GraphQLError } from "graphql"; diff --git a/server/src/resolvers/equipmentSessionsResolver.ts b/server/src/graphql/resolvers/equipmentSessionsResolver.ts similarity index 79% rename from server/src/resolvers/equipmentSessionsResolver.ts rename to server/src/graphql/resolvers/equipmentSessionsResolver.ts index 7fb030b12..833ab6071 100644 --- a/server/src/resolvers/equipmentSessionsResolver.ts +++ b/server/src/graphql/resolvers/equipmentSessionsResolver.ts @@ -3,12 +3,12 @@ * GraphQL endpoint implementations for EquipmentSessions */ -import * as EquipmentRepo from "../repositories/Equipment/EquipmentRepository.js"; -import { ApolloContext, CurrentUser } from "../context.js"; -import { getUserByID } from "../repositories/Users/UserRepository.js"; -import { getEquipmentSessions } from "../repositories/Equipment/EquipmentSessionsRepository.js"; -import { getRoomByID } from "../repositories/Rooms/RoomRepository.js"; -import { getMakerspaceByID } from "../repositories/Makerspaces/MakerspaceRespository.js"; +import * as EquipmentRepo from "../../database/repositories/Equipment/EquipmentRepository.js"; +import { ApolloContext, CurrentUser } from "../../context.js"; +import { getUserByID } from "../../database/repositories/Users/UserRepository.js"; +import { getEquipmentSessions } from "../../database/repositories/Equipment/EquipmentSessionsRepository.js"; +import { getRoomByID } from "../../database/repositories/Rooms/RoomRepository.js"; +import { getMakerspaceByID } from "../../database/repositories/Makerspaces/MakerspaceRespository.js"; const EquipmentSessionsResolver = { EquipmentSession: { diff --git a/server/src/resolvers/eventsResolver.ts b/server/src/graphql/resolvers/eventsResolver.ts similarity index 100% rename from server/src/resolvers/eventsResolver.ts rename to server/src/graphql/resolvers/eventsResolver.ts diff --git a/server/src/resolvers/holdsResolver.ts b/server/src/graphql/resolvers/holdsResolver.ts similarity index 81% rename from server/src/resolvers/holdsResolver.ts rename to server/src/graphql/resolvers/holdsResolver.ts index 91f5ee9d9..24a3f7bd9 100644 --- a/server/src/resolvers/holdsResolver.ts +++ b/server/src/graphql/resolvers/holdsResolver.ts @@ -1,10 +1,10 @@ -import { ApolloContext, CurrentUser } from "../context.js"; -import * as HoldsRepo from "../repositories/Holds/HoldsRepository.js"; -import * as UsersRepo from "../repositories/Users/UserRepository.js"; -import { createUnassocaitedAuditLog } from "../repositories/AuditLogs/AuditLogRepository.js"; -import { getUsersFullName } from "../repositories/Users/UserRepository.js"; -import { HoldRow } from "../db/tables.js"; -import { send_hold_placed_email } from "../integrations/email/email.js"; +import { ApolloContext, CurrentUser } from "../../context.js"; +import * as HoldsRepo from "../../database/repositories/Holds/HoldsRepository.js"; +import * as UsersRepo from "../../database/repositories/Users/UserRepository.js"; +import { createUnassocaitedAuditLog } from "../../database/repositories/AuditLogs/AuditLogRepository.js"; +import { getUsersFullName } from "../../database/repositories/Users/UserRepository.js"; +import { HoldRow } from "../../database/knex/tables.js"; +import { send_hold_placed_email } from "../../integrations/email/email.js"; const HoldsResolvers = { Hold: { diff --git a/server/src/resolvers/maintenanceTicketResolver.ts b/server/src/graphql/resolvers/maintenanceTicketResolver.ts similarity index 87% rename from server/src/resolvers/maintenanceTicketResolver.ts rename to server/src/graphql/resolvers/maintenanceTicketResolver.ts index b1eea9390..94f246d3d 100644 --- a/server/src/resolvers/maintenanceTicketResolver.ts +++ b/server/src/graphql/resolvers/maintenanceTicketResolver.ts @@ -1,12 +1,12 @@ -import { ApolloContext } from "../context.js" -import { MaintenanceTicketRow, MaintenanceTicketSeverity, MaintenanceTicketStatus, MaintenanceTicketType } from "../db/tables.js" -import * as MaintenanceTicketRepo from "../repositories/Equipment/MaintenanceTicketRepository.js" -import * as InstanceRepo from "../repositories/Equipment/EquipmentInstancesRepository.js" -import * as UserRepo from "../repositories/Users/UserRepository.js" -import * as AuditLogRepo from "../repositories/AuditLogs/AuditLogRepository.js" -import * as EquipmentRepo from "../repositories/Equipment/EquipmentRepository.js"; -import { notifyNewMaintenanceTicket } from "../integrations/slack/slack.js" -import { Equipment } from "../models/equipment/Equipment.js" +import { ApolloContext } from "../../context.js" +import { MaintenanceTicketRow, MaintenanceTicketSeverity, MaintenanceTicketStatus, MaintenanceTicketType } from "../../database/knex/tables.js" +import * as MaintenanceTicketRepo from "../../database/repositories/Equipment/MaintenanceTicketRepository.js" +import * as InstanceRepo from "../../database/repositories/Equipment/EquipmentInstancesRepository.js" +import * as UserRepo from "../../database/repositories/Users/UserRepository.js" +import * as AuditLogRepo from "../../database/repositories/AuditLogs/AuditLogRepository.js" +import * as EquipmentRepo from "../../database/repositories/Equipment/EquipmentRepository.js"; +import { notifyNewMaintenanceTicket } from "../../integrations/slack/slack.js" +import { Equipment } from "../../database/models/equipment/Equipment.js" const MaintenanceTicketResolver = { MaintenanceTicket: { diff --git a/server/src/resolvers/makerspaceHoursResolver.ts b/server/src/graphql/resolvers/makerspaceHoursResolver.ts similarity index 89% rename from server/src/resolvers/makerspaceHoursResolver.ts rename to server/src/graphql/resolvers/makerspaceHoursResolver.ts index d9dbe2345..9a9f55605 100644 --- a/server/src/resolvers/makerspaceHoursResolver.ts +++ b/server/src/graphql/resolvers/makerspaceHoursResolver.ts @@ -1,6 +1,6 @@ -import { ApolloContext } from "../context.js"; -import * as HoursRepo from "../repositories/Makerspaces/MakerspaceHoursRepository.js"; -import { DefaultHoursRow, SpecialHoursRow } from "../db/tables.js"; +import { ApolloContext } from "../../context.js"; +import * as HoursRepo from "../../database/repositories/Makerspaces/MakerspaceHoursRepository.js"; +import { DefaultHoursRow, SpecialHoursRow } from "../../database/knex/tables.js"; const MakerspaceHoursResolver = { diff --git a/server/src/resolvers/makerspaceResolver.ts b/server/src/graphql/resolvers/makerspaceResolver.ts similarity index 83% rename from server/src/resolvers/makerspaceResolver.ts rename to server/src/graphql/resolvers/makerspaceResolver.ts index 8cc5aaaab..2ea16f29a 100644 --- a/server/src/resolvers/makerspaceResolver.ts +++ b/server/src/graphql/resolvers/makerspaceResolver.ts @@ -1,15 +1,15 @@ -import { ApolloContext } from "../context.js"; -import { addTrainingToMakerspace, archiveMakerspace, createMakerspace, deleteMakerspace, getMakerspaceByID, getMakerspaces, getTrainingsByMakerspace, getValidStaff, removeTrainingFromMakerspace, updateMakerspace } from "../repositories/Makerspaces/MakerspaceRespository.js"; -import { MakerspaceRow } from "../db/tables.js"; -import { getRoomsByMakerspace } from "../repositories/Rooms/RoomRepository.js"; +import { ApolloContext } from "../../context.js"; +import { addTrainingToMakerspace, archiveMakerspace, createMakerspace, deleteMakerspace, getMakerspaceByID, getMakerspaces, getTrainingsByMakerspace, getValidStaff, removeTrainingFromMakerspace, updateMakerspace } from "../../database/repositories/Makerspaces/MakerspaceRespository.js"; +import { MakerspaceRow } from "../../database/knex/tables.js"; +import { getRoomsByMakerspace } from "../../database/repositories/Rooms/RoomRepository.js"; import { MakerspaceInput } from "../schemas/makerspacesSchema.js"; -import * as HoursRepo from "../repositories/Makerspaces/MakerspaceHoursRepository.js"; -import { createUnassocaitedAuditLog } from "../repositories/AuditLogs/AuditLogRepository.js"; -import { getUsersFullName } from "../repositories/Users/UserRepository.js"; -import { getItems, getItemsWhereStorefront } from "../repositories/Store/InventoryRepository.js"; -import * as DeviceRepo from "../repositories/Devices/DeviceRepository.js"; -import * as CoreRepo from "../repositories/Devices/CoreRepository.js"; -import * as DispenserRepo from "../repositories/Devices/DispenserRepository.js"; +import * as HoursRepo from "../../database/repositories/Makerspaces/MakerspaceHoursRepository.js"; +import { createUnassocaitedAuditLog } from "../../database/repositories/AuditLogs/AuditLogRepository.js"; +import { getUsersFullName } from "../../database/repositories/Users/UserRepository.js"; +import { getItems, getItemsWhereStorefront } from "../../database/repositories/Store/InventoryRepository.js"; +import * as DeviceRepo from "../../database/repositories/Devices/DeviceRepository.js"; +import * as CoreRepo from "../../database/repositories/Devices/CoreRepository.js"; +import * as DispenserRepo from "../../database/repositories/Devices/DispenserRepository.js"; const MakerspacesResolver = { Makerspace: { diff --git a/server/src/resolvers/organizationsResolver.ts b/server/src/graphql/resolvers/organizationsResolver.ts similarity index 82% rename from server/src/resolvers/organizationsResolver.ts rename to server/src/graphql/resolvers/organizationsResolver.ts index 1b6f67a9f..23a791125 100644 --- a/server/src/resolvers/organizationsResolver.ts +++ b/server/src/graphql/resolvers/organizationsResolver.ts @@ -1,9 +1,9 @@ -import { ApolloContext } from "../context.js"; -import { OrganizationsRow } from "../db/tables.js"; -import { createUnassocaitedAuditLog } from "../repositories/AuditLogs/AuditLogRepository.js"; -import * as OrgRepo from "../repositories/Users/OrganizationRepository.js"; -import * as CurrencyAccountRepo from "../repositories/Currency/CurrencyAccountsRepository.js" -import { getUsersFullName } from "../repositories/Users/UserRepository.js"; +import { ApolloContext } from "../../context.js"; +import { OrganizationsRow } from "../../database/knex/tables.js"; +import { createUnassocaitedAuditLog } from "../../database/repositories/AuditLogs/AuditLogRepository.js"; +import * as OrgRepo from "../../database/repositories/Users/OrganizationRepository.js"; +import * as CurrencyAccountRepo from "../../database/repositories/Currency/CurrencyAccountsRepository.js" +import { getUsersFullName } from "../../database/repositories/Users/UserRepository.js"; export const OrganizationResolver = { diff --git a/server/src/resolvers/permissionResolver.ts b/server/src/graphql/resolvers/permissionResolver.ts similarity index 89% rename from server/src/resolvers/permissionResolver.ts rename to server/src/graphql/resolvers/permissionResolver.ts index 689ac8290..d33bf9a0f 100644 --- a/server/src/resolvers/permissionResolver.ts +++ b/server/src/graphql/resolvers/permissionResolver.ts @@ -3,7 +3,7 @@ * GraphQL endpoint implmenentations for Permissions */ -import { ApolloContext, CurrentUser } from "../context.js"; +import { ApolloContext, CurrentUser } from "../../context.js"; const PermissionResolver = { Query: { diff --git a/server/src/resolvers/reservationResolver.ts b/server/src/graphql/resolvers/reservationResolver.ts similarity index 86% rename from server/src/resolvers/reservationResolver.ts rename to server/src/graphql/resolvers/reservationResolver.ts index 85cccecfb..1b1a30425 100644 --- a/server/src/resolvers/reservationResolver.ts +++ b/server/src/graphql/resolvers/reservationResolver.ts @@ -1,12 +1,12 @@ -import { ApolloContext } from "../context.js" -import { ReservationRow } from "../db/tables.js"; -import * as ReservationRepo from "../repositories/Equipment/ReservationRepository.js" -import * as EquipmentRepo from "../repositories/Equipment/EquipmentRepository.js"; -import * as UserRepo from "../repositories/Users/UserRepository.js"; -import * as RoomRepo from "../repositories/Rooms/RoomRepository.js"; -import * as AccessCheckRepo from "../repositories/Equipment/AccessChecksRepository.js" +import { ApolloContext } from "../../context.js" +import { ReservationRow } from "../../database/knex/tables.js"; +import * as ReservationRepo from "../../database/repositories/Equipment/ReservationRepository.js" +import * as EquipmentRepo from "../../database/repositories/Equipment/EquipmentRepository.js"; +import * as UserRepo from "../../database/repositories/Users/UserRepository.js"; +import * as RoomRepo from "../../database/repositories/Rooms/RoomRepository.js"; +import * as AccessCheckRepo from "../../database/repositories/Equipment/AccessChecksRepository.js" import { GraphQLError } from "graphql"; -import { notifyReservationRequest } from "../integrations/slack/slack.js"; +import { notifyReservationRequest } from "../../integrations/slack/slack.js"; const ReservationResolver = { Reservation: { diff --git a/server/src/resolvers/restrictionResolver.ts b/server/src/graphql/resolvers/restrictionResolver.ts similarity index 77% rename from server/src/resolvers/restrictionResolver.ts rename to server/src/graphql/resolvers/restrictionResolver.ts index 6f10c3d56..a2535b8e9 100644 --- a/server/src/resolvers/restrictionResolver.ts +++ b/server/src/graphql/resolvers/restrictionResolver.ts @@ -1,8 +1,8 @@ -import { ApolloContext, CurrentUser } from "../context.js"; -import { RestrictionRow } from "../db/tables.js"; -import * as UsersRepo from "../repositories/Users/UserRepository.js"; -import * as RestrictionRepository from "../repositories/Restrictions/RestrictionsRepository.js"; -import * as MakerspaceRepo from "../repositories/Makerspaces/MakerspaceRespository.js"; +import { ApolloContext, CurrentUser } from "../../context.js"; +import { RestrictionRow } from "../../database/knex/tables.js"; +import * as UsersRepo from "../../database/repositories/Users/UserRepository.js"; +import * as RestrictionRepository from "../../database/repositories/Restrictions/RestrictionsRepository.js"; +import * as MakerspaceRepo from "../../database/repositories/Makerspaces/MakerspaceRespository.js"; export const RestrictionResolver = { Restriction: { diff --git a/server/src/resolvers/roomsResolver.ts b/server/src/graphql/resolvers/roomsResolver.ts similarity index 90% rename from server/src/resolvers/roomsResolver.ts rename to server/src/graphql/resolvers/roomsResolver.ts index a7f29ac41..8d60ef8f6 100644 --- a/server/src/resolvers/roomsResolver.ts +++ b/server/src/graphql/resolvers/roomsResolver.ts @@ -1,12 +1,12 @@ -import * as RoomRepo from "../repositories/Rooms/RoomRepository.js"; -import * as EquipmentRepo from "../repositories/Equipment/EquipmentRepository.js"; -import * as UserRepo from "../repositories/Users/UserRepository.js"; -import { createUnassocaitedAuditLog } from "../repositories/AuditLogs/AuditLogRepository.js"; -import { getUsersFullName } from "../repositories/Users/UserRepository.js"; +import * as RoomRepo from "../../database/repositories/Rooms/RoomRepository.js"; +import * as EquipmentRepo from "../../database/repositories/Equipment/EquipmentRepository.js"; +import * as UserRepo from "../../database/repositories/Users/UserRepository.js"; +import { createUnassocaitedAuditLog } from "../../database/repositories/AuditLogs/AuditLogRepository.js"; +import { getUsersFullName } from "../../database/repositories/Users/UserRepository.js"; import assert from "assert"; -import { Room } from "../models/rooms/room.js"; -import { ApolloContext, CurrentUser } from "../context.js"; -import * as MakerspaceRepo from "../repositories/Makerspaces/MakerspaceRespository.js"; +import { Room } from "../../database/models/rooms/room.js"; +import { ApolloContext, CurrentUser } from "../../context.js"; +import * as MakerspaceRepo from "../../database/repositories/Makerspaces/MakerspaceRespository.js"; import { GraphQLError } from "graphql"; const RoomResolvers = { diff --git a/server/src/resolvers/storeFrontResolver.ts b/server/src/graphql/resolvers/storeFrontResolver.ts similarity index 96% rename from server/src/resolvers/storeFrontResolver.ts rename to server/src/graphql/resolvers/storeFrontResolver.ts index 088b262b1..547b3eefc 100644 --- a/server/src/resolvers/storeFrontResolver.ts +++ b/server/src/graphql/resolvers/storeFrontResolver.ts @@ -1,13 +1,13 @@ -import { ApolloContext } from "../context.js"; -import * as InventoryRepo from "../repositories/Store/InventoryRepository.js"; +import { ApolloContext } from "../../context.js"; +import * as InventoryRepo from "../../database/repositories/Store/InventoryRepository.js"; import { InventoryItemInput } from "../schemas/storeFrontSchema.js"; -import { deleteInventoryItem } from "../repositories/Store/InventoryRepository.js"; -import { createLedger, deleteLedger, getLedgers } from "../repositories/Store/InventoryLedgerRepository.js"; +import { deleteInventoryItem } from "../../database/repositories/Store/InventoryRepository.js"; +import { createLedger, deleteLedger, getLedgers } from "../../database/repositories/Store/InventoryLedgerRepository.js"; import { GraphQLError } from "graphql"; -import { getUserByID, getUserByIDOrUndefined } from "../repositories/Users/UserRepository.js"; -import { notifyInventoryItemBelowThreshold } from "../integrations/slack/slack.js"; -import { InventoryItemRow, InventoryLedgerRow } from "../db/tables.js"; -import { getMakerspaceByID } from "../repositories/Makerspaces/MakerspaceRespository.js"; +import { getUserByID, getUserByIDOrUndefined } from "../../database/repositories/Users/UserRepository.js"; +import { notifyInventoryItemBelowThreshold } from "../../integrations/slack/slack.js"; +import { InventoryItemRow, InventoryLedgerRow } from "../../database/knex/tables.js"; +import { getMakerspaceByID } from "../../database/repositories/Makerspaces/MakerspaceRespository.js"; const StorefrontResolvers = { InventoryItem: { diff --git a/server/src/resolvers/termsResolver.ts b/server/src/graphql/resolvers/termsResolver.ts similarity index 72% rename from server/src/resolvers/termsResolver.ts rename to server/src/graphql/resolvers/termsResolver.ts index 27a564da7..ea4fccce8 100644 --- a/server/src/resolvers/termsResolver.ts +++ b/server/src/graphql/resolvers/termsResolver.ts @@ -3,15 +3,15 @@ * GraphQL Endpoint Implementations for the Terms value of the TextFields table */ -import { ApolloContext } from "../context.js"; -import { getTerms, setTerms } from "../repositories/TextItems/TermsRepository.js"; +import { ApolloContext } from "../../context.js"; +import { getTerms, setTerms } from "../../database/repositories/TextItems/TermsRepository.js"; const TermsResolver = { Query: { getTerms: async ( _parent: any, _args: any) => - (await getTerms())?.value + (await getTerms())?.value }, Mutation: { diff --git a/server/src/resolvers/themeResolver.ts b/server/src/graphql/resolvers/themeResolver.ts similarity index 90% rename from server/src/resolvers/themeResolver.ts rename to server/src/graphql/resolvers/themeResolver.ts index 88db9ce09..06c28c7d9 100644 --- a/server/src/resolvers/themeResolver.ts +++ b/server/src/graphql/resolvers/themeResolver.ts @@ -1,6 +1,6 @@ -import { ApolloContext } from "../context.js"; -import { ThemeRow } from "../db/tables.js"; -import * as ThemeRepo from "../repositories/SiteSettings/ThemesRepository.js"; +import { ApolloContext } from "../../context.js"; +import { ThemeRow } from "../../database/knex/tables.js"; +import * as ThemeRepo from "../../database/repositories/SiteSettings/ThemesRepository.js"; const ThemeResolver = { Theme: { diff --git a/server/src/resolvers/toolItemResolver.ts b/server/src/graphql/resolvers/toolItemResolver.ts similarity index 95% rename from server/src/resolvers/toolItemResolver.ts rename to server/src/graphql/resolvers/toolItemResolver.ts index 8b3fa1051..13c93bbd3 100644 --- a/server/src/resolvers/toolItemResolver.ts +++ b/server/src/graphql/resolvers/toolItemResolver.ts @@ -3,16 +3,16 @@ * GraphQL Endpoint Implementations for ToolItemInstances and ToolItemTypes */ -import { ApolloContext } from "../context.js"; -import { ToolItemInstancesRow, ToolItemTypesRow } from "../db/tables.js"; -import { borrowItem, createToolItemInstance, deleteToolItemInstance, getToolItemInstanceByID, getToolItemInstances, getToolItemInstancesByBorrower, getToolItemInstancesByType, returnItem, updateToolItemInstance } from "../repositories/Store/ToolItemInstancesRepository.js"; -import { createToolItemType, deleteToolItemType, getToolItemTypeByID, getToolItemTypes, getToolItemTypesWhereAllowCheckout, updateToolItemType } from "../repositories/Store/ToolItemTypesRepository.js"; -import { getUserByID, getUsersFullName } from "../repositories/Users/UserRepository.js"; +import { ApolloContext } from "../../context.js"; +import { ToolItemInstancesRow, ToolItemTypesRow } from "../../database/knex/tables.js"; +import { borrowItem, createToolItemInstance, deleteToolItemInstance, getToolItemInstanceByID, getToolItemInstances, getToolItemInstancesByBorrower, getToolItemInstancesByType, returnItem, updateToolItemInstance } from "../../database/repositories/Store/ToolItemInstancesRepository.js"; +import { createToolItemType, deleteToolItemType, getToolItemTypeByID, getToolItemTypes, getToolItemTypesWhereAllowCheckout, updateToolItemType } from "../../database/repositories/Store/ToolItemTypesRepository.js"; +import { getUserByID, getUsersFullName } from "../../database/repositories/Users/UserRepository.js"; import { ToolItemInstanceInput, ToolItemTypeInput } from "../schemas/toolItemsSchema.js"; -import { getRoomByID } from "../repositories/Rooms/RoomRepository.js"; -import { createUnassocaitedAuditLog } from "../repositories/AuditLogs/AuditLogRepository.js"; +import { getRoomByID } from "../../database/repositories/Rooms/RoomRepository.js"; +import { createUnassocaitedAuditLog } from "../../database/repositories/AuditLogs/AuditLogRepository.js"; import { GraphQLError } from "graphql"; -import { notifyToolItemMarked } from "../integrations/slack/slack.js"; +import { notifyToolItemMarked } from "../../integrations/slack/slack.js"; const ToolItemResolver = { ToolItemType: { diff --git a/server/src/resolvers/trainingHoldResolver.ts b/server/src/graphql/resolvers/trainingHoldResolver.ts similarity index 75% rename from server/src/resolvers/trainingHoldResolver.ts rename to server/src/graphql/resolvers/trainingHoldResolver.ts index 1a3e8c291..43946bd34 100644 --- a/server/src/resolvers/trainingHoldResolver.ts +++ b/server/src/graphql/resolvers/trainingHoldResolver.ts @@ -3,12 +3,12 @@ * GraphQL Endpoint Implementations for TrainingHolds */ -import { ApolloContext } from "../context.js"; -import { TrainingHoldsRow } from "../db/tables.js"; -import { createUnassocaitedAuditLog } from "../repositories/AuditLogs/AuditLogRepository.js"; -import { getModuleByID } from "../repositories/Training/ModuleRepository.js"; -import { deleteTrainingHold, getTrainingHoldByID } from "../repositories/Training/TrainingHoldsRespository.js"; -import { getUserByID, getUsersFullName } from "../repositories/Users/UserRepository.js"; +import { ApolloContext } from "../../context.js"; +import { TrainingHoldsRow } from "../../database/knex/tables.js"; +import { createUnassocaitedAuditLog } from "../../database/repositories/AuditLogs/AuditLogRepository.js"; +import { getModuleByID } from "../../database/repositories/Training/ModuleRepository.js"; +import { deleteTrainingHold, getTrainingHoldByID } from "../../database/repositories/Training/TrainingHoldsRespository.js"; +import { getUserByID, getUsersFullName } from "../../database/repositories/Users/UserRepository.js"; export const TrainingHoldResolver = { TrainingHold: { diff --git a/server/src/resolvers/trainingModuleResolver.ts b/server/src/graphql/resolvers/trainingModuleResolver.ts similarity index 95% rename from server/src/resolvers/trainingModuleResolver.ts rename to server/src/graphql/resolvers/trainingModuleResolver.ts index bb3c186bd..b22566e0c 100644 --- a/server/src/resolvers/trainingModuleResolver.ts +++ b/server/src/graphql/resolvers/trainingModuleResolver.ts @@ -3,18 +3,18 @@ * GraphQL Endpoint Implementations for TrainingModules, and executions for submitting to modules */ -import * as ModuleRepo from "../repositories/Training/ModuleRepository.js"; +import * as ModuleRepo from "../../database/repositories/Training/ModuleRepository.js"; import { AccessProgress, AnswerInput } from "../schemas/trainingModuleSchema.js"; -import { ApolloContext } from "../context.js"; -import { createUnassocaitedAuditLog } from "../repositories/AuditLogs/AuditLogRepository.js"; -import { getUsersFullName } from "../repositories/Users/UserRepository.js"; -import * as SubmissionRepo from "../repositories/Training/SubmissionRepository.js"; -import { MODULE_PASSING_THRESHOLD } from "../constants.js"; -import { TrainingModuleItem, TrainingModuleRow } from "../db/tables.js"; -import { accessCheckExists, createAccessCheck, hasApprovedAccessCheck } from "../repositories/Equipment/AccessChecksRepository.js"; -import { createTrainingHold, getTrainingHoldByUserForModule } from "../repositories/Training/TrainingHoldsRespository.js"; -import * as PassedModuleRepo from "../repositories/Training/PassedRepository.js"; -import * as TrainingModuleReo from "../repositories/Training/ModuleRepository.js"; +import { ApolloContext } from "../../context.js"; +import { createUnassocaitedAuditLog } from "../../database/repositories/AuditLogs/AuditLogRepository.js"; +import { getUsersFullName } from "../../database/repositories/Users/UserRepository.js"; +import * as SubmissionRepo from "../../database/repositories/Training/SubmissionRepository.js"; +import { MODULE_PASSING_THRESHOLD } from "../../constants.js"; +import { TrainingModuleItem, TrainingModuleRow } from "../../database/knex/tables.js"; +import { accessCheckExists, createAccessCheck, hasApprovedAccessCheck } from "../../database/repositories/Equipment/AccessChecksRepository.js"; +import { createTrainingHold, getTrainingHoldByUserForModule } from "../../database/repositories/Training/TrainingHoldsRespository.js"; +import * as PassedModuleRepo from "../../database/repositories/Training/PassedRepository.js"; +import * as TrainingModuleReo from "../../database/repositories/Training/ModuleRepository.js"; import { GraphQLError } from "graphql"; /** diff --git a/server/src/resolvers/trainingSubmissionResolver.ts b/server/src/graphql/resolvers/trainingSubmissionResolver.ts similarity index 95% rename from server/src/resolvers/trainingSubmissionResolver.ts rename to server/src/graphql/resolvers/trainingSubmissionResolver.ts index eaaa0cd54..d986cdf01 100644 --- a/server/src/resolvers/trainingSubmissionResolver.ts +++ b/server/src/graphql/resolvers/trainingSubmissionResolver.ts @@ -3,8 +3,8 @@ * GraphQL Endpoint Implementations for ModuleSubmissions */ -import * as SubmissionRepo from "../repositories/Training/SubmissionRepository.js"; -import { ApolloContext } from "../context.js"; +import * as SubmissionRepo from "../../database/repositories/Training/SubmissionRepository.js"; +import { ApolloContext } from "../../context.js"; const TrainingSubmissionResolvers = { Query: { diff --git a/server/src/resolvers/usersResolver.ts b/server/src/graphql/resolvers/usersResolver.ts similarity index 91% rename from server/src/resolvers/usersResolver.ts rename to server/src/graphql/resolvers/usersResolver.ts index 07f5642ea..4fbe34e04 100644 --- a/server/src/resolvers/usersResolver.ts +++ b/server/src/graphql/resolvers/usersResolver.ts @@ -1,18 +1,18 @@ -import * as UserRepo from "../repositories/Users/UserRepository.js"; -import * as ModuleRepo from "../repositories/Training/ModuleRepository.js"; -import * as HoldsRepo from "../repositories/Holds/HoldsRepository.js"; -import * as AccessCheckRepo from "../repositories/Equipment/AccessChecksRepository.js"; -import * as EquipmentRepo from "../repositories/Equipment/EquipmentRepository.js"; -import * as RoomRepo from "../repositories/Rooms/RoomRepository.js"; -import * as RestrictionRepo from "../repositories/Restrictions/RestrictionsRepository.js"; -import * as CurrencyAccountRepo from "../repositories/Currency/CurrencyAccountsRepository.js"; -import { createUnassocaitedAuditLog } from "../repositories/AuditLogs/AuditLogRepository.js"; -import { ApolloContext, CurrentUser } from "../context.js"; -import { getUsersFullName } from "../repositories/Users/UserRepository.js"; -import { getActiveTrainingHoldsByUser } from "../repositories/Training/TrainingHoldsRespository.js"; -import { getMakerspaceByID } from "../repositories/Makerspaces/MakerspaceRespository.js"; -import { EntityNotFound } from "../EntityNotFound.js"; -import { UserRow } from "../db/tables.js"; +import * as UserRepo from "../../database/repositories/Users/UserRepository.js"; +import * as ModuleRepo from "../../database/repositories/Training/ModuleRepository.js"; +import * as HoldsRepo from "../../database/repositories/Holds/HoldsRepository.js"; +import * as AccessCheckRepo from "../../database/repositories/Equipment/AccessChecksRepository.js"; +import * as EquipmentRepo from "../../database/repositories/Equipment/EquipmentRepository.js"; +import * as RoomRepo from "../../database/repositories/Rooms/RoomRepository.js"; +import * as RestrictionRepo from "../../database/repositories/Restrictions/RestrictionsRepository.js"; +import * as CurrencyAccountRepo from "../../database/repositories/Currency/CurrencyAccountsRepository.js"; +import { createUnassocaitedAuditLog } from "../../database/repositories/AuditLogs/AuditLogRepository.js"; +import { ApolloContext, CurrentUser } from "../../context.js"; +import { getUsersFullName } from "../../database/repositories/Users/UserRepository.js"; +import { getActiveTrainingHoldsByUser } from "../../database/repositories/Training/TrainingHoldsRespository.js"; +import { getMakerspaceByID } from "../../database/repositories/Makerspaces/MakerspaceRespository.js"; +import { EntityNotFound } from "../../EntityNotFound.js"; +import { UserRow } from "../../database/knex/tables.js"; const UsersResolvers = { User: { diff --git a/server/src/schema.ts b/server/src/graphql/schema.ts similarity index 100% rename from server/src/schema.ts rename to server/src/graphql/schema.ts diff --git a/server/src/schemas/TermsSchema.ts b/server/src/graphql/schemas/TermsSchema.ts similarity index 100% rename from server/src/schemas/TermsSchema.ts rename to server/src/graphql/schemas/TermsSchema.ts diff --git a/server/src/schemas/accessChecksSchema.ts b/server/src/graphql/schemas/accessChecksSchema.ts similarity index 100% rename from server/src/schemas/accessChecksSchema.ts rename to server/src/graphql/schemas/accessChecksSchema.ts diff --git a/server/src/schemas/announcementsSchema.ts b/server/src/graphql/schemas/announcementsSchema.ts similarity index 100% rename from server/src/schemas/announcementsSchema.ts rename to server/src/graphql/schemas/announcementsSchema.ts diff --git a/server/src/schemas/auditLogsSchema.ts b/server/src/graphql/schemas/auditLogsSchema.ts similarity index 100% rename from server/src/schemas/auditLogsSchema.ts rename to server/src/graphql/schemas/auditLogsSchema.ts diff --git a/server/src/schemas/calendarEventsSchema.ts b/server/src/graphql/schemas/calendarEventsSchema.ts similarity index 100% rename from server/src/schemas/calendarEventsSchema.ts rename to server/src/graphql/schemas/calendarEventsSchema.ts diff --git a/server/src/schemas/cartSchema.ts b/server/src/graphql/schemas/cartSchema.ts similarity index 100% rename from server/src/schemas/cartSchema.ts rename to server/src/graphql/schemas/cartSchema.ts diff --git a/server/src/schemas/currencyAccountSchema.ts b/server/src/graphql/schemas/currencyAccountSchema.ts similarity index 100% rename from server/src/schemas/currencyAccountSchema.ts rename to server/src/graphql/schemas/currencyAccountSchema.ts diff --git a/server/src/schemas/currencyLedgerSchema.ts b/server/src/graphql/schemas/currencyLedgerSchema.ts similarity index 100% rename from server/src/schemas/currencyLedgerSchema.ts rename to server/src/graphql/schemas/currencyLedgerSchema.ts diff --git a/server/src/schemas/customUrlSchema.ts b/server/src/graphql/schemas/customUrlSchema.ts similarity index 100% rename from server/src/schemas/customUrlSchema.ts rename to server/src/graphql/schemas/customUrlSchema.ts diff --git a/server/src/schemas/dataPointsSchema.ts b/server/src/graphql/schemas/dataPointsSchema.ts similarity index 100% rename from server/src/schemas/dataPointsSchema.ts rename to server/src/graphql/schemas/dataPointsSchema.ts diff --git a/server/src/schemas/deviceSchema.ts b/server/src/graphql/schemas/deviceSchema.ts similarity index 100% rename from server/src/schemas/deviceSchema.ts rename to server/src/graphql/schemas/deviceSchema.ts diff --git a/server/src/schemas/equipmentInstanceSchema.ts b/server/src/graphql/schemas/equipmentInstanceSchema.ts similarity index 100% rename from server/src/schemas/equipmentInstanceSchema.ts rename to server/src/graphql/schemas/equipmentInstanceSchema.ts diff --git a/server/src/schemas/equipmentSchema.ts b/server/src/graphql/schemas/equipmentSchema.ts similarity index 100% rename from server/src/schemas/equipmentSchema.ts rename to server/src/graphql/schemas/equipmentSchema.ts diff --git a/server/src/schemas/equipmentSessionsSchema.ts b/server/src/graphql/schemas/equipmentSessionsSchema.ts similarity index 100% rename from server/src/schemas/equipmentSessionsSchema.ts rename to server/src/graphql/schemas/equipmentSessionsSchema.ts diff --git a/server/src/schemas/eventsSchema.ts b/server/src/graphql/schemas/eventsSchema.ts similarity index 100% rename from server/src/schemas/eventsSchema.ts rename to server/src/graphql/schemas/eventsSchema.ts diff --git a/server/src/schemas/holdsSchema.ts b/server/src/graphql/schemas/holdsSchema.ts similarity index 100% rename from server/src/schemas/holdsSchema.ts rename to server/src/graphql/schemas/holdsSchema.ts diff --git a/server/src/schemas/maintenanceTicketSchema.ts b/server/src/graphql/schemas/maintenanceTicketSchema.ts similarity index 100% rename from server/src/schemas/maintenanceTicketSchema.ts rename to server/src/graphql/schemas/maintenanceTicketSchema.ts diff --git a/server/src/schemas/makerspaceHoursSchema.ts b/server/src/graphql/schemas/makerspaceHoursSchema.ts similarity index 100% rename from server/src/schemas/makerspaceHoursSchema.ts rename to server/src/graphql/schemas/makerspaceHoursSchema.ts diff --git a/server/src/schemas/makerspacesSchema.ts b/server/src/graphql/schemas/makerspacesSchema.ts similarity index 100% rename from server/src/schemas/makerspacesSchema.ts rename to server/src/graphql/schemas/makerspacesSchema.ts diff --git a/server/src/schemas/organizationsSchema.ts b/server/src/graphql/schemas/organizationsSchema.ts similarity index 100% rename from server/src/schemas/organizationsSchema.ts rename to server/src/graphql/schemas/organizationsSchema.ts diff --git a/server/src/schemas/permissionSchema.ts b/server/src/graphql/schemas/permissionSchema.ts similarity index 100% rename from server/src/schemas/permissionSchema.ts rename to server/src/graphql/schemas/permissionSchema.ts diff --git a/server/src/schemas/reservationSchema.ts b/server/src/graphql/schemas/reservationSchema.ts similarity index 100% rename from server/src/schemas/reservationSchema.ts rename to server/src/graphql/schemas/reservationSchema.ts diff --git a/server/src/schemas/restrictionSchema.ts b/server/src/graphql/schemas/restrictionSchema.ts similarity index 100% rename from server/src/schemas/restrictionSchema.ts rename to server/src/graphql/schemas/restrictionSchema.ts diff --git a/server/src/schemas/roomsSchema.ts b/server/src/graphql/schemas/roomsSchema.ts similarity index 100% rename from server/src/schemas/roomsSchema.ts rename to server/src/graphql/schemas/roomsSchema.ts diff --git a/server/src/schemas/storeFrontSchema.ts b/server/src/graphql/schemas/storeFrontSchema.ts similarity index 100% rename from server/src/schemas/storeFrontSchema.ts rename to server/src/graphql/schemas/storeFrontSchema.ts diff --git a/server/src/schemas/themeSchema.ts b/server/src/graphql/schemas/themeSchema.ts similarity index 100% rename from server/src/schemas/themeSchema.ts rename to server/src/graphql/schemas/themeSchema.ts diff --git a/server/src/schemas/toolItemsSchema.ts b/server/src/graphql/schemas/toolItemsSchema.ts similarity index 100% rename from server/src/schemas/toolItemsSchema.ts rename to server/src/graphql/schemas/toolItemsSchema.ts diff --git a/server/src/schemas/trainingHoldsSchema.ts b/server/src/graphql/schemas/trainingHoldsSchema.ts similarity index 100% rename from server/src/schemas/trainingHoldsSchema.ts rename to server/src/graphql/schemas/trainingHoldsSchema.ts diff --git a/server/src/schemas/trainingModuleSchema.ts b/server/src/graphql/schemas/trainingModuleSchema.ts similarity index 96% rename from server/src/schemas/trainingModuleSchema.ts rename to server/src/graphql/schemas/trainingModuleSchema.ts index a98803d98..3d6784684 100644 --- a/server/src/schemas/trainingModuleSchema.ts +++ b/server/src/graphql/schemas/trainingModuleSchema.ts @@ -4,7 +4,7 @@ */ import { gql } from "graphql-tag"; -import { EquipmentRow, TrainingModuleRow } from "../db/tables.js"; +import { EquipmentRow, TrainingModuleRow } from "../../database/knex/tables.js"; export interface TrainingModule { //dead id: number; diff --git a/server/src/schemas/trainingSubmissionSchema.ts b/server/src/graphql/schemas/trainingSubmissionSchema.ts similarity index 100% rename from server/src/schemas/trainingSubmissionSchema.ts rename to server/src/graphql/schemas/trainingSubmissionSchema.ts diff --git a/server/src/schemas/usersSchema.ts b/server/src/graphql/schemas/usersSchema.ts similarity index 98% rename from server/src/schemas/usersSchema.ts rename to server/src/graphql/schemas/usersSchema.ts index 41d417612..e10222c1a 100644 --- a/server/src/schemas/usersSchema.ts +++ b/server/src/graphql/schemas/usersSchema.ts @@ -4,8 +4,7 @@ */ import { gql } from "graphql-tag"; -import { UserRow } from "../db/tables.js"; - +import { UserRow } from "../../database/knex/tables.js"; export interface PassedModule { moduleID: number; diff --git a/server/src/integrations/atrium-integration b/server/src/integrations/atrium-integration index c8a046156..89f3b8f57 160000 --- a/server/src/integrations/atrium-integration +++ b/server/src/integrations/atrium-integration @@ -1 +1 @@ -Subproject commit c8a0461567628889bab317bd06eea55510600699 +Subproject commit 89f3b8f57ea0859eba8ab2de0b3424f9c5943563 diff --git a/server/src/integrations/currency/currency.ts b/server/src/integrations/currency/currency.ts index 83b7ac038..4dd225e09 100644 --- a/server/src/integrations/currency/currency.ts +++ b/server/src/integrations/currency/currency.ts @@ -1,8 +1,8 @@ import * as Atrium from "../atrium-integration/atrium.js" -import * as CurrencyAccountRepo from "../../repositories/Currency/CurrencyAccountsRepository.js" +import * as CurrencyAccountRepo from "../../database/repositories/Currency/CurrencyAccountsRepository.js" import { CurrencySource, MakeMoneyError } from "./types.js"; -import { TransactionRow } from "../../db/tables.js"; -import { getCurrencyLedgerEntry } from "../../repositories/Currency/CurrencyLedgerRepository.js"; +import { TransactionRow } from "../../database/knex/tables.js"; +import { getCurrencyLedgerEntry } from "../../database/repositories/Currency/CurrencyLedgerRepository.js"; const USE_ATRIUM_FOR_CURRENCY = process.env.ATRIUM_ENABLED == "true"; diff --git a/server/src/integrations/currency/transactions.ts b/server/src/integrations/currency/transactions.ts index 9de5a321c..c002e4757 100644 --- a/server/src/integrations/currency/transactions.ts +++ b/server/src/integrations/currency/transactions.ts @@ -4,7 +4,7 @@ */ import { CurrencySource, MakeMoneyError } from "./types.js" -import * as TransactionRepo from "../../repositories/Currency/TransactionRepository.js" +import * as TransactionRepo from "../../database/repositories/Currency/TransactionRepository.js" import * as Currency from "./currency.js" import { send_transaction_email } from "../email/email.js"; @@ -82,7 +82,7 @@ export async function UpdateTransaction(transactionID: number, deltaCents: numbe // If we have charged the user money last time, this will be negative // If it is positive, we have somehow paid them const deltaForThisTransaction = (lastCharges.atrium?.amount ?? 0) + (lastCharges.credit?.amount ?? 0) - if (centsToCharge + deltaForThisTransaction > 0){ + if (centsToCharge + deltaForThisTransaction > 0) { // recharge would give the user money (something fishy) console.error(`Currency: Caught fraudulent refund before refund. Not gonna refund it. Probably needs manual rectification. tid: ${transactionID} asking for ${centsToCharge}, only ever spent ${-deltaForThisTransaction}`) return false; @@ -95,7 +95,7 @@ export async function UpdateTransaction(transactionID: number, deltaCents: numbe // update amount to charge based on how much was already refunded/spent centsToCharge = deltaForThisTransaction + centsToCharge; } - if (centsToCharge > 0){ + if (centsToCharge > 0) { console.error(`Currency: Illegal attempt to refund more than spent: tid:${transactionID}, tried to adjust ${centsToCharge} with reason ${reason}`) return false; } @@ -106,7 +106,7 @@ export async function UpdateTransaction(transactionID: number, deltaCents: numbe console.error(`Currency: Could not charge account tid: ${parent.id}, teid: ${entryId}, err: ${chargeResult} `); return chargeResult; } - if (!chargeResult){ + if (!chargeResult) { return false; } diff --git a/server/src/integrations/email/receipt-template.ts b/server/src/integrations/email/receipt-template.ts index f43b2debd..a2e23b73c 100644 --- a/server/src/integrations/email/receipt-template.ts +++ b/server/src/integrations/email/receipt-template.ts @@ -1,9 +1,9 @@ import ejs from "ejs" import { centsToDollarString } from "../currency/currency.js" -import { TransactionEntryRow, TransactionRow } from "../../db/tables.js" -import { getCurrencyLedgerEntriesForTransactionEntryByEntryId, getTransactionById, getTransactionEntriesByTransactionId } from "../../repositories/Currency/TransactionRepository.js" +import { TransactionEntryRow, TransactionRow } from "../../database/knex/tables.js" +import { getCurrencyLedgerEntriesForTransactionEntryByEntryId, getTransactionById, getTransactionEntriesByTransactionId } from "../../database/repositories/Currency/TransactionRepository.js" import { CurrencyType } from "../currency/types.js" -import { getAccountBalanceCents, getAccountOwner } from "../../repositories/Currency/CurrencyAccountsRepository.js" +import { getAccountBalanceCents, getAccountOwner } from "../../database/repositories/Currency/CurrencyAccountsRepository.js" const templateSource: string = ` diff --git a/server/src/integrations/papercut/papercut.ts b/server/src/integrations/papercut/papercut.ts index ecff540a9..e1fa13254 100644 --- a/server/src/integrations/papercut/papercut.ts +++ b/server/src/integrations/papercut/papercut.ts @@ -1,12 +1,12 @@ import express from "express"; import xmlparser from "express-xml-bodyparser"; import * as xml2js from "xml2js" -import { createUnassocaitedAuditLog } from "../../repositories/AuditLogs/AuditLogRepository.js"; +import { createUnassocaitedAuditLog } from "../../database/repositories/AuditLogs/AuditLogRepository.js"; import * as Currency from "../currency/currency.js" import { NewTransaction, UpdateTransaction } from "../currency/transactions.js"; -import { getAccountIDByUsername } from "../../repositories/Currency/CurrencyAccountsRepository.js"; +import { getAccountIDByUsername } from "../../database/repositories/Currency/CurrencyAccountsRepository.js"; import { CurrencySource, MakeMoneyError } from "../currency/types.js"; -import { getTransactionByPrinterJobId } from "../../repositories/Currency/TransactionRepository.js"; +import { getTransactionByPrinterJobId } from "../../database/repositories/Currency/TransactionRepository.js"; const PAPERCUT_SECURITY_SECRET = process.env.PAPERCUT_SECURITY_SECRET; const FREE_3D_PRINTS = process.env.FREE_3D_PRINTS === "true"; diff --git a/server/src/integrations/slack/slack.ts b/server/src/integrations/slack/slack.ts index 711dff0d6..34a645ebf 100644 --- a/server/src/integrations/slack/slack.ts +++ b/server/src/integrations/slack/slack.ts @@ -1,8 +1,8 @@ import { ChatPostMessageArguments, WebClient } from "@slack/web-api"; -import { EquipmentRow, MaintenanceTicketRow, MakerspaceRow, ReservationRow, UserRow } from "../../db/tables.js"; -import * as EquipmentInstanceRepo from "../../repositories/Equipment/EquipmentInstancesRepository.js"; -import * as EquipmentRepo from "../../repositories/Equipment/EquipmentRepository.js"; -import * as RoomRepo from "../../repositories/Rooms/RoomRepository.js"; +import { EquipmentRow, MaintenanceTicketRow, MakerspaceRow, ReservationRow, UserRow } from "../../database/knex/tables.js"; +import * as EquipmentInstanceRepo from "../../database/repositories/Equipment/EquipmentInstancesRepository.js"; +import * as EquipmentRepo from "../../database/repositories/Equipment/EquipmentRepository.js"; +import * as RoomRepo from "../../database/repositories/Rooms/RoomRepository.js"; import { format } from "date-fns"; // Read a token from the environment variables diff --git a/server/src/periodicActions.ts b/server/src/periodicActions.ts index ffb54f227..9ea901f12 100644 --- a/server/src/periodicActions.ts +++ b/server/src/periodicActions.ts @@ -1,11 +1,11 @@ -import { knex } from "./db/index.js"; +import { knex } from "./database/knex/index.js"; import { listObjects } from "./integrations/aws/s3.js" import { send_generic_email } from "./integrations/email/email.js"; import { notifyNewMaintenanceTicket } from "./integrations/slack/slack.js"; -import { CoreActions } from "./models/api/ACSFormats.js"; -import { ACSOrchestrator } from "./models/api/ACSOrchestrator.js"; -import { createUnassocaitedAuditLog } from "./repositories/AuditLogs/AuditLogRepository.js"; -import { advanceIntervalTickets } from "./repositories/Equipment/MaintenanceTicketRepository.js"; +import { CoreActions } from "./database/models/api/ACSFormats.js"; +import { ACSOrchestrator } from "./database/models/api/ACSOrchestrator.js"; +import { createUnassocaitedAuditLog } from "./database/repositories/AuditLogs/AuditLogRepository.js"; +import { advanceIntervalTickets } from "./database/repositories/Equipment/MaintenanceTicketRepository.js"; /** * If you use the CDN to store user-uploads, make sure you update this query so it knows that those images are in use diff --git a/server/src/repositories/Links/customUrlRepository.ts b/server/src/repositories/Links/customUrlRepository.ts deleted file mode 100644 index 56c96f276..000000000 --- a/server/src/repositories/Links/customUrlRepository.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { knex } from "../../db/index.js"; -import { CustomUrlRow } from "../../db/tables.js"; -import { CustomUrlInput } from "../../schemas/customUrlSchema.js"; - -export async function getCustomUrl(shortUrl: string): Promise { - return await knex('CustomUrls').select('*').where({ shortUrl }).first(); -} - -export async function getCustomUrls() { - return await knex('CustomUrls').select('*').orderBy("id", "asc"); -} - -export async function getCustomUrlById(id:number): Promise { - return await knex('CustomUrls').select('*').where({id}).first(); -} - -export async function createCustomUrl(shortUrl: string, longUrl: string): Promise { - const customUrlRow = (await knex('CustomUrls').insert({shortUrl, longUrl}).returning('*'))[0]; - return customUrlRow -} - -export async function updateCustomUrl(id: number, customUrl: CustomUrlInput): Promise { - await knex('CustomUrls').where('id', id).update({shortUrl: customUrl.shortUrl, longUrl: customUrl.longUrl}); - return getCustomUrlById(id); -} - -export async function deleteCustomUrl(id: number) { - return await knex('CustomUrls').delete().where({id}); -} \ No newline at end of file diff --git a/server/src/server.ts b/server/src/server.ts index 715e1856b..14e8f9bf4 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -9,40 +9,40 @@ import { ApolloServer } from "@apollo/server"; import { expressMiddleware } from "@as-integrations/express5"; import compression from "compression"; import cors from "cors"; -import { schema } from "./schema.js"; +import { schema } from "./graphql/schema.js"; import { setupSessions, setupDevAuth, setupSamlAuth, setupAuth } from "./auth.js"; import context, { determineUser } from "./context.js"; import path from "path"; import * as schedule from "node-schedule"; -import { getUserByCardTagID, getUsersFullName } from "./repositories/Users/UserRepository.js"; -import { createUnassocaitedAuditLog } from "./repositories/AuditLogs/AuditLogRepository.js"; -import { getReaderCertCA } from "./repositories/Readers/ReaderRepository.js"; +import { getUserByCardTagID, getUsersFullName } from "./database/repositories/Users/UserRepository.js"; +import { createUnassocaitedAuditLog } from "./database/repositories/AuditLogs/AuditLogRepository.js"; +import { getReaderCertCA } from "./database/repositories/Readers/ReaderRepository.js"; import morgan from "morgan"; //Log provider import { createRequire } from "module"; -import { setDataPointValue } from "./repositories/DataPoints/DataPointsRepository.js"; -import { addItemAmount, getItemById, getItems, getItemsWhereStaff, getItemsWhereStorefront, setItemAmount } from "./repositories/Store/InventoryRepository.js"; -import { createLedger } from "./repositories/Store/InventoryLedgerRepository.js"; -import { getMakerspaceHoursNextWeek } from "./repositories/Makerspaces/MakerspaceHoursRepository.js"; -import { getPassedTrainingsDaysAgo, purgeExpiredPassedModules } from "./repositories/Training/PassedRepository.js"; +import { setDataPointValue } from "./database/repositories/DataPoints/DataPointsRepository.js"; +import { addItemAmount, getItemById, getItems, getItemsWhereStaff, getItemsWhereStorefront, setItemAmount } from "./database/repositories/Store/InventoryRepository.js"; +import { createLedger } from "./database/repositories/Store/InventoryLedgerRepository.js"; +import { getMakerspaceHoursNextWeek } from "./database/repositories/Makerspaces/MakerspaceHoursRepository.js"; +import { getPassedTrainingsDaysAgo, purgeExpiredPassedModules } from "./database/repositories/Training/PassedRepository.js"; import * as Emailer from "./integrations/email/email.js" import { pingAtrium } from "./integrations/atrium-integration/atrium.js"; import * as S3 from "./integrations/aws/s3.js" import { isStaff } from "./privilege.js"; import { advanceTimeTickets, deletePastSpecialHours, purge_images, scheduledRestartAllCores } from "./periodicActions.js"; -import { getCustomUrl } from "./repositories/Links/customUrlRepository.js"; -import { InventoryItemRow } from "./db/tables.js"; +import { getCustomUrl } from "./database/repositories/Links/customUrlRepository.js"; +import { InventoryItemRow } from "./database/knex/tables.js"; import * as API from "./api/api.js"; -import { getDeviceBySN } from "./repositories/Devices/DeviceRepository.js"; +import { getDeviceBySN } from "./database/repositories/Devices/DeviceRepository.js"; import { authenticateDevice } from "./api/devices/deviceApi.js"; import { createWebSocketStream, WebSocketServer } from "ws"; import { createServer } from "http"; import { Aedes, AuthenticateError } from 'aedes'; -import * as DeviceRepo from "./repositories/Devices/DeviceRepository.js"; -import MQTTACSController from "./models/api/MQTTACSController.js"; +import * as DeviceRepo from "./database/repositories/Devices/DeviceRepository.js"; +import MQTTACSController from "./database/models/api/MQTTACSController.js"; import fs from "node:fs"; import { ViteDevServer } from "vite"; -import { SiteSettings } from "./models/site_settings/SiteSettings.js"; -import * as ThemeRepo from "./repositories/SiteSettings/ThemesRepository.js"; +import { SiteSettings } from "./database/models/site_settings/SiteSettings.js"; +import * as ThemeRepo from "./database/repositories/SiteSettings/ThemesRepository.js"; const require = createRequire(import.meta.url);