From e5fd15ba40adb9187150ad2f7985e1d917a72c6c Mon Sep 17 00:00:00 2001 From: Silvano Cerza Date: Thu, 9 Jan 2025 13:46:35 +0100 Subject: [PATCH] Add EventsConsumer --- src/events/consumer.ts | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/events/consumer.ts diff --git a/src/events/consumer.ts b/src/events/consumer.ts new file mode 100644 index 0000000..6aad84c --- /dev/null +++ b/src/events/consumer.ts @@ -0,0 +1,37 @@ +import GithubClient from "src/github/client"; +import { type Event } from "./types"; +import MetadataStore from "src/metadata-store"; + +export default class EventsConsumer { + constructor( + private readonly client: GithubClient, + private readonly metadataStore: MetadataStore, + private readonly owner: string, + private readonly repo: string, + private readonly branch: string, + ) {} + + async process(event: Event): Promise { + if (event.type == "create" || event.type == "modify") { + const res = await this.client.uploadFile( + this.owner, + this.repo, + this.branch, + event.filePath, + ); + // Reset dirty state + this.metadataStore.data[event.filePath].dirty = false; + this.metadataStore.save(); + } else if (event.type == "delete") { + const res = await this.client.deleteFile( + this.owner, + this.repo, + this.branch, + event.filePath, + ); + // File has been deleted, no need to keep track of it anymore + delete this.metadataStore.data[event.filePath]; + this.metadataStore.save(); + } + } +}