init static method
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;
}