import BrandColor from '#models/brand_color'; import BrandFont from '#models/brand_font'; import Fanart from '#models/fanart'; import Game from '#models/game'; import Profile from '#models/profile'; import SocialLink from '#models/social_link'; import Tag from '#models/tag'; export default class BackupsController { async export({ response }) { const [profile, tags, games, socialLinks, fanarts, brandColors, brandFonts] = await Promise.all([ Profile.first(), Tag.all(), Game.query().orderBy('sort_order', 'asc'), SocialLink.all(), Fanart.query().orderBy('sort_order', 'asc'), BrandColor.all(), BrandFont.all(), ]); return response.json({ version: 1, exportedAt: new Date().toISOString(), profile: profile?.serialize(), tags: tags.map((t) => ({ name: t.name })), games: games.map((g) => ({ name: g.name, icon: g.icon, type: g.type, sortOrder: g.sortOrder })), socialLinks: socialLinks.map((s) => ({ platform: s.platform, url: s.url, username: s.username, icon: s.icon, color: s.color })), fanarts: fanarts.map((f) => ({ title: f.title, author: f.author, imageUrl: f.imageUrl, sortOrder: f.sortOrder })), brand: { colors: brandColors.map((c) => ({ name: c.name, hex: c.hex })), fonts: brandFonts.map((f) => ({ name: f.name })), }, }); } async restore({ request, response }) { const backup = request.body(); if (backup.profile) { await Profile.truncate(); const { name, avatarUrl, title, description, aboutText, backgroundImageUrl } = backup.profile; await Profile.create({ name, avatarUrl, title, description, aboutText, backgroundImageUrl }); } if (Array.isArray(backup.tags)) { await Tag.truncate(); await Tag.createMany(backup.tags.map((t) => ({ name: t.name }))); } if (Array.isArray(backup.games)) { await Game.truncate(); await Game.createMany(backup.games.map((g) => ({ name: g.name, icon: g.icon, type: g.type, sortOrder: g.sortOrder }))); } if (Array.isArray(backup.socialLinks)) { await SocialLink.truncate(); await SocialLink.createMany(backup.socialLinks.map((s) => ({ platform: s.platform, url: s.url, username: s.username, icon: s.icon, color: s.color }))); } if (Array.isArray(backup.fanarts)) { await Fanart.truncate(); await Fanart.createMany(backup.fanarts.map((f) => ({ title: f.title, author: f.author, imageUrl: f.imageUrl, sortOrder: f.sortOrder }))); } if (backup.brand?.colors) { await BrandColor.truncate(); await BrandColor.createMany(backup.brand.colors.map((c) => ({ name: c.name, hex: c.hex }))); } if (backup.brand?.fonts) { await BrandFont.truncate(); await BrandFont.createMany(backup.brand.fonts.map((f) => ({ name: f.name }))); } return response.json({ success: true, restoredAt: new Date().toISOString() }); } } //# sourceMappingURL=backups_controller.js.map