1
0
Fork 0
mirror of https://github.com/kou029w/quot.git synced 2025-02-26 10:35:20 +00:00

random page

This commit is contained in:
Nebel 2022-09-07 22:54:27 +09:00
parent e8883d1ef4
commit f29cc8e838
5 changed files with 59 additions and 15 deletions

View file

@ -31,6 +31,7 @@ header h1 > :is(a, a:hover) {
} }
header nav > * { header nav > * {
margin: 0.75rem;
font-size: 1.25rem; font-size: 1.25rem;
} }

View file

@ -2,11 +2,13 @@ import "./app.css";
import { createSignal } from "solid-js"; import { createSignal } from "solid-js";
import Index from "./pages/index"; import Index from "./pages/index";
import Page from "./pages/page"; import Page from "./pages/page";
import Random from "./pages/random";
import random from "./helpers/random"; import random from "./helpers/random";
import { decodeJwt } from "jose"; import { decodeJwt } from "jose";
const routes = { const routes = {
"/": Index, "/": Index,
"/random": Random,
}; };
async function updateUser(jwt: string): Promise<boolean> { async function updateUser(jwt: string): Promise<boolean> {
@ -70,6 +72,7 @@ export default () => {
</h1> </h1>
<nav> <nav>
<a href={authenticated ? "/new" : "/login"}>📄</a> <a href={authenticated ? "/new" : "/login"}>📄</a>
<a href="/random">🔀</a>
</nav> </nav>
</header> </header>
{routes[pathname()] ?? ( {routes[pathname()] ?? (

View file

@ -0,0 +1,21 @@
import { createEffect, createResource } from "solid-js";
import type Pages from "../../protocol/pages";
import random from "../helpers/random";
async function randomPage(): Promise<Pages.ResponsePage> {
const jwt = window.localStorage.getItem("jwt");
const res = await fetch(
`${import.meta.env.QUOT_API_ENDPOINT}/pages?order=random&limit=1`,
{ headers: jwt ? { authorization: `Bearer ${jwt}` } : {} }
);
const data = (await res.json()) as Pages.Response;
return data[0]!;
}
export default () => {
const [page] = createResource(random(), randomPage);
createEffect(() => {
if (!page.loading) window.location.replace(`/${page()!.id.toString(16)}`);
});
return null;
};

View file

@ -0,0 +1,7 @@
-- migrate:up
CREATE FUNCTION random(pages) RETURNS DOUBLE PRECISION LANGUAGE SQL AS $$
SELECT random();
$$;
-- migrate:down
DROP FUNCTION random(pages);

View file

@ -9,20 +9,6 @@ SET xmloption = content;
SET client_min_messages = warning; SET client_min_messages = warning;
SET row_security = off; SET row_security = off;
--
-- Name: update_timestamp(); Type: FUNCTION; Schema: public; Owner: -
--
CREATE FUNCTION public.update_timestamp() RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
NEW.updated = CURRENT_TIMESTAMP;
RETURN NEW;
END
$$;
SET default_tablespace = ''; SET default_tablespace = '';
SET default_table_access_method = heap; SET default_table_access_method = heap;
@ -42,6 +28,31 @@ CREATE TABLE public.pages (
); );
--
-- Name: random(public.pages); Type: FUNCTION; Schema: public; Owner: -
--
CREATE FUNCTION public.random(public.pages) RETURNS double precision
LANGUAGE sql
AS $$
SELECT random();
$$;
--
-- Name: update_timestamp(); Type: FUNCTION; Schema: public; Owner: -
--
CREATE FUNCTION public.update_timestamp() RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
NEW.updated = CURRENT_TIMESTAMP;
RETURN NEW;
END
$$;
-- --
-- Name: pages_id_seq; Type: SEQUENCE; Schema: public; Owner: - -- Name: pages_id_seq; Type: SEQUENCE; Schema: public; Owner: -
-- --
@ -186,4 +197,5 @@ CREATE POLICY users_policy ON public.users USING ((id = ((current_setting('reque
-- --
INSERT INTO public.schema_migrations (version) VALUES INSERT INTO public.schema_migrations (version) VALUES
('0'); ('0'),
('20220907130637');