# All files / src/db/repositories/drizzle log-chunk.ts

16.66% Statements 1/6
0% Branches 0/2
20% Functions 1/5
16.66% Lines 1/6

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59

    80x

     /**
     * Drizzle Log Chunk Repository Adapter
     *
     * Implements LogChunkRepository interface using Drizzle ORM.
     */

    import { eq, asc, max } from 'drizzle-orm';
    import { nanoid } from 'nanoid';
    import type { DrizzleDatabase } from '../../index.js';
    import { agentLogChunks } from '../../schema.js';
    import type { LogChunkRepository } from '../log-chunk-repository.js';

    export class DrizzleLogChunkRepository implements LogChunkRepository {
      constructor(private db: DrizzleDatabase) {}

      async insertChunk(data: {
        agentId: string;
        agentName: string;
        sessionNumber: number;
        content: string;
      }): Promise<void> {
        await this.db.insert(agentLogChunks).values({
          id: nanoid(),
          agentId: data.agentId,
          agentName: data.agentName,
          sessionNumber: data.sessionNumber,
          content: data.content,
          createdAt: new Date(),
        });
      }

      async findByAgentId(agentId: string): Promise<{ content: string; sessionNumber: number; createdAt: Date }[]> {
        return this.db
          .select({
            content: agentLogChunks.content,
            sessionNumber: agentLogChunks.sessionNumber,
            createdAt: agentLogChunks.createdAt,
          })
          .from(agentLogChunks)
          .where(eq(agentLogChunks.agentId, agentId))
          .orderBy(asc(agentLogChunks.createdAt));
      }

      async deleteByAgentId(agentId: string): Promise<void> {
        await this.db
          .delete(agentLogChunks)
          .where(eq(agentLogChunks.agentId, agentId));
      }

      async getSessionCount(agentId: string): Promise<number> {
        const result = await this.db
          .select({ maxSession: max(agentLogChunks.sessionNumber) })
          .from(agentLogChunks)
          .where(eq(agentLogChunks.agentId, agentId));

        return result[0]?.maxSession ?? 0;
      }
    }