init static method

Future<Session?> init(
  1. HttpRequest request
)

Implementation

static Future<Session?> init(HttpRequest request) async {
  final cookie = request.cookies.firstWhereOrNull((cookie) => cookie.name == "archery_guest_session");
  final sessions = App().tryMake<List<Session>>();

  if (cookie == null) {
    final session = Session(token: App.generateKey());
    await session.save();
    sessions?.add(session);
    request.cookies.add(Cookie("archery_guest_session", session.token));
    request.response.cookies.add(Cookie("archery_guest_session", session.token));
    return session;
  } else {
    final session = sessions?.firstWhereOrNull((session) => session.token == cookie.value);
    if (session != null) {
      session.lastActivity = DateTime.now();
      await session.save();
      request.cookies.add(Cookie("archery_guest_session", session.token));
      request.response.cookies.add(Cookie("archery_guest_session", session.token));
      return session;
    }
  }

  if (sessions != null && sessions.isEmpty) {
    final sessionRecord = await Model.firstWhere<Session>(field: "token", value: cookie.value);

    if (sessionRecord != null) {
      sessionRecord.lastActivity = DateTime.now();
      await sessionRecord.save();
      sessions.add(sessionRecord);
      request.cookies.add(Cookie("archery_guest_session", sessionRecord.token));
      request.response.cookies.add(Cookie("archery_guest_session", sessionRecord.token));
      return sessionRecord;
    } else {
      final session = Session(token: App.generateKey());
      await session.save();
      sessions.add(session);
      request.cookies.add(Cookie("archery_guest_session", session.token));
      request.response.cookies.add(Cookie("archery_guest_session", session.token));
      return session;
    }
  }

  return null;
}