initial commit
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
import AsyncStorage from '@react-native-async-storage/async-storage';
|
||||
import { Classe } from './models';
|
||||
|
||||
const STORAGE_KEY = '@tirage_classes:classes';
|
||||
|
||||
/** Charge toutes les classes depuis le stockage local (offline), sous forme d'instances Classe. */
|
||||
export async function chargerClasses() {
|
||||
const brut = await AsyncStorage.getItem(STORAGE_KEY);
|
||||
if (!brut) return [];
|
||||
try {
|
||||
const donnees = JSON.parse(brut);
|
||||
return donnees.map((c) => Classe.fromJSON(c));
|
||||
} catch (e) {
|
||||
console.warn('Données locales corrompues, réinitialisation.', e);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
async function sauvegarderClasses(classes) {
|
||||
await AsyncStorage.setItem(STORAGE_KEY, JSON.stringify(classes.map((c) => c.toJSON())));
|
||||
}
|
||||
|
||||
export async function obtenirClasse(id) {
|
||||
const classes = await chargerClasses();
|
||||
return classes.find((c) => c.id === id) || null;
|
||||
}
|
||||
|
||||
export async function creerClasse({ nom, nombreEleves, ponderationMax }) {
|
||||
const classes = await chargerClasses();
|
||||
const nouvelle = new Classe({ nom: nom.trim(), nombreEleves, ponderationMax });
|
||||
classes.push(nouvelle);
|
||||
await sauvegarderClasses(classes);
|
||||
return nouvelle;
|
||||
}
|
||||
|
||||
export async function modifierClasse(id, { nom, nombreEleves, ponderationMax }) {
|
||||
const classes = await chargerClasses();
|
||||
const classe = classes.find((c) => c.id === id);
|
||||
if (!classe) throw new Error('Classe introuvable');
|
||||
classe.nom = nom.trim();
|
||||
classe.nombreEleves = Number(nombreEleves);
|
||||
classe.ponderationMax = Number(ponderationMax) || 2;
|
||||
await sauvegarderClasses(classes);
|
||||
return classe;
|
||||
}
|
||||
|
||||
export async function supprimerClasse(id) {
|
||||
const classes = await chargerClasses();
|
||||
await sauvegarderClasses(classes.filter((c) => c.id !== id));
|
||||
}
|
||||
|
||||
/** Effectue un tirage pondéré sur la classe et persiste le résultat. */
|
||||
export async function effectuerTirage(classeId) {
|
||||
const classes = await chargerClasses();
|
||||
const classe = classes.find((c) => c.id === classeId);
|
||||
if (!classe) throw new Error('Classe introuvable');
|
||||
classe.tirer();
|
||||
await sauvegarderClasses(classes);
|
||||
return classe;
|
||||
}
|
||||
|
||||
/** Annule le dernier tirage et en effectue immédiatement un nouveau (bouton "Re-tirer"). */
|
||||
export async function reTirer(classeId) {
|
||||
const classes = await chargerClasses();
|
||||
const classe = classes.find((c) => c.id === classeId);
|
||||
if (!classe) throw new Error('Classe introuvable');
|
||||
classe.reTirer();
|
||||
await sauvegarderClasses(classes);
|
||||
return classe;
|
||||
}
|
||||
Reference in New Issue
Block a user