File size: 1,188 Bytes
b435029
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import type { StudioRender, StudioRenderStore } from '../domain/types'

export class InMemoryStudioRenderStore implements StudioRenderStore {
  private readonly renders = new Map<string, StudioRender>()

  async create(render: StudioRender): Promise<StudioRender> {
    this.renders.set(render.id, render)
    return render
  }

  async getById(ownerId: string, renderId: string): Promise<StudioRender | null> {
    const render = this.renders.get(renderId)
    return render?.ownerId === ownerId ? render : null
  }

  async update(ownerId: string, renderId: string, patch: Partial<StudioRender>): Promise<StudioRender | null> {
    const current = await this.getById(ownerId, renderId)
    if (!current) {
      return null
    }

    const next = {
      ...current,
      ...patch,
      updatedAt: new Date().toISOString(),
    }
    this.renders.set(renderId, next)
    return next
  }

  async listBySessionId(ownerId: string, sessionId: string): Promise<StudioRender[]> {
    return [...this.renders.values()]
      .filter((render) => render.ownerId === ownerId && render.sessionId === sessionId)
      .sort((left, right) => left.createdAt.localeCompare(right.createdAt))
  }
}