mirror of
https://github.com/ArthurDanjou/website.git
synced 2026-01-30 11:47:53 +01:00
Implement maintenance
This commit is contained in:
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Maintenance" ADD COLUMN "enabled" BOOLEAN NOT NULL DEFAULT true;
|
||||||
@@ -15,6 +15,7 @@ model Maintenance {
|
|||||||
beginAt DateTime @default(now())
|
beginAt DateTime @default(now())
|
||||||
endAt DateTime @default(now())
|
endAt DateTime @default(now())
|
||||||
createdAt DateTime @default(now())
|
createdAt DateTime @default(now())
|
||||||
|
enabled Boolean @default(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
model Announcement {
|
model Announcement {
|
||||||
|
|||||||
@@ -2,14 +2,14 @@
|
|||||||
<header class="z-30 sticky top-0 left-0 flex justify-center w-full">
|
<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">
|
<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 />
|
<Logo />
|
||||||
<NavBar v-if="navbar" />
|
<NavBar v-if="navigation" />
|
||||||
<div class="flex gap-2">
|
<div class="flex gap-2">
|
||||||
<ClientOnly>
|
<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">
|
<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 />
|
<ColorPicker />
|
||||||
<ColorModeButton />
|
<ColorModeButton />
|
||||||
</div>
|
</div>
|
||||||
<MobileNavBar />
|
<MobileNavBar v-if="navigation" />
|
||||||
</ClientOnly>
|
</ClientOnly>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
|
||||||
defineProps({
|
defineProps({
|
||||||
navbar: {
|
navigation: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: true,
|
default: true,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ const getColor = computed(() => appConfig.ui.primary)
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<div class="relative z-50 min-h-[100svh]">
|
<div class="relative z-50 min-h-[100svh]">
|
||||||
<Header :navbar="false" />
|
<Header :navigation="false" />
|
||||||
<UContainer>
|
<UContainer>
|
||||||
<NuxtPage />
|
<NuxtPage />
|
||||||
</UContainer>
|
</UContainer>
|
||||||
|
|||||||
23
src/middleware/maintenance.global.ts
Normal file
23
src/middleware/maintenance.global.ts
Normal 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,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
@@ -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('/')
|
|
||||||
}
|
|
||||||
})
|
|
||||||
@@ -17,6 +17,6 @@ export default router({
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
const today = new Date()
|
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()
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user