@studious-lms/server 1.0.4 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/API_SPECIFICATION.md +1117 -0
- package/dist/exportType.js +1 -2
- package/dist/index.js +25 -30
- package/dist/lib/fileUpload.d.ts.map +1 -1
- package/dist/lib/fileUpload.js +31 -29
- package/dist/lib/googleCloudStorage.js +9 -14
- package/dist/lib/prisma.js +4 -7
- package/dist/lib/thumbnailGenerator.js +12 -20
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +17 -22
- package/dist/middleware/logging.js +5 -9
- package/dist/routers/_app.d.ts +3483 -1801
- package/dist/routers/_app.d.ts.map +1 -1
- package/dist/routers/_app.js +28 -27
- package/dist/routers/agenda.d.ts +13 -8
- package/dist/routers/agenda.d.ts.map +1 -1
- package/dist/routers/agenda.js +14 -17
- package/dist/routers/announcement.d.ts +4 -3
- package/dist/routers/announcement.d.ts.map +1 -1
- package/dist/routers/announcement.js +28 -31
- package/dist/routers/assignment.d.ts +282 -196
- package/dist/routers/assignment.d.ts.map +1 -1
- package/dist/routers/assignment.js +256 -202
- package/dist/routers/attendance.d.ts +5 -4
- package/dist/routers/attendance.d.ts.map +1 -1
- package/dist/routers/attendance.js +31 -34
- package/dist/routers/auth.d.ts +1 -0
- package/dist/routers/auth.d.ts.map +1 -1
- package/dist/routers/auth.js +80 -75
- package/dist/routers/class.d.ts +284 -14
- package/dist/routers/class.d.ts.map +1 -1
- package/dist/routers/class.js +435 -164
- package/dist/routers/event.d.ts +47 -38
- package/dist/routers/event.d.ts.map +1 -1
- package/dist/routers/event.js +76 -79
- package/dist/routers/file.d.ts +71 -1
- package/dist/routers/file.d.ts.map +1 -1
- package/dist/routers/file.js +267 -32
- package/dist/routers/folder.d.ts +296 -0
- package/dist/routers/folder.d.ts.map +1 -0
- package/dist/routers/folder.js +693 -0
- package/dist/routers/notifications.d.ts +103 -0
- package/dist/routers/notifications.d.ts.map +1 -0
- package/dist/routers/notifications.js +91 -0
- package/dist/routers/school.d.ts +208 -0
- package/dist/routers/school.d.ts.map +1 -0
- package/dist/routers/school.js +481 -0
- package/dist/routers/section.d.ts +1 -0
- package/dist/routers/section.d.ts.map +1 -1
- package/dist/routers/section.js +30 -33
- package/dist/routers/user.d.ts +2 -1
- package/dist/routers/user.d.ts.map +1 -1
- package/dist/routers/user.js +21 -24
- package/dist/seedDatabase.d.ts +22 -0
- package/dist/seedDatabase.d.ts.map +1 -0
- package/dist/seedDatabase.js +57 -0
- package/dist/socket/handlers.js +26 -30
- package/dist/trpc.d.ts +5 -0
- package/dist/trpc.d.ts.map +1 -1
- package/dist/trpc.js +35 -26
- package/dist/types/trpc.js +1 -2
- package/dist/utils/email.js +2 -8
- package/dist/utils/generateInviteCode.js +1 -5
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +13 -9
- package/dist/utils/prismaErrorHandler.d.ts +9 -0
- package/dist/utils/prismaErrorHandler.d.ts.map +1 -0
- package/dist/utils/prismaErrorHandler.js +234 -0
- package/dist/utils/prismaWrapper.d.ts +14 -0
- package/dist/utils/prismaWrapper.d.ts.map +1 -0
- package/dist/utils/prismaWrapper.js +64 -0
- package/package.json +17 -4
- package/prisma/migrations/20250807062924_init/migration.sql +436 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +67 -0
- package/src/index.ts +2 -2
- package/src/lib/fileUpload.ts +16 -7
- package/src/middleware/auth.ts +0 -2
- package/src/routers/_app.ts +5 -1
- package/src/routers/assignment.ts +82 -22
- package/src/routers/auth.ts +80 -54
- package/src/routers/class.ts +330 -36
- package/src/routers/file.ts +283 -20
- package/src/routers/folder.ts +755 -0
- package/src/routers/notifications.ts +93 -0
- package/src/seedDatabase.ts +66 -0
- package/src/socket/handlers.ts +4 -4
- package/src/trpc.ts +13 -0
- package/src/utils/logger.ts +14 -4
- package/src/utils/prismaErrorHandler.ts +275 -0
- package/src/utils/prismaWrapper.ts +91 -0
- package/tests/auth.test.ts +25 -0
- package/tests/class.test.ts +281 -0
- package/tests/setup.ts +98 -0
- package/tests/startup.test.ts +5 -0
- package/tsconfig.json +2 -1
- package/vitest.config.ts +11 -0
- package/dist/logger.d.ts +0 -26
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -135
- package/src/logger.ts +0 -163
package/src/logger.ts
DELETED
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
export enum LogLevel {
|
|
2
|
-
INFO = 'info',
|
|
3
|
-
WARN = 'warn',
|
|
4
|
-
ERROR = 'error',
|
|
5
|
-
DEBUG = 'debug'
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
type LogMode = 'silent' | 'minimal' | 'normal' | 'verbose';
|
|
9
|
-
|
|
10
|
-
interface LogMessage {
|
|
11
|
-
level: LogLevel;
|
|
12
|
-
message: string;
|
|
13
|
-
timestamp: string;
|
|
14
|
-
context?: Record<string, any>;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
// Environment detection
|
|
18
|
-
const isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;
|
|
19
|
-
const isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';
|
|
20
|
-
|
|
21
|
-
// ANSI color codes for Node.js
|
|
22
|
-
const ansiColors = {
|
|
23
|
-
reset: '\x1b[0m',
|
|
24
|
-
bright: '\x1b[1m',
|
|
25
|
-
dim: '\x1b[2m',
|
|
26
|
-
red: '\x1b[31m',
|
|
27
|
-
green: '\x1b[32m',
|
|
28
|
-
yellow: '\x1b[33m',
|
|
29
|
-
blue: '\x1b[34m',
|
|
30
|
-
magenta: '\x1b[35m',
|
|
31
|
-
cyan: '\x1b[36m',
|
|
32
|
-
white: '\x1b[37m',
|
|
33
|
-
gray: '\x1b[90m'
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
// CSS color codes for browser console
|
|
37
|
-
const cssColors = {
|
|
38
|
-
reset: '%c',
|
|
39
|
-
info: 'color: #2196F3; font-weight: bold;',
|
|
40
|
-
warn: 'color: #FFC107; font-weight: bold;',
|
|
41
|
-
error: 'color: #F44336; font-weight: bold;',
|
|
42
|
-
debug: 'color: #9C27B0; font-weight: bold;',
|
|
43
|
-
gray: 'color: #9E9E9E;',
|
|
44
|
-
context: 'color: #757575; font-style: italic;'
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
class Logger {
|
|
48
|
-
private static instance: Logger;
|
|
49
|
-
private isDevelopment: boolean;
|
|
50
|
-
private mode: LogMode;
|
|
51
|
-
private levelEmojis: Record<LogLevel, string>;
|
|
52
|
-
|
|
53
|
-
private constructor() {
|
|
54
|
-
this.isDevelopment = process.env.NODE_ENV === 'development';
|
|
55
|
-
this.mode = (process.env.LOG_MODE as LogMode) || 'normal';
|
|
56
|
-
|
|
57
|
-
this.levelEmojis = {
|
|
58
|
-
[LogLevel.INFO]: 'ℹ️',
|
|
59
|
-
[LogLevel.WARN]: '⚠️',
|
|
60
|
-
[LogLevel.ERROR]: '❌',
|
|
61
|
-
[LogLevel.DEBUG]: '🔍'
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
public static getInstance(): Logger {
|
|
66
|
-
if (!Logger.instance) {
|
|
67
|
-
Logger.instance = new Logger();
|
|
68
|
-
}
|
|
69
|
-
return Logger.instance;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
public setMode(mode: LogMode) {
|
|
73
|
-
this.mode = mode;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
private shouldLog(level: LogLevel): boolean {
|
|
77
|
-
const silent = [LogLevel.ERROR];
|
|
78
|
-
const minimal = [LogLevel.ERROR, LogLevel.WARN];
|
|
79
|
-
const normal = [LogLevel.ERROR, LogLevel.WARN, LogLevel.INFO];
|
|
80
|
-
|
|
81
|
-
if (this.mode === 'silent') return silent.includes(level);
|
|
82
|
-
if (this.mode === 'minimal') return minimal.includes(level);
|
|
83
|
-
if (this.mode === 'normal') return normal.includes(level);
|
|
84
|
-
return true; // verbose mode
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
private formatMessage(logMessage: LogMessage): string | [string, ...string[]] {
|
|
88
|
-
const { level, message, timestamp, context } = logMessage;
|
|
89
|
-
const emoji = this.levelEmojis[level];
|
|
90
|
-
|
|
91
|
-
const timestampStr = `[${timestamp}]`;
|
|
92
|
-
const levelStr = `[${level.toUpperCase()}]`;
|
|
93
|
-
const messageStr = `${emoji} ${message}`;
|
|
94
|
-
|
|
95
|
-
const contextStr = context
|
|
96
|
-
? `\nContext: ${JSON.stringify(context, null, 2)}`
|
|
97
|
-
: '';
|
|
98
|
-
|
|
99
|
-
if (isNode) {
|
|
100
|
-
const color = ansiColors[level === LogLevel.INFO ? 'blue' :
|
|
101
|
-
level === LogLevel.WARN ? 'yellow' :
|
|
102
|
-
level === LogLevel.ERROR ? 'red' : 'magenta'];
|
|
103
|
-
|
|
104
|
-
return `${ansiColors.gray}${timestampStr}${ansiColors.reset} ${color}${levelStr}${ansiColors.reset} ${messageStr}${contextStr}`;
|
|
105
|
-
} else {
|
|
106
|
-
const color = cssColors[level];
|
|
107
|
-
return [
|
|
108
|
-
`${timestampStr} ${levelStr} ${messageStr}${contextStr}`,
|
|
109
|
-
cssColors.reset,
|
|
110
|
-
color,
|
|
111
|
-
cssColors.gray,
|
|
112
|
-
cssColors.context
|
|
113
|
-
];
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
private log(level: LogLevel, message: string, context?: Record<string, any>) {
|
|
118
|
-
if (!this.shouldLog(level)) return;
|
|
119
|
-
|
|
120
|
-
const logMessage: LogMessage = {
|
|
121
|
-
level,
|
|
122
|
-
message,
|
|
123
|
-
timestamp: new Date().toISOString(),
|
|
124
|
-
context
|
|
125
|
-
};
|
|
126
|
-
|
|
127
|
-
const formattedMessage = this.formatMessage(logMessage);
|
|
128
|
-
|
|
129
|
-
switch (level) {
|
|
130
|
-
case LogLevel.ERROR:
|
|
131
|
-
console.error(...(Array.isArray(formattedMessage) ? formattedMessage : [formattedMessage]));
|
|
132
|
-
break;
|
|
133
|
-
case LogLevel.WARN:
|
|
134
|
-
console.warn(...(Array.isArray(formattedMessage) ? formattedMessage : [formattedMessage]));
|
|
135
|
-
break;
|
|
136
|
-
case LogLevel.DEBUG:
|
|
137
|
-
if (this.isDevelopment) {
|
|
138
|
-
console.debug(...(Array.isArray(formattedMessage) ? formattedMessage : [formattedMessage]));
|
|
139
|
-
}
|
|
140
|
-
break;
|
|
141
|
-
default:
|
|
142
|
-
console.log(...(Array.isArray(formattedMessage) ? formattedMessage : [formattedMessage]));
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
public info(message: string, context?: Record<string, any>) {
|
|
147
|
-
this.log(LogLevel.INFO, message, context);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
public warn(message: string, context?: Record<string, any>) {
|
|
151
|
-
this.log(LogLevel.WARN, message, context);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
public error(message: string, context?: Record<string, any>) {
|
|
155
|
-
this.log(LogLevel.ERROR, message, context);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
public debug(message: string, context?: Record<string, any>) {
|
|
159
|
-
this.log(LogLevel.DEBUG, message, context);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
export const logger = Logger.getInstance();
|