Implement maintenance

This commit is contained in:
2023-09-04 17:31:43 +02:00
parent 8449d145d8
commit eedd94ba0f
7 changed files with 31 additions and 22 deletions

View File

@@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "Maintenance" ADD COLUMN "enabled" BOOLEAN NOT NULL DEFAULT true;

View File

@@ -15,6 +15,7 @@ model Maintenance {
beginAt DateTime @default(now())
endAt DateTime @default(now())
createdAt DateTime @default(now())
enabled Boolean @default(true)
}
model Announcement {

View File

@@ -2,14 +2,14 @@
<header class="z-30 sticky top-0 left-0 flex justify-center w-full">
<div class="w-full px-4 sm:px-6 lg:px-8 sm:mx-8 max-w-7xl py-4 flex justify-between bg-white dark:bg-zinc-900 border-b border-zinc-100 dark:border-zinc-300/10">
<Logo />
<NavBar v-if="navbar" />
<NavBar v-if="navigation" />
<div class="flex gap-2">
<ClientOnly>
<div class="flex items-center rounded-md p-1 gap-1 relative bg-black/5 text-sm font-medium text-zinc-700 dark:bg-zinc-800/90 dark:text-zinc-300">
<ColorPicker />
<ColorModeButton />
</div>
<MobileNavBar />
<MobileNavBar v-if="navigation" />
</ClientOnly>
</div>
</div>
@@ -19,7 +19,7 @@
<script setup lang="ts">
defineProps({
navbar: {
navigation: {
type: Boolean,
default: true,
},

View File

@@ -12,7 +12,7 @@ const getColor = computed(() => appConfig.ui.primary)
</div>
</section>
<div class="relative z-50 min-h-[100svh]">
<Header :navbar="false" />
<Header :navigation="false" />
<UContainer>
<NuxtPage />
</UContainer>

View File

@@ -0,0 +1,23 @@
export default defineNuxtRouteMiddleware(async (to) => {
let isMaintenance = ref<Boolean>(true)
const { $trpc } = useNuxtApp()
try {
isMaintenance.value = await $trpc.maintenance.is.query()
} catch (error) {
return navigateTo('/maintenance')
}
if (isMaintenance.value && to.path !== '/maintenance') {
return navigateTo('/maintenance', {
redirectCode: 301,
})
}
if (!isMaintenance.value && to.path === '/maintenance') {
return navigateTo('/', {
redirectCode: 301,
replace: true,
})
}
})

View File

@@ -1,17 +0,0 @@
export default defineNuxtRouteMiddleware(async (to, from) => {
let isMaintenance = true
const { $trpc } = useNuxtApp()
try {
isMaintenance = await $trpc.maintenance.is.query()
} catch (error) {
return navigateTo('/maintenance')
}
if (isMaintenance) {
return navigateTo('/maintenance')
}
if (!isMaintenance && to.path === '/maintenance') {
return navigateTo('/')
}
})

View File

@@ -17,6 +17,6 @@ export default router({
},
})
const today = new Date()
return !!maintenance && maintenance.beginAt.getTime() < today.getTime() && maintenance.endAt.getTime() > today.getTime()
return !!maintenance && maintenance.enabled && maintenance.beginAt.getTime() < today.getTime() && maintenance.endAt.getTime() > today.getTime()
}),
})