diff --git a/package-lock.json b/package-lock.json index 46481c0..8034823 100644 --- a/package-lock.json +++ b/package-lock.json @@ -711,9 +711,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.14.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.11.tgz", - "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==", + "version": "20.14.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.12.tgz", + "integrity": "sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==", "license": "MIT", "dependencies": { "undici-types": "~5.26.4" @@ -2405,9 +2405,9 @@ } }, "node_modules/typescript": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", - "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", diff --git a/prisma/migrations/20240710224753_fix_relation_zone_object/migration.sql b/prisma/migrations/20240710224753_fix_relation_zone_object/migration.sql deleted file mode 100644 index 0c23188..0000000 --- a/prisma/migrations/20240710224753_fix_relation_zone_object/migration.sql +++ /dev/null @@ -1,5 +0,0 @@ --- DropForeignKey -ALTER TABLE `ZoneObject` DROP FOREIGN KEY `ZoneObject_objectId_fkey`; - --- AddForeignKey -ALTER TABLE `ZoneObject` ADD CONSTRAINT `ZoneObject_objectId_fkey` FOREIGN KEY (`objectId`) REFERENCES `Object`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/prisma/migrations/20240711171341_add_tiles_model/migration.sql b/prisma/migrations/20240711171341_add_tiles_model/migration.sql deleted file mode 100644 index 6203e65..0000000 --- a/prisma/migrations/20240711171341_add_tiles_model/migration.sql +++ /dev/null @@ -1,19 +0,0 @@ -/* - Warnings: - - - You are about to drop the `TileTag` table. If the table is not empty, all the data it contains will be lost. - -*/ --- DropTable -DROP TABLE `TileTag`; - --- CreateTable -CREATE TABLE `Tile` ( - `id` VARCHAR(191) NOT NULL, - `name` VARCHAR(191) NOT NULL, - `tags` JSON NOT NULL, - `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - `updatedAt` DATETIME(3) NOT NULL, - - PRIMARY KEY (`id`) -) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; diff --git a/prisma/migrations/20240715213654_add_tags_field_to_objects/migration.sql b/prisma/migrations/20240715213654_add_tags_field_to_objects/migration.sql deleted file mode 100644 index 055c287..0000000 --- a/prisma/migrations/20240715213654_add_tags_field_to_objects/migration.sql +++ /dev/null @@ -1,5 +0,0 @@ --- AlterTable -ALTER TABLE `Object` ADD COLUMN `tags` JSON NULL; - --- AlterTable -ALTER TABLE `Tile` MODIFY `tags` JSON NULL; diff --git a/prisma/migrations/20240720124456_create_sprite_table/migration.sql b/prisma/migrations/20240720124456_create_sprite_table/migration.sql deleted file mode 100644 index 360c82d..0000000 --- a/prisma/migrations/20240720124456_create_sprite_table/migration.sql +++ /dev/null @@ -1,16 +0,0 @@ --- CreateTable -CREATE TABLE `Sprite` ( - `id` VARCHAR(191) NOT NULL, - `name` VARCHAR(191) NOT NULL, - `origin_x` DECIMAL(65, 30) NOT NULL DEFAULT 0, - `origin_y` DECIMAL(65, 30) NOT NULL DEFAULT 0, - `frameSpeed` INTEGER NOT NULL DEFAULT 0, - `isAnimated` BOOLEAN NOT NULL DEFAULT false, - `isLooping` BOOLEAN NOT NULL DEFAULT false, - `isPlayableCharacter` BOOLEAN NOT NULL DEFAULT false, - `isEnemy` BOOLEAN NOT NULL DEFAULT false, - `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - `updatedAt` DATETIME(3) NOT NULL, - - PRIMARY KEY (`id`) -) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; diff --git a/prisma/migrations/20240720175428_add_field/migration.sql b/prisma/migrations/20240720175428_add_field/migration.sql deleted file mode 100644 index 34d7769..0000000 --- a/prisma/migrations/20240720175428_add_field/migration.sql +++ /dev/null @@ -1,8 +0,0 @@ -/* - Warnings: - - - Added the required column `type` to the `Sprite` table without a default value. This is not possible if the table is not empty. - -*/ --- AlterTable -ALTER TABLE `Sprite` ADD COLUMN `type` VARCHAR(191) NOT NULL; diff --git a/prisma/migrations/20240720203031_new_sprite_table_fields/migration.sql b/prisma/migrations/20240720203031_new_sprite_table_fields/migration.sql deleted file mode 100644 index e47dc32..0000000 --- a/prisma/migrations/20240720203031_new_sprite_table_fields/migration.sql +++ /dev/null @@ -1,20 +0,0 @@ -/* - Warnings: - - - You are about to drop the column `isEnemy` on the `Sprite` table. All the data in the column will be lost. - - You are about to drop the column `isPlayableCharacter` on the `Sprite` table. All the data in the column will be lost. - - You are about to drop the column `type` on the `Sprite` table. All the data in the column will be lost. - -*/ --- AlterTable -ALTER TABLE `Object` ADD COLUMN `frameHeight` INTEGER NOT NULL DEFAULT 0, - ADD COLUMN `frameSpeed` INTEGER NOT NULL DEFAULT 0, - ADD COLUMN `frameWidth` INTEGER NOT NULL DEFAULT 0, - ADD COLUMN `isAnimated` BOOLEAN NOT NULL DEFAULT false; - --- AlterTable -ALTER TABLE `Sprite` DROP COLUMN `isEnemy`, - DROP COLUMN `isPlayableCharacter`, - DROP COLUMN `type`, - ADD COLUMN `frameHeight` INTEGER NOT NULL DEFAULT 0, - ADD COLUMN `frameWidth` INTEGER NOT NULL DEFAULT 0; diff --git a/prisma/migrations/20240721182636_add_pv_p_field/migration.sql b/prisma/migrations/20240721182636_add_pv_p_field/migration.sql deleted file mode 100644 index d1f84a7..0000000 --- a/prisma/migrations/20240721182636_add_pv_p_field/migration.sql +++ /dev/null @@ -1,2 +0,0 @@ --- AlterTable -ALTER TABLE `Zone` ADD COLUMN `pvp` BOOLEAN NOT NULL DEFAULT false; diff --git a/prisma/migrations/20240721235820_field_updates/migration.sql b/prisma/migrations/20240721235820_field_updates/migration.sql deleted file mode 100644 index 3b6e9a0..0000000 --- a/prisma/migrations/20240721235820_field_updates/migration.sql +++ /dev/null @@ -1,5 +0,0 @@ --- AlterTable -ALTER TABLE `Character` MODIFY `position_x` INTEGER NOT NULL DEFAULT 0, - MODIFY `position_y` INTEGER NOT NULL DEFAULT 0, - MODIFY `rotation` INTEGER NOT NULL DEFAULT 0, - MODIFY `zoneId` INTEGER NOT NULL DEFAULT 1; diff --git a/prisma/migrations/20240722001138_field_updates/migration.sql b/prisma/migrations/20240722001138_field_updates/migration.sql deleted file mode 100644 index a2356f5..0000000 --- a/prisma/migrations/20240722001138_field_updates/migration.sql +++ /dev/null @@ -1,12 +0,0 @@ --- AlterTable -ALTER TABLE `Item` MODIFY `description` VARCHAR(191) NULL; - --- AlterTable -ALTER TABLE `Zone` MODIFY `width` INTEGER NOT NULL DEFAULT 10, - MODIFY `height` INTEGER NOT NULL DEFAULT 10, - MODIFY `tiles` JSON NULL; - --- AlterTable -ALTER TABLE `ZoneObject` MODIFY `depth` INTEGER NOT NULL DEFAULT 0, - MODIFY `position_x` INTEGER NOT NULL DEFAULT 0, - MODIFY `position_y` INTEGER NOT NULL DEFAULT 0; diff --git a/prisma/migrations/20240722213348_removed_is_animated_field/migration.sql b/prisma/migrations/20240722213348_removed_is_animated_field/migration.sql deleted file mode 100644 index 1779472..0000000 --- a/prisma/migrations/20240722213348_removed_is_animated_field/migration.sql +++ /dev/null @@ -1,8 +0,0 @@ -/* - Warnings: - - - You are about to drop the column `isAnimated` on the `Sprite` table. All the data in the column will be lost. - -*/ --- AlterTable -ALTER TABLE `Sprite` DROP COLUMN `isAnimated`; diff --git a/prisma/migrations/20240722235323_separate_prisma_schemes/migration.sql b/prisma/migrations/20240722235323_separate_prisma_schemes/migration.sql deleted file mode 100644 index f568c37..0000000 --- a/prisma/migrations/20240722235323_separate_prisma_schemes/migration.sql +++ /dev/null @@ -1,42 +0,0 @@ -/* - Warnings: - - - Added the required column `characterTypeId` to the `Character` table without a default value. This is not possible if the table is not empty. - -*/ --- AlterTable -ALTER TABLE `Character` ADD COLUMN `characterTypeId` INTEGER NOT NULL; - --- AlterTable -ALTER TABLE `Sprite` ADD COLUMN `isAnimated` BOOLEAN NOT NULL DEFAULT false; - --- CreateTable -CREATE TABLE `CharacterSprite` ( - `id` INTEGER NOT NULL AUTO_INCREMENT, - `characterTypeId` INTEGER NOT NULL, - `spriteId` VARCHAR(191) NOT NULL, - `action` ENUM('IDLE_LEFT', 'IDLE_DOWN', 'SIT_LEFT', 'SIT_DOWN', 'WALK_LEFT', 'WALK_DOWN', 'ATTACK_LEFT', 'ATTACK_DOWN') NOT NULL, - - PRIMARY KEY (`id`) -) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - --- CreateTable -CREATE TABLE `CharacterType` ( - `id` INTEGER NOT NULL AUTO_INCREMENT, - `name` VARCHAR(191) NOT NULL, - `gender` ENUM('MALE', 'FEMALE') NOT NULL, - `race` ENUM('HUMAN', 'ELF', 'DWARF', 'ORC', 'GOBLIN') NOT NULL, - `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - `updatedAt` DATETIME(3) NOT NULL, - - PRIMARY KEY (`id`) -) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - --- AddForeignKey -ALTER TABLE `CharacterSprite` ADD CONSTRAINT `CharacterSprite_characterTypeId_fkey` FOREIGN KEY (`characterTypeId`) REFERENCES `CharacterType`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE `CharacterSprite` ADD CONSTRAINT `CharacterSprite_spriteId_fkey` FOREIGN KEY (`spriteId`) REFERENCES `Sprite`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE `Character` ADD CONSTRAINT `Character_characterTypeId_fkey` FOREIGN KEY (`characterTypeId`) REFERENCES `CharacterType`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/prisma/migrations/20240723001610_made_field_optional/migration.sql b/prisma/migrations/20240723001610_made_field_optional/migration.sql deleted file mode 100644 index 39342f4..0000000 --- a/prisma/migrations/20240723001610_made_field_optional/migration.sql +++ /dev/null @@ -1,2 +0,0 @@ --- AlterTable -ALTER TABLE `Character` MODIFY `characterTypeId` INTEGER NULL; diff --git a/prisma/migrations/20240710141932_init/migration.sql b/prisma/migrations/20240724010548_init/migration.sql similarity index 61% rename from prisma/migrations/20240710141932_init/migration.sql rename to prisma/migrations/20240724010548_init/migration.sql index 19bb2d6..26957cd 100644 --- a/prisma/migrations/20240710141932_init/migration.sql +++ b/prisma/migrations/20240724010548_init/migration.sql @@ -1,9 +1,18 @@ -- CreateTable -CREATE TABLE `Object` ( +CREATE TABLE `Chat` ( + `id` INTEGER NOT NULL AUTO_INCREMENT, + `characterId` INTEGER NOT NULL, + `zoneId` INTEGER NOT NULL, + `message` VARCHAR(191) NOT NULL, + `createdAt` DATETIME(3) NOT NULL, + + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `Sprite` ( `id` VARCHAR(191) NOT NULL, `name` VARCHAR(191) NOT NULL, - `origin_x` DECIMAL(65, 30) NOT NULL DEFAULT 0, - `origin_y` DECIMAL(65, 30) NOT NULL DEFAULT 0, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, @@ -11,13 +20,18 @@ CREATE TABLE `Object` ( ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable -CREATE TABLE `Item` ( +CREATE TABLE `SpriteImage` ( `id` VARCHAR(191) NOT NULL, + `spriteId` VARCHAR(191) NOT NULL, `name` VARCHAR(191) NOT NULL, - `description` VARCHAR(191) NOT NULL, - `stackable` BOOLEAN NOT NULL DEFAULT false, - `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - `updatedAt` DATETIME(3) NOT NULL, + `action` VARCHAR(191) NOT NULL, + `origin_x` DECIMAL(65, 30) NOT NULL DEFAULT 0, + `origin_y` DECIMAL(65, 30) NOT NULL DEFAULT 0, + `isAnimated` BOOLEAN NOT NULL DEFAULT false, + `isLooping` BOOLEAN NOT NULL DEFAULT false, + `frameWidth` INTEGER NOT NULL DEFAULT 0, + `frameHeight` INTEGER NOT NULL DEFAULT 0, + `frameSpeed` INTEGER NOT NULL DEFAULT 0, PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; @@ -32,6 +46,19 @@ CREATE TABLE `User` ( PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; +-- CreateTable +CREATE TABLE `CharacterType` ( + `id` INTEGER NOT NULL AUTO_INCREMENT, + `name` VARCHAR(191) NOT NULL, + `gender` ENUM('MALE', 'FEMALE') NOT NULL, + `race` ENUM('HUMAN', 'ELF', 'DWARF', 'ORC', 'GOBLIN') NOT NULL, + `spriteId` VARCHAR(191) NOT NULL, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` DATETIME(3) NOT NULL, + + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + -- CreateTable CREATE TABLE `Character` ( `id` INTEGER NOT NULL AUTO_INCREMENT, @@ -42,10 +69,11 @@ CREATE TABLE `Character` ( `level` INTEGER NOT NULL DEFAULT 1, `experience` INTEGER NOT NULL DEFAULT 0, `role` VARCHAR(191) NOT NULL DEFAULT 'player', - `position_x` INTEGER NOT NULL, - `position_y` INTEGER NOT NULL, - `rotation` INTEGER NOT NULL, - `zoneId` INTEGER NOT NULL, + `position_x` INTEGER NOT NULL DEFAULT 0, + `position_y` INTEGER NOT NULL DEFAULT 0, + `rotation` INTEGER NOT NULL DEFAULT 0, + `zoneId` INTEGER NOT NULL DEFAULT 1, + `characterTypeId` INTEGER NULL, UNIQUE INDEX `Character_name_key`(`name`), PRIMARY KEY (`id`) @@ -62,20 +90,53 @@ CREATE TABLE `CharacterItem` ( ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable -CREATE TABLE `TileTag` ( - `tile` VARCHAR(191) NOT NULL, - `tags` JSON NOT NULL, +CREATE TABLE `Tile` ( + `id` VARCHAR(191) NOT NULL, + `name` VARCHAR(191) NOT NULL, + `tags` JSON NULL, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` DATETIME(3) NOT NULL, - PRIMARY KEY (`tile`) + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `Object` ( + `id` VARCHAR(191) NOT NULL, + `name` VARCHAR(191) NOT NULL, + `tags` JSON NULL, + `origin_x` DECIMAL(65, 30) NOT NULL DEFAULT 0, + `origin_y` DECIMAL(65, 30) NOT NULL DEFAULT 0, + `isAnimated` BOOLEAN NOT NULL DEFAULT false, + `frameSpeed` INTEGER NOT NULL DEFAULT 0, + `frameWidth` INTEGER NOT NULL DEFAULT 0, + `frameHeight` INTEGER NOT NULL DEFAULT 0, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` DATETIME(3) NOT NULL, + + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `Item` ( + `id` VARCHAR(191) NOT NULL, + `name` VARCHAR(191) NOT NULL, + `description` VARCHAR(191) NULL, + `stackable` BOOLEAN NOT NULL DEFAULT false, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` DATETIME(3) NOT NULL, + + PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Zone` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `name` VARCHAR(191) NOT NULL, - `width` INTEGER NOT NULL, - `height` INTEGER NOT NULL, - `tiles` JSON NOT NULL, + `width` INTEGER NOT NULL DEFAULT 10, + `height` INTEGER NOT NULL DEFAULT 10, + `tiles` JSON NULL, + `pvp` BOOLEAN NOT NULL DEFAULT false, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, @@ -87,9 +148,9 @@ CREATE TABLE `ZoneObject` ( `id` VARCHAR(191) NOT NULL, `zoneId` INTEGER NOT NULL, `objectId` VARCHAR(191) NOT NULL, - `depth` INTEGER NOT NULL, - `position_x` INTEGER NOT NULL, - `position_y` INTEGER NOT NULL, + `depth` INTEGER NOT NULL DEFAULT 0, + `position_x` INTEGER NOT NULL DEFAULT 0, + `position_y` INTEGER NOT NULL DEFAULT 0, PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; @@ -105,16 +166,17 @@ CREATE TABLE `ZoneEventTile` ( PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; --- CreateTable -CREATE TABLE `Chat` ( - `id` INTEGER NOT NULL AUTO_INCREMENT, - `characterId` INTEGER NOT NULL, - `zoneId` INTEGER NOT NULL, - `message` VARCHAR(191) NOT NULL, - `createdAt` DATETIME(3) NOT NULL, +-- AddForeignKey +ALTER TABLE `Chat` ADD CONSTRAINT `Chat_characterId_fkey` FOREIGN KEY (`characterId`) REFERENCES `Character`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; - PRIMARY KEY (`id`) -) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; +-- AddForeignKey +ALTER TABLE `Chat` ADD CONSTRAINT `Chat_zoneId_fkey` FOREIGN KEY (`zoneId`) REFERENCES `Zone`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `SpriteImage` ADD CONSTRAINT `SpriteImage_spriteId_fkey` FOREIGN KEY (`spriteId`) REFERENCES `Sprite`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `CharacterType` ADD CONSTRAINT `CharacterType_spriteId_fkey` FOREIGN KEY (`spriteId`) REFERENCES `Sprite`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Character` ADD CONSTRAINT `Character_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; @@ -122,6 +184,9 @@ ALTER TABLE `Character` ADD CONSTRAINT `Character_userId_fkey` FOREIGN KEY (`use -- AddForeignKey ALTER TABLE `Character` ADD CONSTRAINT `Character_zoneId_fkey` FOREIGN KEY (`zoneId`) REFERENCES `Zone`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; +-- AddForeignKey +ALTER TABLE `Character` ADD CONSTRAINT `Character_characterTypeId_fkey` FOREIGN KEY (`characterTypeId`) REFERENCES `CharacterType`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; + -- AddForeignKey ALTER TABLE `CharacterItem` ADD CONSTRAINT `CharacterItem_characterId_fkey` FOREIGN KEY (`characterId`) REFERENCES `Character`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; @@ -132,13 +197,7 @@ ALTER TABLE `CharacterItem` ADD CONSTRAINT `CharacterItem_itemId_fkey` FOREIGN K ALTER TABLE `ZoneObject` ADD CONSTRAINT `ZoneObject_zoneId_fkey` FOREIGN KEY (`zoneId`) REFERENCES `Zone`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey -ALTER TABLE `ZoneObject` ADD CONSTRAINT `ZoneObject_objectId_fkey` FOREIGN KEY (`objectId`) REFERENCES `Object`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; +ALTER TABLE `ZoneObject` ADD CONSTRAINT `ZoneObject_objectId_fkey` FOREIGN KEY (`objectId`) REFERENCES `Object`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `ZoneEventTile` ADD CONSTRAINT `ZoneEventTile_zoneId_fkey` FOREIGN KEY (`zoneId`) REFERENCES `Zone`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE `Chat` ADD CONSTRAINT `Chat_characterId_fkey` FOREIGN KEY (`characterId`) REFERENCES `Character`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE `Chat` ADD CONSTRAINT `Chat_zoneId_fkey` FOREIGN KEY (`zoneId`) REFERENCES `Zone`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/prisma/schema/sprite.prisma b/prisma/schema/sprite.prisma index d68ed04..4c9fffb 100644 --- a/prisma/schema/sprite.prisma +++ b/prisma/schema/sprite.prisma @@ -1,34 +1,23 @@ model Sprite { - id String @id @default(uuid()) - name String - origin_x Decimal @default(0) - origin_y Decimal @default(0) - isAnimated Boolean @default(false) - frameSpeed Int @default(0) - frameWidth Int @default(0) - frameHeight Int @default(0) - isLooping Boolean @default(false) - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - characterSprites CharacterSprite[] + id String @id @default(uuid()) + name String + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + spriteImages SpriteImage[] + characterTypes CharacterType[] } -enum SpriteAction { - IDLE_LEFT - IDLE_DOWN - SIT_LEFT - SIT_DOWN - WALK_LEFT - WALK_DOWN - ATTACK_LEFT - ATTACK_DOWN -} - -model CharacterSprite { - id Int @id @default(autoincrement()) - characterTypeId Int - spriteId String - action SpriteAction - characterType CharacterType @relation(fields: [characterTypeId], references: [id], onDelete: Cascade) - sprite Sprite @relation(fields: [spriteId], references: [id], onDelete: Cascade) +model SpriteImage { + id String @id @default(uuid()) + spriteId String + sprite Sprite @relation(fields: [spriteId], references: [id], onDelete: Cascade) + name String + action String + origin_x Decimal @default(0) + origin_y Decimal @default(0) + isAnimated Boolean @default(false) + isLooping Boolean @default(false) + frameWidth Int @default(0) + frameHeight Int @default(0) + frameSpeed Int @default(0) } diff --git a/prisma/schema/user.prisma b/prisma/schema/user.prisma index aef12f3..144f564 100644 --- a/prisma/schema/user.prisma +++ b/prisma/schema/user.prisma @@ -24,7 +24,8 @@ model CharacterType { gender CharacterGender race CharacterRace characters Character[] - characterSprites CharacterSprite[] + spriteId String + sprite Sprite @relation(fields: [spriteId], references: [id], onDelete: Cascade) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } diff --git a/src/events/character/Create.ts b/src/events/character/Create.ts index 80ea3b5..e9d17a4 100644 --- a/src/events/character/Create.ts +++ b/src/events/character/Create.ts @@ -29,7 +29,7 @@ export default function (socket: TSocket, io: Server) { const character: Character = await prisma.character.create({ data: { name: data.name, - userId: user_id, + userId: user_id // characterTypeId: 1 // @TODO set to chosen character type } }) diff --git a/src/events/gm/sprite/Create.ts b/src/events/gm/sprite/Create.ts new file mode 100644 index 0000000..af13634 --- /dev/null +++ b/src/events/gm/sprite/Create.ts @@ -0,0 +1,43 @@ +import { Server } from 'socket.io' +import { TSocket } from '../../../utilities/Types' +import path from 'path' +import fs from 'fs/promises' +import prisma from '../../../utilities/Prisma' +import { writeFile } from 'node:fs/promises' + +/** + * Handle game master new sprite event + * @param socket + * @param io + */ +export default function (socket: TSocket, io: Server) { + socket.on('gm:sprite:create', async (data: undefined, callback: (response: boolean) => void) => { + try { + if (socket.character?.role !== 'gm') { + callback(false) + return + } + + const public_folder = path.join(process.cwd(), 'public', 'sprites') + + // Ensure the folder exists + await fs.mkdir(public_folder, { recursive: true }) + + const sprite = await prisma.sprite.create({ + data: { + name: 'New sprite' + } + }) + const uuid = sprite.id + + // Create folder with uuid + const sprite_folder = path.join(public_folder, uuid) + await fs.mkdir(sprite_folder, { recursive: true }) + + callback(true) + } catch (error) { + console.error('Error creating sprite:', error) + callback(false) + } + }) +} diff --git a/src/events/gm/sprite/Update.ts b/src/events/gm/sprite/Update.ts index c97242a..a75e167 100644 --- a/src/events/gm/sprite/Update.ts +++ b/src/events/gm/sprite/Update.ts @@ -5,12 +5,6 @@ import prisma from '../../../utilities/Prisma' type Payload = { id: string name: string - origin_x: number - origin_y: number - frameSpeed: number - frameWidth: number - frameHeight: number - isLooping: boolean } /** @@ -30,13 +24,7 @@ export default function (socket: TSocket, io: Server) { id: data.id }, data: { - name: data.name, - origin_x: data.origin_x, - origin_y: data.origin_y, - frameSpeed: data.frameSpeed, - frameWidth: data.frameWidth, - frameHeight: data.frameHeight, - isLooping: data.isLooping + name: data.name } }) diff --git a/src/events/gm/sprite/Upload.ts b/src/events/gm/sprite/Upload.ts index 3a0fd36..e435dc0 100644 --- a/src/events/gm/sprite/Upload.ts +++ b/src/events/gm/sprite/Upload.ts @@ -43,7 +43,7 @@ export default function (socket: TSocket, io: Server) { callback(true) } catch (error) { - console.error('Error uploading tile:', error) + console.error('Error uploading sprite:', error) callback(false) } }) diff --git a/src/repositories/SpriteRepository.ts b/src/repositories/SpriteRepository.ts index b377bfc..6e0ba28 100644 --- a/src/repositories/SpriteRepository.ts +++ b/src/repositories/SpriteRepository.ts @@ -4,7 +4,10 @@ import { Sprite } from '@prisma/client' class SpriteRepository { async getById(id: string): Promise { return prisma.sprite.findUnique({ - where: { id } + where: { id }, + include: { + spriteImages: true + } }) } diff --git a/src/utilities/Http.ts b/src/utilities/Http.ts index 26033fb..7c465dd 100644 --- a/src/utilities/Http.ts +++ b/src/utilities/Http.ts @@ -89,7 +89,7 @@ async function addHttpRoutes(app: Application) { const user = await userService.register(username, password) if (user) { - return res.status(200) + return res.status(200).json({ message: 'User registered' }) } return res.status(400).json({ message: 'Failed to register user' })