Directus : champ supplémentaire aux Users

Hello,

J’ai besoin de travailler avec une table Users plus élaborées dans Directus (avec des champs supplémentaires). Suite à un coaching avec @mbritto, je prends donc le partir suivant :

Un model qui étends DirectusUser (car les champs ne sont pas directement accessibles via l’api puisqu’ils sont personnalisés) :

import 'package:directus_api_manager/directus_api_manager.dart';


class UsersDetails extends DirectusUser {

  UsersDetails(super.rawReceivedData);

  String get rs => getValue(forKey: "raison_sociale");
  bool get autorised => getValue(forKey: "is_autorised");
  set autorised(bool value) => setValue(value, forKey: "is_autorised");
  bool get isAdmin => getValue(forKey: "is_admin");
  DateTime get inscription => getDateTime(forKey: "date_inscription");
}

et j’utilise un useCases (fonction de base et interrogations Directus) relié à mon ViewModel, or je ne parviens pas à comprendre la logique d’update des champs :

 @override
  void updateSessionById(String manager, bool status) async {
    UsersDetails? myManager =
        await _apiManager.getDirectusUser(manager);
    myManager.getValue(forKey: "is_autorised") = status;
    await _apiManager.updateDirectusUser(myManager);
  }

Cette fonction est fausse, car notamment, je ne sais jamais si je dois utiliser le type ‹ UserDetails › ou ‹ DirectusUser ›, l’un appel le updateDirectusUser et l’autre updateItem

Merci !

Solution simple : pas besoin de créer un model supplementaire au DirectusUser :

@override
  void updateSessionById(String manager, bool status) async {
    DirectusUser myUser = DirectusUser(_directusUser.getRawData());
    myUser = (await _apiManager.getDirectusUser(manager))!;
    myUser.setValue(status, forKey: "is_autorised");
    await _apiManager.updateDirectusUser(updatedUser: myUser);
  }
1 « J'aime »

Tu peux utiliser les fonction ‹ getValue › et ‹ setValue › directement ou tu peux utiliser ton objet à toi pour avoir un code plus encapsulé.

Voici comment tu peux créer ton objet UserDetails à partir de l’objet DirectusUser :

UserDetails? currentUser;
try {
  final directusUser = await directusApiManager.currentDirectusUser();
  if (directusUser != null) {
    currentUser = UserDetails(directusUser.getRawData());
  }
} catch (error) {
  print(error);
}
1 « J'aime »