1from __future__ import annotations
2
3from datetime import datetime
4
5from plain import models
6from plain.models import types
7
8__all__ = ["Session"]
9
10
11@models.register_model
12class Session(models.Model):
13 session_key: str = types.CharField(max_length=40)
14 session_data: dict = types.JSONField(default=dict, required=False)
15 created_at: datetime = types.DateTimeField(auto_now_add=True)
16 expires_at: datetime | None = types.DateTimeField(allow_null=True)
17
18 query: models.QuerySet[Session] = models.QuerySet()
19
20 model_options = models.Options(
21 indexes=[
22 models.Index(fields=["expires_at"]),
23 ],
24 constraints=[
25 models.UniqueConstraint(fields=["session_key"], name="unique_session_key")
26 ],
27 )
28
29 def __str__(self) -> str:
30 return self.session_key