mirror of
https://github.com/SECTL/SecScore.git
synced 2026-07-21 18:19:03 +08:00
feat: 初始化SecScore项目基础结构
- 添加Electron + React + TypeScript基础框架 - 实现学生管理、积分流水、理由管理功能 - 添加主题切换和暗黑模式支持 - 配置数据库和WebSocket同步功能 - 完善项目文档和构建配置
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import { Database } from 'better-sqlite3';
|
||||
|
||||
export interface Student {
|
||||
id: number;
|
||||
name: string;
|
||||
score: number;
|
||||
extra_json?: string;
|
||||
}
|
||||
|
||||
export class StudentRepository {
|
||||
constructor(private db: Database) {}
|
||||
|
||||
findAll() {
|
||||
return this.db.prepare('SELECT * FROM students ORDER BY score DESC, name ASC').all() as Student[];
|
||||
}
|
||||
|
||||
create(student: { name: string }) {
|
||||
const info = this.db.prepare(
|
||||
'INSERT INTO students (name) VALUES (?)'
|
||||
).run(student.name);
|
||||
return info.lastInsertRowid as number;
|
||||
}
|
||||
|
||||
update(id: number, student: Partial<Student>) {
|
||||
const sets: string[] = [];
|
||||
const vals: any[] = [];
|
||||
Object.entries(student).forEach(([key, val]) => {
|
||||
if (key !== 'id') {
|
||||
sets.push(`${key} = ?`);
|
||||
vals.push(val);
|
||||
}
|
||||
});
|
||||
vals.push(id);
|
||||
this.db.prepare(`UPDATE students SET ${sets.join(', ')}, updated_at = CURRENT_TIMESTAMP WHERE id = ?`).run(...vals);
|
||||
}
|
||||
|
||||
delete(id: number) {
|
||||
this.db.transaction(() => {
|
||||
this.db.prepare('DELETE FROM score_events WHERE student_id = ?').run(id);
|
||||
this.db.prepare('DELETE FROM students WHERE id = ?').run(id);
|
||||
})();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user