feat(client cap): client capability framework + peer API configuration

This commit is contained in:
DecDuck
2024-11-06 12:25:00 +11:00
parent adb4b7381e
commit 7d72a86876
7 changed files with 259 additions and 2 deletions

View File

@ -0,0 +1,14 @@
/*
Warnings:
- The values [DownloadAggregation] on the enum `ClientCapabilities` will be removed. If these variants are still used in the database, this will fail.
*/
-- AlterEnum
BEGIN;
CREATE TYPE "ClientCapabilities_new" AS ENUM ('PeerAPI', 'UserStatus');
ALTER TABLE "Client" ALTER COLUMN "capabilities" TYPE "ClientCapabilities_new"[] USING ("capabilities"::text::"ClientCapabilities_new"[]);
ALTER TYPE "ClientCapabilities" RENAME TO "ClientCapabilities_old";
ALTER TYPE "ClientCapabilities_new" RENAME TO "ClientCapabilities";
DROP TYPE "ClientCapabilities_old";
COMMIT;

View File

@ -0,0 +1,14 @@
/*
Warnings:
- The values [PeerAPI,UserStatus] on the enum `ClientCapabilities` will be removed. If these variants are still used in the database, this will fail.
*/
-- AlterEnum
BEGIN;
CREATE TYPE "ClientCapabilities_new" AS ENUM ('peerAPI', 'userStatus');
ALTER TABLE "Client" ALTER COLUMN "capabilities" TYPE "ClientCapabilities_new"[] USING ("capabilities"::text::"ClientCapabilities_new"[]);
ALTER TYPE "ClientCapabilities" RENAME TO "ClientCapabilities_old";
ALTER TYPE "ClientCapabilities_new" RENAME TO "ClientCapabilities";
DROP TYPE "ClientCapabilities_old";
COMMIT;

View File

@ -0,0 +1,23 @@
/*
Warnings:
- You are about to drop the column `endpoint` on the `Client` table. All the data in the column will be lost.
*/
-- AlterTable
ALTER TABLE "Client" DROP COLUMN "endpoint";
-- CreateTable
CREATE TABLE "ClientPeerAPIConfiguration" (
"id" TEXT NOT NULL,
"clientId" TEXT NOT NULL,
"ipConfigurations" TEXT[],
CONSTRAINT "ClientPeerAPIConfiguration_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "ClientPeerAPIConfiguration_clientId_key" ON "ClientPeerAPIConfiguration"("clientId");
-- AddForeignKey
ALTER TABLE "ClientPeerAPIConfiguration" ADD CONSTRAINT "ClientPeerAPIConfiguration_clientId_fkey" FOREIGN KEY ("clientId") REFERENCES "Client"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

View File

@ -0,0 +1,9 @@
/*
Warnings:
- You are about to drop the column `ipConfigurations` on the `ClientPeerAPIConfiguration` table. All the data in the column will be lost.
*/
-- AlterTable
ALTER TABLE "ClientPeerAPIConfiguration" DROP COLUMN "ipConfigurations",
ADD COLUMN "endpoints" TEXT[];

View File

@ -56,7 +56,8 @@ model Invitation {
}
enum ClientCapabilities {
DownloadAggregation
PeerAPI @map("peerAPI") // other clients can use the HTTP API to P2P with this client
UserStatus @map("userStatus") // this client can report this user's status (playing, online, etc etc)
}
enum Platform {
@ -70,12 +71,22 @@ model Client {
userId String
user User @relation(fields: [userId], references: [id])
endpoint String
capabilities ClientCapabilities[]
name String
platform Platform
lastConnected DateTime
peerAPI ClientPeerAPIConfiguration?
}
model ClientPeerAPIConfiguration {
id String @id @default(uuid())
clientId String @unique
client Client @relation(fields: [clientId], references: [id])
endpoints String[]
}
enum MetadataSource {