67 lines
3.2 KiB
JavaScript
67 lines
3.2 KiB
JavaScript
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 } = backup.profile;
|
|
await Profile.create({ name, avatarUrl, title, description, aboutText });
|
|
}
|
|
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
|