chore: initial import to Nexus_Edu
This commit is contained in:
48
src/app/api/auth/login/route.ts
Normal file
48
src/app/api/auth/login/route.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
|
||||
import { NextRequest } from 'next/server';
|
||||
import { successResponse, errorResponse, dbDelay } from '@/lib/server-utils';
|
||||
|
||||
export async function POST(request: NextRequest) {
|
||||
await dbDelay();
|
||||
|
||||
try {
|
||||
const body = await request.json();
|
||||
const { username, password } = body;
|
||||
|
||||
// Simple mock validation
|
||||
if (!username) {
|
||||
return errorResponse('Username is required');
|
||||
}
|
||||
|
||||
let role = 'Teacher';
|
||||
let name = '李明';
|
||||
let id = 'u-tea-1';
|
||||
|
||||
if (username === 'student' || username.startsWith('s')) {
|
||||
role = 'Student';
|
||||
name = '王小明';
|
||||
id = 'u-stu-1';
|
||||
} else if (username === 'admin') {
|
||||
role = 'Admin';
|
||||
name = '系统管理员';
|
||||
id = 'u-adm-1';
|
||||
}
|
||||
|
||||
const token = `mock-jwt-token-${id}-${Date.now()}`;
|
||||
|
||||
return successResponse({
|
||||
token,
|
||||
user: {
|
||||
id,
|
||||
realName: name,
|
||||
studentId: username,
|
||||
avatarUrl: `https://api.dicebear.com/7.x/avataaars/svg?seed=${name}`,
|
||||
gender: 'Male',
|
||||
schoolId: 's-1',
|
||||
role
|
||||
}
|
||||
});
|
||||
} catch (e) {
|
||||
return errorResponse('Invalid request body');
|
||||
}
|
||||
}
|
||||
28
src/app/api/auth/me/route.ts
Normal file
28
src/app/api/auth/me/route.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
|
||||
import { NextRequest } from 'next/server';
|
||||
import { successResponse, errorResponse, extractToken, dbDelay } from '@/lib/server-utils';
|
||||
|
||||
export async function GET(request: NextRequest) {
|
||||
await dbDelay();
|
||||
|
||||
const token = extractToken(request);
|
||||
if (!token) {
|
||||
return errorResponse('Unauthorized', 401);
|
||||
}
|
||||
|
||||
// In a real app, verify JWT here.
|
||||
// For mock, we return a default user or parse the mock token if it contained info.
|
||||
|
||||
return successResponse({
|
||||
id: "u-1",
|
||||
realName: "李明 (Real API)",
|
||||
studentId: "T2024001",
|
||||
avatarUrl: "https://api.dicebear.com/7.x/avataaars/svg?seed=Alex",
|
||||
gender: "Male",
|
||||
schoolId: "s-1",
|
||||
role: "Teacher",
|
||||
email: 'liming@school.edu',
|
||||
phone: '13800138000',
|
||||
bio: '来自真实 API 的数据'
|
||||
});
|
||||
}
|
||||
27
src/app/api/config/db/route.ts
Normal file
27
src/app/api/config/db/route.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
|
||||
import { NextRequest } from 'next/server';
|
||||
import { successResponse, errorResponse } from '@/lib/server-utils';
|
||||
import { db } from '@/lib/db';
|
||||
|
||||
export async function POST(request: NextRequest) {
|
||||
try {
|
||||
const body = await request.json();
|
||||
const { host, port, user, password, database } = body;
|
||||
|
||||
if (!host || !user) {
|
||||
return errorResponse('Missing required fields');
|
||||
}
|
||||
|
||||
await db.testConnection({
|
||||
host,
|
||||
port: Number(port),
|
||||
user,
|
||||
password,
|
||||
database
|
||||
});
|
||||
|
||||
return successResponse({ message: 'Connection successful' });
|
||||
} catch (e: any) {
|
||||
return errorResponse(e.message || 'Connection failed', 500);
|
||||
}
|
||||
}
|
||||
23
src/app/api/org/classes/route.ts
Normal file
23
src/app/api/org/classes/route.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
|
||||
import { NextRequest } from 'next/server';
|
||||
import { successResponse, dbDelay } from '@/lib/server-utils';
|
||||
|
||||
export async function GET(request: NextRequest) {
|
||||
await dbDelay();
|
||||
|
||||
const { searchParams } = new URL(request.url);
|
||||
const role = searchParams.get('role');
|
||||
|
||||
let classes = [
|
||||
{ id: 'c-1', name: '高一 (10) 班', gradeName: '高一年级', teacherName: '李明', studentCount: 32, inviteCode: 'X7K9P' },
|
||||
{ id: 'c-2', name: '高一 (12) 班', gradeName: '高一年级', teacherName: '张伟', studentCount: 28, inviteCode: 'M2L4Q' },
|
||||
{ id: 'c-3', name: 'AP 微积分先修班', gradeName: '高三年级', teacherName: '李明', studentCount: 15, inviteCode: 'Z9J1W' },
|
||||
{ id: 'c-4', name: '物理奥赛集训队', gradeName: '高二年级', teacherName: '王博士', studentCount: 20, inviteCode: 'H4R8T' },
|
||||
];
|
||||
|
||||
if (role === 'Student') {
|
||||
classes = classes.slice(0, 1);
|
||||
}
|
||||
|
||||
return successResponse(classes);
|
||||
}
|
||||
Reference in New Issue
Block a user