diff --git a/src/events/gameMaster/assetManager/tile/list.ts b/src/events/gameMaster/assetManager/tile/list.ts
index 777d7b0..180ad3a 100644
--- a/src/events/gameMaster/assetManager/tile/list.ts
+++ b/src/events/gameMaster/assetManager/tile/list.ts
@@ -1,24 +1,17 @@
-import { Tile } from '@prisma/client'
-import { Server } from 'socket.io'
-
-import { TSocket } from '#application/types'
 import characterRepository from '#repositories/characterRepository'
 import TileRepository from '#repositories/tileRepository'
+import { BaseEvent } from '#application/base/baseEvent'
+import { Tile } from '#entities/tile'
 
 interface IPayload {}
 
-export default class TileListEvent {
-  constructor(
-    private readonly io: Server,
-    private readonly socket: TSocket
-  ) {}
-
+export default class TileListEven extends BaseEvent {
   public listen(): void {
     this.socket.on('gm:tile:list', this.handleEvent.bind(this))
   }
 
-  private async handleEvent(data: any, callback: (response: Tile[]) => void): Promise<void> {
-    const character = await characterRepository.getById(this.socket.characterId as number)
+  private async handleEvent(data: IPayload, callback: (response: Tile[]) => void): Promise<void> {
+    const character = await characterRepository.getById(this.socket.characterId!)
     if (!character) return
 
     if (character.role !== 'gm') {
diff --git a/src/events/gameMaster/assetManager/tile/update.ts b/src/events/gameMaster/assetManager/tile/update.ts
index 9d58fd6..fb85d6d 100644
--- a/src/events/gameMaster/assetManager/tile/update.ts
+++ b/src/events/gameMaster/assetManager/tile/update.ts
@@ -1,27 +1,21 @@
-import { Server } from 'socket.io'
-
-import prisma from '#application/prisma'
-import { TSocket } from '#application/types'
 import characterRepository from '#repositories/characterRepository'
+import { BaseEvent } from '#application/base/baseEvent'
+import TileRepository from '#repositories/tileRepository'
+import { UUID } from '#application/types'
 
 type Payload = {
-  id: string
+  id: UUID
   name: string
   tags: string[]
 }
 
-export default class TileUpdateEvent {
-  constructor(
-    private readonly io: Server,
-    private readonly socket: TSocket
-  ) {}
-
+export default class TileUpdateEvent extends BaseEvent{
   public listen(): void {
     this.socket.on('gm:tile:update', this.handleEvent.bind(this))
   }
 
   private async handleEvent(data: Payload, callback: (success: boolean) => void): Promise<void> {
-    const character = await characterRepository.getById(this.socket.characterId as number)
+    const character = await characterRepository.getById(this.socket.characterId!)
     if (!character) return callback(false)
 
     if (character.role !== 'gm') {
@@ -29,15 +23,10 @@ export default class TileUpdateEvent {
     }
 
     try {
-      const Tile = await prisma.tile.update({
-        where: {
-          id: data.id
-        },
-        data: {
-          name: data.name,
-          tags: data.tags
-        }
-      })
+      const tile = await TileRepository.getById(data.id)
+      if (!tile) return callback(false)
+
+      await tile.setName(data.name).setTags(data.tags).update()
 
       callback(true)
     } catch (error) {
diff --git a/src/events/gameMaster/assetManager/tile/upload.ts b/src/events/gameMaster/assetManager/tile/upload.ts
index dc47099..984bf23 100644
--- a/src/events/gameMaster/assetManager/tile/upload.ts
+++ b/src/events/gameMaster/assetManager/tile/upload.ts
@@ -1,31 +1,23 @@
 import fs from 'fs/promises'
 import { writeFile } from 'node:fs/promises'
 
-import { Server } from 'socket.io'
-
-import { gameMasterLogger } from '#application/logger'
-import prisma from '#application/prisma'
 import Storage from '#application/storage'
-import { TSocket } from '#application/types'
 import characterRepository from '#repositories/characterRepository'
+import { BaseEvent } from '#application/base/baseEvent'
+import { Tile } from '#entities/tile'
 
 interface ITileData {
   [key: string]: Buffer
 }
 
-export default class TileUploadEvent {
-  constructor(
-    private readonly io: Server,
-    private readonly socket: TSocket
-  ) {}
-
+export default class TileUploadEvent extends BaseEvent {
   public listen(): void {
     this.socket.on('gm:tile:upload', this.handleEvent.bind(this))
   }
 
   private async handleEvent(data: ITileData, callback: (response: boolean) => void): Promise<void> {
     try {
-      const character = await characterRepository.getById(this.socket.characterId as number)
+      const character = await characterRepository.getById(this.socket.characterId!)
       if (!character) return callback(false)
 
       if (character.role !== 'gm') {
@@ -38,12 +30,9 @@ export default class TileUploadEvent {
       await fs.mkdir(public_folder, { recursive: true })
 
       const uploadPromises = Object.entries(data).map(async ([key, tileData]) => {
-        const tile = await prisma.tile.create({
-          data: {
-            name: 'New tile'
-          }
-        })
-        const uuid = tile.id
+        const tile = new Tile()
+        await tile.setName('New tile').save()
+        const uuid = tile.getId()
         const filename = `${uuid}.png`
         const finalFilePath = Storage.getPublicPath('tiles', filename)
         await writeFile(finalFilePath, tileData)
@@ -53,7 +42,7 @@ export default class TileUploadEvent {
 
       callback(true)
     } catch (error) {
-      gameMasterLogger.error('Error uploading tile:', error)
+      this.logger.error('Error uploading tile:', error)
       callback(false)
     }
   }