diff options
Diffstat (limited to 'src/frontend/gateways/Session.gateway.ts')
| -rw-r--r-- | src/frontend/gateways/Session.gateway.ts | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/frontend/gateways/Session.gateway.ts b/src/frontend/gateways/Session.gateway.ts new file mode 100644 index 0000000..d5791b5 --- /dev/null +++ b/src/frontend/gateways/Session.gateway.ts @@ -0,0 +1,33 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +import { v4 } from 'uuid'; + +interface ISession { + userId: string; + currencyCode: string; +} + +const sessionKey = 'session'; +const defaultSession = { + userId: v4(), + currencyCode: 'USD', +}; + +const SessionGateway = () => ({ + getSession(): ISession { + if (typeof window === 'undefined') return defaultSession; + const sessionString = localStorage.getItem(sessionKey); + + if (!sessionString) localStorage.setItem(sessionKey, JSON.stringify(defaultSession)); + + return JSON.parse(sessionString || JSON.stringify(defaultSession)) as ISession; + }, + setSessionValue<K extends keyof ISession>(key: K, value: ISession[K]) { + const session = this.getSession(); + + localStorage.setItem(sessionKey, JSON.stringify({ ...session, [key]: value })); + }, +}); + +export default SessionGateway(); |
