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))
}
}
|