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;
}