Auth
This commit is contained in:
14
src/hooks.client.ts
Normal file
14
src/hooks.client.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import type { HandleClientError } from '@sveltejs/kit'
|
||||
import { initializeClerkClient } from 'clerk-sveltekit/client'
|
||||
import { PUBLIC_CLERK_PUBLISHABLE_KEY } from '$env/static/public'
|
||||
|
||||
initializeClerkClient(PUBLIC_CLERK_PUBLISHABLE_KEY, {
|
||||
afterSignInUrl: '/admin/',
|
||||
afterSignUpUrl: '/admin/',
|
||||
signInUrl: '/sign-in',
|
||||
signUpUrl: '/sign-up',
|
||||
})
|
||||
|
||||
export const handleError: HandleClientError = async ({ error, event }) => {
|
||||
console.error(error, event)
|
||||
}
|
||||
22
src/hooks.server.ts
Normal file
22
src/hooks.server.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
import type { Handle } from '@sveltejs/kit'
|
||||
import { sequence } from '@sveltejs/kit/hooks'
|
||||
import { handleClerk } from 'clerk-sveltekit/server'
|
||||
import { CLERK_SECRET_KEY } from '$env/static/private'
|
||||
import prisma from '$lib/prisma';
|
||||
|
||||
const newUserHandle: Handle = async function({event, resolve}) {
|
||||
prisma.user.findUnique(
|
||||
const result = await resolve(event);
|
||||
console.log(result);
|
||||
return result;
|
||||
};
|
||||
|
||||
export const handle: Handle = sequence(
|
||||
handleClerk(CLERK_SECRET_KEY, {
|
||||
debug: true,
|
||||
protectedPaths: ['/admin'],
|
||||
signInUrl: '/sign-in',
|
||||
}),
|
||||
newUserHandle
|
||||
)
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
<script lang="ts">
|
||||
</script>
|
||||
|
||||
<div>
|
||||
<slot />
|
||||
</div>
|
||||
@@ -1,27 +0,0 @@
|
||||
<script lang="ts">
|
||||
import { OneOnOneBracket } from "$lib/match";
|
||||
|
||||
|
||||
export let bracket: OneOnOneBracket;
|
||||
</script>
|
||||
<div>
|
||||
Bracket: {bracket.id}
|
||||
<div>
|
||||
Configuration:
|
||||
<div>
|
||||
Type: {bracket.config.bracketType}
|
||||
</div>
|
||||
<div>
|
||||
Games Per Set: {bracket.config.gamesPerSet}
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
{#each bracket.setLookup as round, i }
|
||||
<div>
|
||||
Round {i}
|
||||
{#each round as set }
|
||||
{/each}
|
||||
</div>
|
||||
{/each}
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,13 +0,0 @@
|
||||
<script lang="ts">
|
||||
import type { OneOnOneSet } from "$lib/match";
|
||||
let set: OneOnOneSet;
|
||||
|
||||
</script>
|
||||
<div>
|
||||
<div>
|
||||
{set.p1.name}
|
||||
</div>
|
||||
<div>
|
||||
{set.p2.name}
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,81 +0,0 @@
|
||||
export class User {
|
||||
id?: string;
|
||||
name: string;
|
||||
sponsor?: string;
|
||||
roles: Array<string>;
|
||||
profile: UserProfile;
|
||||
|
||||
constructor(name: string) {
|
||||
this.name = name;
|
||||
this.roles = new Array<string>();
|
||||
this.profile = {};
|
||||
}
|
||||
}
|
||||
|
||||
export class UserProfile {
|
||||
|
||||
}
|
||||
|
||||
export interface Tournament {
|
||||
id: string;
|
||||
title: string;
|
||||
slug?: string;
|
||||
tournamentCreator: User;
|
||||
tournamentAdmins: Array<User>;
|
||||
events: Array<Event>;
|
||||
}
|
||||
|
||||
export interface Event {
|
||||
}
|
||||
|
||||
export enum PhaseType {
|
||||
DOUBLE_ELIM = "Double Elimination",
|
||||
SINGLE_ELIM = "Single Elimination",
|
||||
ROUND_ROBIN = "Round Robin",
|
||||
LADDER = "Ladder",
|
||||
SWISS = "Swiss",
|
||||
}
|
||||
|
||||
export interface Phase {
|
||||
id: string;
|
||||
brackets: Array<Bracket>;
|
||||
config: PhaseConfig;
|
||||
}
|
||||
|
||||
export interface Bracket {
|
||||
|
||||
}
|
||||
|
||||
export class PhaseConfig {
|
||||
phaseType: PhaseType;
|
||||
winningSetCount: number;
|
||||
numPhaseWinners: number;
|
||||
|
||||
constructor(phaseType?: PhaseType, winningSetCount?: number, numPhaseWinners?: number) {
|
||||
if(phaseType)
|
||||
this.phaseType = phaseType;
|
||||
else
|
||||
this.phaseType = PhaseType.DOUBLE_ELIM;
|
||||
if(winningSetCount)
|
||||
this.winningSetCount = winningSetCount;
|
||||
else
|
||||
this.winningSetCount = 2;
|
||||
if(numPhaseWinners)
|
||||
this.numPhaseWinners = numPhaseWinners;
|
||||
else
|
||||
this.numPhaseWinners = 1;
|
||||
}
|
||||
}
|
||||
|
||||
export interface MatchIdentity {
|
||||
name: string;
|
||||
}
|
||||
export interface Player extends MatchIdentity {
|
||||
id: string;
|
||||
}
|
||||
|
||||
export interface PlayerGroup extends MatchIdentity {
|
||||
|
||||
groupId: string;
|
||||
players: Array<Player>;
|
||||
}
|
||||
6
src/lib/prisma.ts
Normal file
6
src/lib/prisma.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
import { PrismaClient } from "@prisma/client";
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
export default prisma;
|
||||
|
||||
@@ -1,5 +1,32 @@
|
||||
<script lang="ts">
|
||||
import "../app.css";
|
||||
import UserButton from 'clerk-sveltekit/client/UserButton.svelte'
|
||||
import SignedIn from 'clerk-sveltekit/client/SignedIn.svelte'
|
||||
import SignedOut from 'clerk-sveltekit/client/SignedOut.svelte'
|
||||
</script>
|
||||
|
||||
<slot />
|
||||
<nav class="fixed bg-slate-600 w-64 left-0 p-3 text-white h-screen z-20 flex flex-col">
|
||||
<ul>
|
||||
<li>Home</li>
|
||||
<li>Events</li>
|
||||
<li>Communities</li>
|
||||
<li>Leagues</li>
|
||||
<li class="relative end-0">
|
||||
</li>
|
||||
</ul>
|
||||
<div class="mb-0">
|
||||
<SignedIn>
|
||||
<UserButton afterSignOutUrl="/" />
|
||||
</SignedIn>
|
||||
<SignedOut>
|
||||
<a href="/sign-in">Sign in</a> <span>|</span> <a href="/sign-up">Sign up</a>
|
||||
<!-- You could also use <SignInButton mode="modal" /> and <SignUpButton mode="modal" /> here -->
|
||||
</SignedOut>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="ml-64 p-1">
|
||||
<div class="container mx-auto">
|
||||
<slot/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
9
src/routes/+page.server.ts
Normal file
9
src/routes/+page.server.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
|
||||
import prisma from '$lib/prisma';
|
||||
import type { PageServerLoad } from './$types';
|
||||
|
||||
export const load = (async () => {
|
||||
const response = await prisma.event.count();
|
||||
return { eventCount: response };
|
||||
}) satisfies PageServerLoad;
|
||||
|
||||
@@ -1,2 +1,8 @@
|
||||
<h1>Welcome to SvelteKit</h1>
|
||||
<p>Visit <a href="https://kit.svelte.dev">kit.svelte.dev</a> to read the documentation</p>
|
||||
<script lang="ts">
|
||||
import type { PageData } from "./$types";
|
||||
|
||||
export let data: PageData;
|
||||
</script>
|
||||
|
||||
|
||||
Event Count: {data.eventCount}
|
||||
|
||||
1
src/routes/admin/+page.svelte
Normal file
1
src/routes/admin/+page.svelte
Normal file
@@ -0,0 +1 @@
|
||||
<p>Site Admin Dashboard</p>
|
||||
@@ -1,3 +0,0 @@
|
||||
<script lang="ts">
|
||||
|
||||
</script>
|
||||
7
src/routes/sign-in/+page.svelte
Normal file
7
src/routes/sign-in/+page.svelte
Normal file
@@ -0,0 +1,7 @@
|
||||
<script lang="ts">
|
||||
import SignIn from 'clerk-sveltekit/client/SignIn.svelte'
|
||||
</script>
|
||||
|
||||
<div>
|
||||
<SignIn redirectUrl="/admin" />
|
||||
</div>
|
||||
7
src/routes/sign-up/+page.svelte
Normal file
7
src/routes/sign-up/+page.svelte
Normal file
@@ -0,0 +1,7 @@
|
||||
<script lang="ts">
|
||||
import SignUp from 'clerk-sveltekit/client/SignUp.svelte'
|
||||
</script>
|
||||
|
||||
<div>
|
||||
<SignUp redirectUrl="/admin" />
|
||||
</div>
|
||||
7
src/routes/tournament/create/+page.svelte
Normal file
7
src/routes/tournament/create/+page.svelte
Normal file
@@ -0,0 +1,7 @@
|
||||
<script lang="ts">
|
||||
|
||||
</script>
|
||||
|
||||
<form action="POST">
|
||||
|
||||
</form>
|
||||
12
src/routes/user/+page.svelte
Normal file
12
src/routes/user/+page.svelte
Normal file
@@ -0,0 +1,12 @@
|
||||
|
||||
<script lang="ts">
|
||||
import UserProfile from "clerk-sveltekit/client/UserProfile.svelte";
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<div class="w-full">
|
||||
<div class="mx-auto">
|
||||
<UserProfile/>
|
||||
</div>
|
||||
</div>
|
||||
Reference in New Issue
Block a user