fix : rejoindre avec un pseudo existant reconnecte ce membre au lieu d'en créer un doublon
- joinClass vérifie si un membre porte déjà ce pseudo dans la classe - Si oui : nouveau jeton + retourne le rôle existant (admin conservé) - Si non : création d'un nouvel élève - L'admin peut se reconnecter avec son pseudo pour retrouver ses droits
This commit is contained in:
parent
bf22f65f91
commit
0cc4b9841a
1 changed files with 26 additions and 5 deletions
|
|
@ -61,19 +61,40 @@ export function createClass(name: string, level: string | null, nickname: string
|
|||
|
||||
export function joinClass(code: string, nickname: string): NewSession | null {
|
||||
const row = db
|
||||
.prepare<[string], { id: number; name: string; level: string | null }>(
|
||||
'SELECT id, name, level FROM classes WHERE code = ?',
|
||||
.prepare<[string], { id: number; name: string; level: string | null; flash_message: string | null }>(
|
||||
'SELECT id, name, level, flash_message FROM classes WHERE code = ?',
|
||||
)
|
||||
.get(code)
|
||||
if (!row) return null
|
||||
|
||||
// Si un membre porte déjà ce pseudo dans la classe, on lui rouvre une
|
||||
// session (nouveau jeton) au lieu de créer un doublon. L'admin peut ainsi
|
||||
// se reconnecter avec son pseudo pour retrouver ses droits.
|
||||
const existing = db
|
||||
.prepare<[number, string], { id: number; role: Role; is_creator: number }>(
|
||||
'SELECT id, role, is_creator FROM members WHERE class_id = ? AND nickname = ?',
|
||||
)
|
||||
.get(row.id, nickname)
|
||||
|
||||
const klass: ClassInfo = { id: row.id, name: row.name, level: row.level, flashMessage: row.flash_message }
|
||||
const token = newToken()
|
||||
|
||||
if (existing) {
|
||||
db.prepare('UPDATE members SET token = ? WHERE id = ?').run(token, existing.id)
|
||||
return {
|
||||
token,
|
||||
member: { id: existing.id, classId: row.id, nickname, role: existing.role, isCreator: existing.is_creator === 1 },
|
||||
klass,
|
||||
}
|
||||
}
|
||||
|
||||
const memberId = db
|
||||
.prepare('INSERT INTO members (class_id, nickname, role, token, created_at) VALUES (?, ?, ?, ?, ?)')
|
||||
.run(row.id, nickname, 'student', token, nowIso()).lastInsertRowid as number
|
||||
.prepare('INSERT INTO members (class_id, nickname, role, is_creator, token, created_at) VALUES (?, ?, ?, ?, ?, ?)')
|
||||
.run(row.id, nickname, 'student', 0, token, nowIso()).lastInsertRowid as number
|
||||
return {
|
||||
token,
|
||||
member: { id: memberId, classId: row.id, nickname, role: 'student', isCreator: false },
|
||||
klass: { id: row.id, name: row.name, level: row.level, flashMessage: null },
|
||||
klass,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue