feat: Implemented launching and downloading of roms

This is just an initial implementation lots of kings to iron out
This commit is contained in:
Simeon Radivoev 2026-02-19 16:10:29 +02:00
parent ef08fa6114
commit f15bf9a1e0
Signed by: simeonradivoev
GPG key ID: 7611A451D2A5D37A
117 changed files with 37776 additions and 1073 deletions

View file

@ -0,0 +1,65 @@
CREATE TABLE `collections` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`name` text
);
--> statement-breakpoint
CREATE TABLE `collections_games` (
`collection_id` integer NOT NULL,
`game_id` integer NOT NULL,
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
FOREIGN KEY (`collection_id`) REFERENCES `collections`(`id`) ON UPDATE cascade ON DELETE cascade,
FOREIGN KEY (`game_id`) REFERENCES `games`(`id`) ON UPDATE cascade ON DELETE cascade
);
--> statement-breakpoint
CREATE TABLE `games` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`source_id` integer,
`source` text,
`igdb_id` integer,
`name` text,
`ra_id` integer,
`path_fs` text,
`last_played` integer,
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
`metadata` text DEFAULT '{}',
`slug` text,
`platform_id` integer NOT NULL,
`cover` blob,
`type` text,
`summary` text,
FOREIGN KEY (`platform_id`) REFERENCES `platforms`(`id`) ON UPDATE cascade ON DELETE no action
);
--> statement-breakpoint
CREATE UNIQUE INDEX `games_source_id_unique` ON `games` (`source_id`);--> statement-breakpoint
CREATE UNIQUE INDEX `games_igdb_id_unique` ON `games` (`igdb_id`);--> statement-breakpoint
CREATE UNIQUE INDEX `games_ra_id_unique` ON `games` (`ra_id`);--> statement-breakpoint
CREATE UNIQUE INDEX `games_slug_unique` ON `games` (`slug`);--> statement-breakpoint
CREATE TABLE `platforms` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`igdb_id` integer,
`igdb_slug` text,
`moby_id` integer,
`name` text NOT NULL,
`es_slug` text,
`ra_id` integer,
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
`slug` text NOT NULL,
`metadata` text,
`cover` blob,
`type` text,
`family_name` text
);
--> statement-breakpoint
CREATE UNIQUE INDEX `platforms_igdb_id_unique` ON `platforms` (`igdb_id`);--> statement-breakpoint
CREATE UNIQUE INDEX `platforms_igdb_slug_unique` ON `platforms` (`igdb_slug`);--> statement-breakpoint
CREATE UNIQUE INDEX `platforms_moby_id_unique` ON `platforms` (`moby_id`);--> statement-breakpoint
CREATE UNIQUE INDEX `platforms_es_slug_unique` ON `platforms` (`es_slug`);--> statement-breakpoint
CREATE UNIQUE INDEX `platforms_ra_id_unique` ON `platforms` (`ra_id`);--> statement-breakpoint
CREATE UNIQUE INDEX `platforms_slug_unique` ON `platforms` (`slug`);--> statement-breakpoint
CREATE TABLE `screenshots` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`game_id` integer,
`content` blob NOT NULL,
`type` text,
FOREIGN KEY (`game_id`) REFERENCES `games`(`id`) ON UPDATE cascade ON DELETE cascade
);

View file

@ -0,0 +1,458 @@
{
"version": "6",
"dialect": "sqlite",
"id": "673fe5dc-58a5-495b-8fb1-104e7945e90b",
"prevId": "00000000-0000-0000-0000-000000000000",
"tables": {
"collections": {
"name": "collections",
"columns": {
"id": {
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": true,
"autoincrement": true
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"collections_games": {
"name": "collections_games",
"columns": {
"collection_id": {
"name": "collection_id",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"game_id": {
"name": "game_id",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "(unixepoch())"
}
},
"indexes": {},
"foreignKeys": {
"collections_games_collection_id_collections_id_fk": {
"name": "collections_games_collection_id_collections_id_fk",
"tableFrom": "collections_games",
"tableTo": "collections",
"columnsFrom": [
"collection_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "cascade"
},
"collections_games_game_id_games_id_fk": {
"name": "collections_games_game_id_games_id_fk",
"tableFrom": "collections_games",
"tableTo": "games",
"columnsFrom": [
"game_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "cascade"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"games": {
"name": "games",
"columns": {
"id": {
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": true,
"autoincrement": true
},
"source_id": {
"name": "source_id",
"type": "integer",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"source": {
"name": "source",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"igdb_id": {
"name": "igdb_id",
"type": "integer",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"ra_id": {
"name": "ra_id",
"type": "integer",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"path_fs": {
"name": "path_fs",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"last_played": {
"name": "last_played",
"type": "integer",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "(unixepoch())"
},
"metadata": {
"name": "metadata",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "'{}'"
},
"slug": {
"name": "slug",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"platform_id": {
"name": "platform_id",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"cover": {
"name": "cover",
"type": "blob",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"type": {
"name": "type",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"summary": {
"name": "summary",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
}
},
"indexes": {
"games_source_id_unique": {
"name": "games_source_id_unique",
"columns": [
"source_id"
],
"isUnique": true
},
"games_igdb_id_unique": {
"name": "games_igdb_id_unique",
"columns": [
"igdb_id"
],
"isUnique": true
},
"games_ra_id_unique": {
"name": "games_ra_id_unique",
"columns": [
"ra_id"
],
"isUnique": true
},
"games_slug_unique": {
"name": "games_slug_unique",
"columns": [
"slug"
],
"isUnique": true
}
},
"foreignKeys": {
"games_platform_id_platforms_id_fk": {
"name": "games_platform_id_platforms_id_fk",
"tableFrom": "games",
"tableTo": "platforms",
"columnsFrom": [
"platform_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "cascade"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"platforms": {
"name": "platforms",
"columns": {
"id": {
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": true,
"autoincrement": true
},
"igdb_id": {
"name": "igdb_id",
"type": "integer",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"igdb_slug": {
"name": "igdb_slug",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"moby_id": {
"name": "moby_id",
"type": "integer",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"es_slug": {
"name": "es_slug",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"ra_id": {
"name": "ra_id",
"type": "integer",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "(unixepoch())"
},
"slug": {
"name": "slug",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"metadata": {
"name": "metadata",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"cover": {
"name": "cover",
"type": "blob",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"type": {
"name": "type",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"family_name": {
"name": "family_name",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
}
},
"indexes": {
"platforms_igdb_id_unique": {
"name": "platforms_igdb_id_unique",
"columns": [
"igdb_id"
],
"isUnique": true
},
"platforms_igdb_slug_unique": {
"name": "platforms_igdb_slug_unique",
"columns": [
"igdb_slug"
],
"isUnique": true
},
"platforms_moby_id_unique": {
"name": "platforms_moby_id_unique",
"columns": [
"moby_id"
],
"isUnique": true
},
"platforms_es_slug_unique": {
"name": "platforms_es_slug_unique",
"columns": [
"es_slug"
],
"isUnique": true
},
"platforms_ra_id_unique": {
"name": "platforms_ra_id_unique",
"columns": [
"ra_id"
],
"isUnique": true
},
"platforms_slug_unique": {
"name": "platforms_slug_unique",
"columns": [
"slug"
],
"isUnique": true
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"screenshots": {
"name": "screenshots",
"columns": {
"id": {
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": true,
"autoincrement": true
},
"game_id": {
"name": "game_id",
"type": "integer",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"content": {
"name": "content",
"type": "blob",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"type": {
"name": "type",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
}
},
"indexes": {},
"foreignKeys": {
"screenshots_game_id_games_id_fk": {
"name": "screenshots_game_id_games_id_fk",
"tableFrom": "screenshots",
"tableTo": "games",
"columnsFrom": [
"game_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "cascade"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
}
},
"views": {},
"enums": {},
"_meta": {
"schemas": {},
"tables": {},
"columns": {}
},
"internal": {
"indexes": {}
}
}

View file

@ -0,0 +1,13 @@
{
"version": "7",
"dialect": "sqlite",
"entries": [
{
"idx": 0,
"version": "6",
"when": 1771508990238,
"tag": "0000_pretty_harry_osborn",
"breakpoints": true
}
]
}