This commit is contained in:
Flatlogic Bot 2025-09-03 20:53:55 +00:00
parent 28025099a6
commit aa77177631
8 changed files with 105 additions and 3 deletions

File diff suppressed because one or more lines are too long

View File

@ -17,6 +17,9 @@ const pexelsRoutes = require('./routes/pexels');
const organizationForAuthRoutes = require('./routes/organizationLogin');
const adminOnboardingRoutes = require('./routes/adminOnboarding');
const checkPermissions = require('./middlewares/check-permissions');
const openaiRoutes = require('./routes/openai');
const contactFormRoutes = require('./routes/contactForm');
@ -196,6 +199,15 @@ app.use(
searchRoutes,
);
// Admin Onboarding endpoint
app.use(
'/api/admin/onboarding',
passport.authenticate('jwt', { session: false }),
checkPermissions(['CREATE_LEAGUES']),
adminOnboardingRoutes,
);
app.use('/api/org-for-auth', organizationForAuthRoutes);
const publicDir = path.join(__dirname, '../public');

View File

@ -0,0 +1,39 @@
const express = require('express');
const router = express.Router();
const LeaguesService = require('../services/leagues');
const UsersService = require('../services/users');
const { authenticateJWT } = require('../auth/auth');
const checkPermissions = require('../middlewares/check-permissions');
// POST /api/admin/onboarding
router.post(
'/',
authenticateJWT,
checkPermissions('CREATE_LEAGUES'),
async (req, res, next) => {
try {
const { leagueName, adminFirstName, adminLastName, adminEmail, adminPassword } = req.body;
// Create new league
const league = await LeaguesService.create({ name: leagueName }, req.currentUser);
// Create league administrator linked to the new league
const user = await UsersService.create(
{
firstName: adminFirstName,
lastName: adminLastName,
email: adminEmail,
password: adminPassword,
leagueId: league.id,
role: 'League Administrator',
},
req.currentUser,
false,
req.get('host'),
);
res.status(201).json({ league, user });
} catch (error) {
next(error);
}
},
);
module.exports = router;

View File

@ -2,7 +2,7 @@ import axios from 'axios';
export async function getPexelsImage() {
try {
const response = await axios.get(`/pexels/image`);
const response = await axios.get('/api/pexels-image');
return response.data;
} catch (error) {
console.error('Error fetching image:', error);
@ -12,7 +12,7 @@ export async function getPexelsImage() {
export async function getPexelsVideo() {
try {
const response = await axios.get(`/pexels/video`);
const response = await axios.get('/api/pexels-video');
return response.data;
} catch (error) {
console.error('Error fetching video:', error);

View File

@ -121,6 +121,14 @@ const menuAside: MenuAsideItem[] = [
label: 'Profile',
icon: icon.mdiAccountCircle,
},
{
href: '/admin',
label: 'Onboarding',
icon: icon.mdiAccountPlusOutline,
permissions: 'CREATE_LEAGUES',
},
{
href: '/home',

View File

@ -0,0 +1,16 @@
import React from 'react';
import type { ReactElement } from 'react';
import LayoutAuthenticated from '../layouts/Authenticated';
export default function OnboardingPage() {
return (
<div style={{ padding: '2rem' }}>
<h1>Admin Onboarding</h1>
<p>This is a placeholder for the admin onboarding form.</p>
</div>
);
}
OnboardingPage.getLayout = function getLayout(page: ReactElement) {
return <LayoutAuthenticated>{page}</LayoutAuthenticated>;
};

View File

@ -0,0 +1,13 @@
import type { NextApiRequest, NextApiResponse } from 'next';
import axios from 'axios';
import { baseURLApi } from '../../../config';
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
try {
const { data } = await axios.get(`${baseURLApi}/pexels/image`);
res.status(200).json(data);
} catch (error) {
console.error('Error proxying pexels image:', error);
res.status(500).json({ error: 'Error fetching image' });
}
}

View File

@ -0,0 +1,13 @@
import type { NextApiRequest, NextApiResponse } from 'next';
import axios from 'axios';
import { baseURLApi } from '../../../config';
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
try {
const { data } = await axios.get(`${baseURLApi}/pexels/video`);
res.status(200).json(data);
} catch (error) {
console.error('Error proxying pexels video:', error);
res.status(500).json({ error: 'Error fetching video' });
}
}