/* Galvanic Corrosion - Rec Room custom server for communities. Copyright (C) 2025 @zombieb (Discord / proxnet Gitea) This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ import { Redis } from "../../db.ts"; import { ProfileContentManager } from "./base/profilemanagerbase.ts"; export interface AvatarSettings { OutfitSelections: string, HairColor: string, SkinColor: string, FaceFeatures: string } export class ProfileAvatarManager extends ProfileContentManager { #rootKey = Redis.buildKey( Redis.KeyGroups.Profiles.Root, this.profileId.toString(), Redis.KeyGroups.Profiles.Avatar.Root ); async setAvatar(settings: AvatarSettings) { const keys = Redis.KeyGroups.Profiles.Avatar; await Promise.all([ Redis.Database.set(Redis.buildKey(this.#rootKey, keys.Outfit), settings.OutfitSelections), Redis.Database.set(Redis.buildKey(this.#rootKey, keys.Hair), settings.HairColor), Redis.Database.set(Redis.buildKey(this.#rootKey, keys.Skin), settings.SkinColor), Redis.Database.set(Redis.buildKey(this.#rootKey, keys.Face), settings.FaceFeatures), ]); } async getAvatar() { const keys = Redis.KeyGroups.Profiles.Avatar; const [outfit, hair, skin, face] = await Promise.all([ Redis.Database.get(Redis.buildKey(this.#rootKey, keys.Outfit)), Redis.Database.get(Redis.buildKey(this.#rootKey, keys.Hair)), Redis.Database.get(Redis.buildKey(this.#rootKey, keys.Skin)), Redis.Database.get(Redis.buildKey(this.#rootKey, keys.Face)) ]); return { OutfitSelections: outfit ?? "", HairColor: hair ?? "", SkinColor: skin ?? "", FaceFeatures: face ?? "" } as AvatarSettings; } }