Create creates a new session.
(ctx context.Context, req *session.CreateRequest)
| 105 | |
| 106 | // Create creates a new session. |
| 107 | func (s *Service) Create(ctx context.Context, req *session.CreateRequest) (session.Session, error) { |
| 108 | s.mu.Lock() |
| 109 | defer s.mu.Unlock() |
| 110 | |
| 111 | id := uuid.New().String() |
| 112 | now := time.Now() |
| 113 | |
| 114 | metadata, err := json.Marshal(req.Metadata) |
| 115 | if err != nil { |
| 116 | return nil, fmt.Errorf("marshal metadata: %w", err) |
| 117 | } |
| 118 | |
| 119 | _, err = s.db.ExecContext(ctx, |
| 120 | `INSERT INTO sessions (id, app_name, user_id, agent_id, metadata, created_at, updated_at) |
| 121 | VALUES (?, ?, ?, ?, ?, ?, ?)`, |
| 122 | id, req.AppName, req.UserID, req.AgentID, string(metadata), now, now, |
| 123 | ) |
| 124 | if err != nil { |
| 125 | return nil, fmt.Errorf("insert session: %w", err) |
| 126 | } |
| 127 | |
| 128 | return &sqliteSession{ |
| 129 | service: s, |
| 130 | id: id, |
| 131 | appName: req.AppName, |
| 132 | userID: req.UserID, |
| 133 | agentID: req.AgentID, |
| 134 | metadata: req.Metadata, |
| 135 | lastUpdateTime: now, |
| 136 | }, nil |
| 137 | } |
| 138 | |
| 139 | // Get retrieves a session by ID. |
| 140 | func (s *Service) Get(ctx context.Context, req *session.GetRequest) (session.Session, error) { |